Creați un fișier Excel și scrieți-l cu ajutorul lui ole

Creați un fișier Excel și scrieți-l folosind OLE

Nimeni nu va da un exemplu?
Într-o bliț, există un exemplu excelent pentru deschiderea și citirea dintr-un fișier existent existent.






(cu imbunatatirile mele in "locul" sa dovedit ca asta e)
=====================
procedura TForm1.Button1Click (expeditor: TObject);
var
# xA0; Excel. varianta;
# xA0; WorkSheet. varianta;
# xA0; I, J # xA0;: Integer;
# xA0; cls_ExcelObject # xA0;: string;
# xA0; regData. TRegistry;
începe

# xA0; cls_ExcelObject: = "Excel.Application";
# xA0; regData: = TRegistry.Create;
# xA0; # xA0; regData.RootKey: = HKEY_CLASSES_ROOT;
# xA0; # xA0; # xA0; încercați # xA0; # xA0; dacă regData.OpenKey ("\ Excel.Application \ CurVer", False) atunci
# xA0; # xA0; # xA0; # xA0; # xA0; începeți # xA0; # xA0; # xA0; cls_ExcelObject: = regData.ReadString ("");
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; regData.CloseKey;
# xA0; # xA0; # xA0; # xA0; # xA0; capăt
# xA0; # xA0; în cele din urmă # xA0; # xA0; regData.Free; # xA0; sfârșitul;

# xA0; dacă OpenDialog1.Execute începe apoi
# xA0; # xA0; Excel: = CreateOleObject ( # xA0; cls_ExcelObject);
# xA0; # xA0; Excel.Visible: = False;
# xA0; # xA0; Excel.Workbooks.Open (OpenDialog1.FileName);

# xA0; Flux de lucru: cărți de lucru Excel [1].
# xA0; # xA0; ListView1.Columns.Clear;
# xA0; # xA0; ListView1.Items.Clear;
# xA0; # xA0; pentru I: = 1 la WorkSheet.Cells.CurrentRegion.Columns.Count do
# xA0; # xA0; # xA0; ListView1.Columns.Add.Caption: = VarToStr (WorkSheet.Cells [1, I]);
# xA0; # xA0; pentru I: = 1 la WorkSheet.Cells.CurrentRegion.Rows.Count do
# xA0; # xA0; cu ListView1.Items.Add să înceapă
# xA0; # xA0; # xA0; Legendă: = VarToStr (WorkSheet.Cells [I, 1]);
# xA0; # xA0; # xA0; pentru J: = 2 la WorkSheet.Cells.CurrentRegion.Columns.Count
# xA0; # xA0; # xA0; # xA0; SubItems.Add (VarToStr (WorkSheet.Cells [I, J]);
# xA0; # xA0; sfârșitul;
# xA0; # xA0; Excel.Workbooks.Close;
# xA0; # xA0; Excel.Quit;
# xA0; sfârșitul;
se încheie;
===================

Dar am nevoie pentru a crea un fișier și ekselevsky câteva linii ușor să arunce în celulele dorite.

În primul rând, explicați-vă să citiți din registru?
CreateOleObject ("Excel.Application")
rulează pe toate sistemele de operare cu orice versiune de Excel.

> câteva linii acolo pentru a arunca celulele potrivite.
Excel.WorkBooks [1] .Sheets [1] .Cells [2,2]: = "GanibalLector";

Pentru a citi din registru a fost necesar mai devreme (acum, probabil, nu este necesar) - ca altfel, dacă Excel pe mașini au fost diferite, atunci a apărut o eroare. Numărul versiunii Excel este înlocuit de Reets (repet că acum Delphy o face pe ea însăși, fără a umfla astfel de nuanțe ale programatorului)







Trebuie să fac exportul de date de la Delphi la un fișier Excel.
Înainte de a (programul se execută 6 ani), am făcut-o în text și primesc acum un program de actualizare și au nevoie ca datele să fie în fișierul ekselevskom.

Nu sunt amuzat de linia codului în sine, cum să-l scriu într-un fișier Excel deschis, dar cum să creez un nou fișier Excel de la Delphi, numește-l. # xA0; adăugați-o acolo # xA0; fișierul de care am nevoie, salvați și închideți fișierul.
În ultimii ani, aproape că nu fac programare, ieri sa așezat și sa dovedit foarte greu pentru a intra în proces, am de frână. (În D7 eu nu pot găsi chiar și un ajutor pentru componente, cum ar fi ExcelAplication, imediat ce certificatul nu este reconstruit, până când m-am uitat componentele sursa -. Dar este foarte incomod și cu ajutorul este imposibil să se verifice)

