Створення файлу Ексель і запис в нього за допомогою ole

Створення файлу Ексель і запис в нього за допомогою OLE

Ніхто не підкине приклад?
У Пекаха є відмінний приклад для відкриття і зчитування з існуючого екселевскій файлу.
(З моїми невеликими доробками "за місцем" вийшло ось що)
=====================
procedure TForm1.Button1Click (Sender: TObject);
var
# XA0; Excel. Variant;
# XA0; WorkSheet. Variant;
# XA0; I, J # XA0 ;: Integer;
# XA0; cls_ExcelObject # XA0 ;: string;
# XA0; regData. TRegistry;
begin

# XA0; cls_ExcelObject: = "Excel.Application";
# XA0; regData: = TRegistry.Create;
# XA0; # XA0; regData.RootKey: = HKEY_CLASSES_ROOT;
# XA0; # XA0; # XA0; try # XA0; # XA0; if regData.OpenKey ( "\ Excel.Application \ CurVer", False) then
# XA0; # XA0; # XA0; # XA0; # XA0; begin # XA0; # XA0; # XA0; cls_ExcelObject: = regData.ReadString ( "");
# XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; # XA0; regData.CloseKey;
# XA0; # XA0; # XA0; # XA0; # XA0; end
# XA0; # XA0; finally # XA0; # XA0; regData.Free; # XA0; end;

# XA0; if OpenDialog1.Execute then begin
# XA0; # XA0; Excel: = CreateOleObject ( # XA0; cls_ExcelObject);
# XA0; # XA0; Excel.Visible: = False;
# XA0; # XA0; Excel.Workbooks.Open (OpenDialog1.FileName);

# XA0; # XA0; WorkSheet: = Excel.Workbooks [1] .WorkSheets [1];
# XA0; # XA0; ListView1.Columns.Clear;
# XA0; # XA0; ListView1.Items.Clear;
# XA0; # XA0; for I: = 1 to WorkSheet.Cells.CurrentRegion.Columns.Count do
# XA0; # XA0; # XA0; ListView1.Columns.Add.Caption: = VarToStr (WorkSheet.Cells [1, I]);
# XA0; # XA0; for I: = 1 to WorkSheet.Cells.CurrentRegion.Rows.Count do
# XA0; # XA0; with ListView1.Items.Add do begin
# XA0; # XA0; # XA0; Caption: = VarToStr (WorkSheet.Cells [I, 1]);
# XA0; # XA0; # XA0; for J: = 2 to WorkSheet.Cells.CurrentRegion.Columns.Count do
# XA0; # XA0; # XA0; # XA0; SubItems.Add (VarToStr (WorkSheet.Cells [I, J]));
# XA0; # XA0; end;
# XA0; # XA0; Excel.Workbooks.Close;
# XA0; # XA0; Excel.Quit;
# XA0; end;
end;
===================

Але мені потрібно сформувати файл екселевскій і несколкьо рядків туди закинути в потрібні комірки.

По-перше, обьясни на кой тобі зчитувати з реєстру?
CreateOleObject ( "Excel.Application")
запускається на всіх ОС з будь-якою версією Excel.

> Несколкьо рядків туди закинути в потрібні комірки.
Excel.WorkBooks [1] .Sheets [1] .Cells [2,2]: = "GanibalLector";

Зчитувати з реєстру потрібно було раніше (зараз можливо не треба) - так як інакше якщо Ексель на машинах були різні то відбувалася помилка. З реетса підставляється номер версії екселя (повторюся що напевно зараз це робить сама Делфі НЕ озабачівая такими нюансами програміста)

Мені потрібно зробити експорт даних з Делфі в екселевскій файл.
Раніше (програма працює 6 років) я його робив в текстовій а зараз апгрейдили приймаючу програму і вони вимагають щоб дані були в екселевскій файлі.

Мене озабачівает не як така рядок коду як саме записати у відкритий екселевскій файл, а як з Делфі створити НОВИЙ екселевскій файл, привласнити йому ім'я. # XA0; додати туди # XA0; потрібну мені інфу, зберегти і закрити файл.
Останні кілька років я практично не займаюся програмуванням, вчора сіл і як виявилося дуже тяжко входити в процес, гальмую. (В D7 я навіть не можу знайти хелп на компоненти типу ExcelAplication, як тільки не перебудовував довідку. Дивлюся поки исходники компонентів - але це досить незручно та й самого хелпа то почитати не виходить)

