Експорт даних з Delphi в Excel (исходники), Різне, Програмування, статті

Рано чи пізно практично кожен програміст стикається з необхідністю організувати експорт даних в MS Office. При цьому кожне “покоління” програмістів натикається на одні й ті ж вила.

Ось три часто зустрічаються питання:



Велику допомогу в розумінні цих та інших питань приносить читання вихідних текстів функцій модуля ComObj. 🙂

У всіх випадках слід підключити модулі ComObj і ActiveX

1. Як визначити чи встановлений Excel


Функція повертає True якщо знайдений OLE-об’єкт. Приклад використання:






  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;


Якщо потрібна більш детальна інформація про об’єкт, можна почитати хелп по функції API CLSIDFromProgID.

2. Як визначити чи запущений Excel


Даний приклад шукає активний екземпляр Excel і робить його видимим:




var
ExcelApp : Variant;
begin
try
/ / Шукаємо запущений примірниках Excel, якщо він не знайдений, викликається виняток
ExcelApp := GetActiveOleObject(“Excel.Application”);
/ / Робимо його видимим
ExcelApp.Visible := true;
except
end;

3. Як вивести дані в Excel


Можна виводити дані послідовно в кожну клітинку, але це очинь сильно уповільнює роботу. Краще сформувати варіантний масив, і виконати присвоєння області (Range) цього масиву.




var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData : Variant;
TemplateFile : String;
BeginCol, BeginRow, i, j : integer;
RowCount, ColCount : integer;
begin
/ / Координати лівого верхнього кута області, в яку будемо виводити дані
BeginCol := 1;
BeginRow := 5;
/ / Розміри виведеного масиву даних
RowCount := 100;
ColCount := 50;
/ / Створення Excel
ExcelApp := CreateOleObject(
“Excel.Application”
);
/ / Відключаємо реакцію Excel на події, щоб прискорити виведення інформації
ExcelApp.Application.EnableEvents := false;
/ / Створюємо Книгу (Workbook) / / Якщо заповнюємо шаблон, то
// Workbook := ExcelApp.WorkBooks.Add(“C:MyTemplate.xls”);
Workbook := ExcelApp.WorkBooks.Add;
/ / Створюємо варіантний Масив, який заповнимо вихідними даними
ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);
/ / Заповнюємо масив
for I := 1 to RowCount do
for J := 1 to ColCount do
ArrayData[I, J] := J * 10 + I;
/ / Ліва верхня осередок області, до якої будемо виводити дані
Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
/ / Права нижня осередок області, до якої будемо виводити дані
Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow + RowCount – 1, BeginCol +
ColCount – 1];
/ / Область, в яку будемо виводити дані
Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];
/ / А ось і сам висновок даних / / Набагато швидше поячеечного присвоєння
Range.Value := ArrayData;
/ / Робимо Excel видимим
ExcelApp.Visible := true;


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*