Procedura Tform6.WriteIntoExel;
var
ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Varianta;
St: String;
BeginCol, BeginRow, I, J: întreg;
RowCount, ColCount: întreg;
începe
BeginCol: = 2;
BeginRow: = 2;
RowCount: = Form4.Query1.RecordCount + 1 + 5 * Form5.ListBox1.Items.Count;
ColCount: = 10;
ExcelApp: = CreateOleObject ("Excel.Application");
ExcelApp.Application.EnableEvents: = false;
Carnet de lucru: = ExcelApp.WorkBooks.Add;
ArrayData: = VarArrayCreate ([1, RowCount, 1, ColCount], varVariant);
Form4.Query1.First;
St: = Form4.Query1.FieldByName ("nume") AsVariant;
J: = 6;
ArrayData [1,3]: = "Raport privind expedierea produselor finite";
ArrayData [3,2]: = Form4.Query1.FieldByName ("nume") AsVariant;
ArrayData [4,5]: = "Pentru perioada de la" + Form5.MaskEdit1.Text + "la" + Form5.MaskEdit2.Text;
pentru i: = 1 până la Form4.Query1.RecordCount
# xA0; # xA0; începe
# xA0; # xA0; # xA0; Dacă St<>Form4.Query1.FieldByName ("nume"), apoi AsVariant
# xA0; # xA0; # xA0; # xA0; începe
# xA0; # xA0; # xA0; # xA0; # xA0; St: = Form4.Query1.FieldByName ("nume") AsVariant;
# xA0; # xA0; # xA0; # xA0; # xA0; ArrayData [j + 2,2]: = Form4.Query1.FieldByName ("nume") AsVariant;
# xA0; # xA0; # xA0; # xA0; # xA0; ArrayData [j + 3,5]: = "Pentru perioada de la" + Form5.MaskEdit1.Text + "la" + Form5.MaskEdit2.Text;
# xA0; # xA0; # xA0; # xA0; # xA0; j: = j + 5;
# xA0; # xA0; # xA0; # xA0; se încheie;
# xA0; # xA0; # xA0; ArrayData [J, 1]: = Form4.Query1.FieldByName ("Nume_1") AsVariant;
# xA0; # xA0; # xA0; ArrayData [J, 6]: = Form4.Query1.FieldByName ("Suma 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; se încheie;
# xA0; # xA0; Cell1: = WorkBook.WorkSheets [1] .Celuri [BeginRow, BeginCol];
# xA0; # xA0; Cell2: = WorkBook.WorkSheets [1] .Celuri [BeginRow + RowCount-1, BeginCol + ColCount-1];
# xA0; # xA0; Intervalul: = WorkBook.WorkSheets [1] .Range [Cell1, Cell2];
# xA0; # xA0; Range.Value: = ArrayData;
# xA0; # xA0; ExcelApp.Visible: = adevărat;
se încheie;

ÎMBUNĂTĂȚI multumesc domnilor!
În seara asta cred că pot să fac pe baza acestor coduri ceea ce am nevoie.

dar există probleme cu locul de muncă [4] (deși, poate că funcționează doar pentru mine buggy). Problema este că pentru a salva frunzele tabletei

o jumătate de minut (200 de linii, 15 coloane). Și dacă fac vizibil = adevărat (se afișează procesul de umplere a celulelor) și apoi o dau undeva, de exemplu, în meniu, atunci înregistrarea este accelerată la fiecare 5.

Deci, vreau să întreb: nu are Excel metode precum BeginUpdate / EndUpdate sau ceva pentru a accelera înregistrarea.

Pentru a accelera, folosesc tamponul (deși mulți nu-i plac) Există o opțiune de mare viteză pentru Word. Pot să-i arăt.

> atunci mă duc undeva, de exemplu, în meniu, apoi înregistrarea este accelerată la fiecare 5
Aparent, acest lucru se datorează priorității.

> Vreau să întreb: are Excel metode
> introduceți BeginUpdate / EndUpdate sau ceva pentru a accelera înregistrarea.







Articole similare

Trimiteți-le prietenilor: