Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Einige Tausend Daten an Excel Übergeben (https://www.delphipraxis.net/91867-einige-tausend-daten-excel-uebergeben.html)

renekr 11. Mai 2007 05:58


Einige Tausend Daten an Excel Übergeben
 
Hallo,

Ich habe ein kleines Problem.

Ich will ca. 3000 Datensätze in Excel reinschreiben jeweils pro Zeile ca. 5 Werte.

Wenn ich nun ein Excel Workbook öffne weil ich eine Vorgabe habe dann dauert es Verdammt lang 1-2 Stunden .

Delphi-Quellcode:
     try
      begin
        XApp:=CreateOleObject('Excel.Application');
        XApp.Visible:=true;
      end;
    except
      showmessage('Unable to link with MS Excel, it seems as it is not installed on this system.');
      exit;
    end;

     XApp.Workbooks.Open(ExtractFilePath(ParamStr(0))+'Inventur.xls');
//Einfügen

for r:=1 to 500-1 do
    begin
        // sheet.Cells[row,col]:='55';
         XApp.Cells[r,1]:='Typ:';
         XApp.Cells[r,2]:='Bezeichnung: ';
         XApp.Cells[r,3]:='Bezeichnung: ';
         XApp.Cells[r,4]:='Bezeichnung: ';
         XApp.Cells[r,5]:='Bezeichnung: ';
         XApp.Cells[r,6]:='Bezeichnung: ';
         XApp.Cells[r,7]:='Bezeichnung: ';
         XApp.Cells[r,8]:='Bezeichnung: ';

end;
Wenn ich wiederum ein Excel generiere und ein Workbook adde und dann nur das Sheet dazu anspreche ,also keine Vorhandene Datei dann ist es Verdammt Schnell.

Delphi-Quellcode:
 try
      begin
        XApp:=CreateOleObject('Excel.Application');
        XApp.Visible:=true;
      end;
    except
      showmessage('Unable to link with MS Excel, it seems as it is not installed on this system.');
      exit;
    end;

    XApp.WorkBooks.Add(-4167); //open a new blank workbook
    XApp.WorkBooks[1].WorkSheets[1].Name:='Sheet1';
    //give any name required to ExcelSheet
     sheet:=XApp.WorkBooks[1].WorkSheets['Sheet1'];

//Einfügen
   for r:=1 to 200-1 do
    begin
        // sheet.Cells[row,col]:='55';
         sheet.Cells[r,1]:='Typ:';
         sheet.Cells[r,2]:='Bezeichnung: ';
         sheet.Cells[r,3]:='Bezeichnung: ';
         sheet.Cells[r,4]:='Bezeichnung: ';
         sheet.Cells[r,5]:='Bezeichnung: ';
         sheet.Cells[r,6]:='Bezeichnung: ';
         sheet.Cells[r,7]:='Bezeichnung: ';
         sheet.Cells[r,8]:='Bezeichnung: ';
    end;

Weiß jemand einen Weg wie ich das mit dem Vorhandenen XLS File auch schnell hinbekomme?

danke

marabu 11. Mai 2007 06:42

Re: Einige Tausend Daten an Excel Übergeben
 
Hallo René,

ich vermute, dass du eine ähnliche Performanz erzielst, wenn du die gleiche Art der Zellenaddressierung verwendest.

Delphi-Quellcode:
begin
  // ...
  XApp.Workbooks.Open(ExtractFilePath(ParamStr(0)) + 'Inventur.xls');
  sheet := XApp.WorkBooks[1].WorkSheets[1]; // oder über den Namen ...

  //Einfügen
  for r:=1 to 200-1 do
  begin
    // sheet.Cells[row, col] := '55';
    sheet.Cells[r, 1] := 'Typ:';
    sheet.Cells[r, 2] := 'Bezeichnung:';
    sheet.Cells[r, 3] := 'Bezeichnung:';
    sheet.Cells[r, 4] := 'Bezeichnung:';
    sheet.Cells[r, 5] := 'Bezeichnung:';
    sheet.Cells[r, 6] := 'Bezeichnung:';
    sheet.Cells[r, 7] := 'Bezeichnung:';
    sheet.Cells[r, 8] := 'Bezeichnung:';
  end;
  // ...
Freundliche Grüße

renekr 11. Mai 2007 07:03

Re: Einige Tausend Daten an Excel Übergeben
 
Hi,
Danke ich habe auch nochmals rumgespielt und soeben festgestellt das es an der Vorlage liegt.

Die macht iergendwie die Seiten Zahl automatisch .
Wenn willst kann i Sie dir mal per PN schicken.


Aber behoben hab i es noch nicht bekommen.

PS: Lösung gefunden:
In der Datei war unter Ansicht Seitenumbruch aktiviert das macht alles verdammt langsam.
danke

Bernhard Geyer 11. Mai 2007 08:51

Re: Einige Tausend Daten an Excel Übergeben
 
Zitat:

Zitat von renekr
Wenn ich nun ein Excel Workbook öffne weil ich eine Vorgabe habe dann dauert es Verdammt lang 1-2 Stunden.

Das Problem ist das du jeden Werte eines per COM/OLE überträgst. Du mußt das als VarArray in Delphi anlegen und dann als Range an Excel übergeben.
Kann dir leider keinen Code geben da ich dieses Verfahren nur von einer Kaufkomponente kenne.
Alternativ besorgst du dir Komponenten die Exceldateien (*.xls) native erzeugen können ohne Excel.

Jelly 11. Mai 2007 14:21

Re: Einige Tausend Daten an Excel Übergeben
 
Oder, wenn es sich um eine Tabelle handelt, kannst du Excel auch über ADO ansprechen.

Robert Marquardt 11. Mai 2007 14:32

Re: Einige Tausend Daten an Excel Übergeben
 
Es duerfte auch schneller gehen wenn man sich nicht jedesmal von Sheet zu Cells zu Row zu Column hangelt. Einmal innerhalb der Schleife eine Hilfsvariable fuer "sheet.Cells[r]" besetzen und dann (vermutlich) Hilf.Items[1] usw. benutzen. Man darf nicht vergessen das jede .-Operation oder jeder andere Zugriff auf ein Element bedeutet das man einmal vom Client zum Server geht und zurueck. Auch sind Index-Zugriffe oft serverseitig boesartig langsam. Intern hangelt sich das Officeprogramm oft an einer verketteten Liste entlang.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz