Експорт в Excel h2>
Кулюкін Олег p>
Рано
чи пізно практично кожен програміст стикається з необхідністю
організувати експорт даних в MS Office. При цьому кожне "покоління"
програмістів натикається на одні й ті самі вила. p>
Ось
три часто зустрічаються питання. p>
1.
Як визначити чи встановлений Excel p>
2.
Як визначити запущений чи Excel p>
3.
Як вивести дані в Excel p>
Велику
допомога в розумінні цих та інших питань приносить читання вихідних текстів
функцій модуля ComObj. :) P>
Під
всіх випадках слід підключити модулі ComObj і ActiveX p>
1.
Як визначити чи встановлений Excel p>
Функція
повертає True якщо знайдено OLE-об'єкт p>
Приклад
використання p>
if
not IsOLEObjectInstalled ( 'Excel.Application') then ShowMessage ( 'Клас не зареєстрований')
else ShowMessage ( 'Клас знайдено'); function IsOLEObjectInstalled (Name: String):
boolean; var ClassID: TCLSID; Rez: HRESULT; begin// Шукаємо CLSID OLE-об'єкта
Rez: = CLSIDFromProgID (PWideChar (WideString (Name)), ClassID); if Rez = S_OK
then// Об'єкт знайдений Result: = true else Result: = false; end; p>
Якщо
потрібна більш детальна інформація про об'єкт, можна почитати хелп по функції API
CLSIDFromProgID. p>
2.
Як визначити запущений чи Excel p>
Даний
приклад шукає активний екземпляр Excel і робить його видимим p>
var
ExcelApp: Variant; begin try// Шукаємо запущений екземплят Excel, якщо він не
знайдений, викликається виняток ExcelApp: =
GetActiveOleObject ( 'Excel.Application');// Робимо його видимим ExcelApp.Visible
: = True; except end; p>
3.
Як вивести дані в Excel p>
Можна
виводити дані послідовно в кожну клітинку, але це очинь сильно сповільнює
роботу. Краще сформувати варіантний масив, і виконати присвоєння області
(Range) цього масиву. p>
var
p>
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
p>
TemplateFile: String; p>
BeginCol, BeginRow, i, j: integer;
p>
RowCount, ColCount: integer; p>
begin p>
//
Координати лівого верхнього кута області, до якої будемо виводити дані p>
BeginCol
: = 1; p>
BeginRow
: = 5; p>
//
Розміри виведеного масиву даних p>
RowCount: = 100; p>
ColCount: = 50; p>
// Створення Excel p>
ExcelApp: =
CreateOleObject ( 'Excel.Application'); p>
//
Відключаємо Excel реакцію на події, щоб прискорити виведення інформації p>
ExcelApp.Application.EnableEvents: =
false; p>
//
Створюємо Книгу (Workbook) p>
//
Якщо заповнюємо шаблон, то Workbook: = ExcelApp.WorkBooks.Add ( 'C: MyTemplate.xls'); p>
Workbook
: = ExcelApp.WorkBooks.Add; p>
//
Створюємо варіантний Масив, який заповнимо вихідними даними p>
ArrayData: = VarArrayCreate ([1,
RowCount, 1, ColCount], varVariant); p>
// Заповнюємо масив p>
for I: = 1 to RowCount do p>
for J: = 1 to ColCount do p>
ArrayData [I, J]: = J * 10 + I; p>
//
Ліва верхня осередок області, до якої будемо виводити дані p>
Cell1: =
WorkBook.WorkSheets [1]. Cells [BeginRow, BeginCol]; p>
//
Права нижня осередок області, до якої будемо виводити дані p>
Cell2: =
WorkBook.WorkSheets [1]. Cells [BeginRow +
RowCount - 1, BeginCol + p>
ColCount
- 1]; p>
//
Область, в яку будемо виводити дані
p>
Range: =
WorkBook.WorkSheets [1]. Range [Cell1, Cell2]; p>
//
А ось і сам висновок даних p>
//
Набагато швидше поячеечного присвоєння p>
Range.Value
: = ArrayData; p>
// Робимо Excel видимим p>
ExcelApp.Visible: = true; p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://vlad2000.h1.ru/
p>