Procedure Tform6.WriteIntoExel;
Var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
St: String;
BeginCol, BeginRow, I, J: integer;
RowCount, ColCount: integer;
begin
BeginCol: = 2;
BeginRow: = 2;
RowCount: = Form4.Query1.RecordCount + 1 + 5 * Form5.ListBox1.Items.Count;
ColCount: = 10;
ExcelApp: = CreateOleObject ( "Excel.Application");
ExcelApp.Application.EnableEvents: = false;
Workbook: = ExcelApp.WorkBooks.Add;
ArrayData: = VarArrayCreate ([1, RowCount, 1, ColCount], varVariant);
Form4.Query1.First;
St: = Form4.Query1.FieldByName ( "name"). AsVariant;
J: = 6;
ArrayData [1,3]: = "Звіт по відвантаженню готової продукції";
ArrayData [3,2]: = Form4.Query1.FieldByName ( "name"). AsVariant;
ArrayData [4,5]: = "За період з" + Form5.MaskEdit1.Text + "по" + Form5.MaskEdit2.Text;
for i: = 1 to Form4.Query1.RecordCount do
# XA0; # XA0; Begin
# XA0; # XA0; # XA0; If St<>Form4.Query1.FieldByName ( "name"). AsVariant then
# XA0; # XA0; # XA0; # XA0; begin
# XA0; # XA0; # XA0; # XA0; # XA0; St: = Form4.Query1.FieldByName ( "name"). AsVariant;
# XA0; # XA0; # XA0; # XA0; # XA0; ArrayData [j + 2,2]: = Form4.Query1.FieldByName ( "name"). AsVariant;
# XA0; # XA0; # XA0; # XA0; # XA0; ArrayData [j + 3,5]: = "За період з" + Form5.MaskEdit1.Text + "по" + Form5.MaskEdit2.Text;
# XA0; # XA0; # XA0; # XA0; # XA0; j: = j + 5;
# XA0; # XA0; # XA0; # XA0; end;
# XA0; # XA0; # XA0; ArrayData [J, 1]: = Form4.Query1.FieldByName ( "Name_1"). AsVariant;
# XA0; # XA0; # XA0; ArrayData [J, 6]: = Form4.Query1.FieldByName ( "Sum of Allart"). AsVariant;
# XA0; # XA0; # XA0; ArrayData [J, 7]: = Form4.Query1.FieldByName ( "Edizm"). AsVariant;
# XA0; # XA0; # XA0; j: = j + 1;
# XA0; # XA0; # XA0; Form4.Query1.Next;
# XA0; # XA0; end;
# XA0; # XA0; Cell1: = WorkBook.WorkSheets [1] .Cells [BeginRow, BeginCol];
# XA0; # XA0; Cell2: = WorkBook.WorkSheets [1] .Cells [BeginRow + RowCount-1, BeginCol + ColCount-1];
# XA0; # XA0; Range: = WorkBook.WorkSheets [1] .Range [Cell1, Cell2];
# XA0; # XA0; Range.Value: = ArrayData;
# XA0; # XA0; ExcelApp.Visible: = true;
end;

Велетенська спасибі панове!
Сьогодні ввечері думаю зможу зробити на основі цих кодів то що мені треба.

але є глюки з роботою [4] (хоча, може, це тільки у мене глючно працює). Проблема в тому, що на збереження таблички йде

півхвилини (200 рядків, 15 стовпчиків). Причому, якщо я роблю visible = true (відображається процес заповнення клітинок), і потім тикаю куди-небудь, наприклад, в меню, то запис прискорюється раз в 5.

Ось хочу запитати: чи є у екселя якісь методи типу BeginUpdate / EndUpdate, або щось, щоб прискорити запис.

Для прискорення, використовую буфер (хоча, багатьом не подобатися) .Є швидкісний варіант для Word.Могу показати.

> Потім тикаю куди-небудь, наприклад, в меню, то запис прискорюється раз в 5
Судячи з усього, це через пріоритету.

> Ось хочу запитати: чи є у екселя якісь методи
> Типу BeginUpdate / EndUpdate, або щось, щоб прискорити запис.

Схожі статті