Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringList in Exceltabelle ausgeben (https://www.delphipraxis.net/136442-tstringlist-exceltabelle-ausgeben.html)

Ferox 30. Jun 2009 16:27


TStringList in Exceltabelle ausgeben
 
Guten Nachmittag,

ich hab ein kleines Problem, aber ich bin mir sicher, dass ihr mir weiterhelfen könnt.

Ich habe vor geraumer Zeit eine Unit hier gefunden, die StringGrids in Excel-Tabellen umwandelt. Dass alles hat auch wunderbar geklappt, bis ich angefangen habe, Einträge mit mehr als 255 Zeichen zu verwenden. Jetzt verwende ich Datensätze mit 1000+ Zeichen, die ich nicht mehr in eine StringGrid Cell einlesen kann.Alle diese Datensätze, werden in einer TStringList schön untereinander angeordnet.

Was ich jetzt suche, ist eine Funktion, die die erste Zeile der TStringList nimmt und in die 1. Zelle der Exceldatei speichert.
Die 2. Zeile, dann in die 2. Zelle usw...

Danke im Voraus
Ferox

Popov 30. Jun 2009 16:36

Re: TStringList in Exceltabelle ausgeben
 
Wenn man wüßte welche Unit das ist, könnte man dir besser helfen.

Aber wenn es allgemein nur um TStringList geht, dann sieht das in etwa so aus:

Delphi-Quellcode:
  x := sl[0]; //der erste StringList Wert (wenn vorhanden)
  y := sl[1]; //der zweite StringList Wert (wenn vorhanden)

p80286 30. Jun 2009 16:41

Re: TStringList in Exceltabelle ausgeben
 
Hallo Ferox,

in den Untiefen meiner Sammlung hab ich das hier gefunden:
Delphi-Quellcode:
procedure STRINGL2EXCELFILE(ll:tstringlist;excfile:shortstring;trenner,EndofRecord:char);
var
  i,j,pp: integer;
  ez   : integer;
  excel : variant;
  satz : ansistring;
  zelle : ansistring; {!! Begrenzung kann auch ansistring sein!}
begin
  try
    excel:=createoleobject('EXCEL.APPLICATION');
  except
    showmessage('Excel kann nicht gestartet werden!');
    exit;
  end;
  //excel.visible:=true; { visible nur für test-zwecke }
  excel.workbooks.Add;
  i:=0 ;
  ez:=0;  { excel-Zeilen}
  repeat
    satz:=ll[i];
    while (i<ll.count-1) and (pos(EndofRecord,satz)=0) do begin
       inc(i,1);
       satz:=satz+ll[i];
    end;
    pp:=pos(trenner,satz);
    j:=0;
    if pp>0 then repeat
      zelle:=''''+copy(satz,1,pp-1); { Textinterpretation erzwingen }
      excel.activesheet.cells(ez+1,j+1):=zelle; {cells1..x/1..y }
      delete(satz,1,pp);
      inc(j,1);
      pp:=pos(trenner,satz);
    until (pp=0) or (length(satz)<1);
    if length(satz)>0 then begin
      if satz[length(satz)]=EndofRecord then
        delete(satz,length(satz),1);
      zelle:=satz;
      excel.cells(ez+1,j+1):=zelle;
    end;
    inc(i,1);
    inc(ez,1);
  until i>ll.count-1;
  excel.ActiveWorkbook.SaveAs(Filename:=excfile);
  excel.ActiveWorkbook.Close;
end;{-- SRINGL2EXCELFILE -----------------------------------}
Das war ein Entwurf um ASCIIdelimiteds einzulesen. sollte nicht weiter schwer fallen, das anzupassen.

gruß
K-H

Ferox 30. Jun 2009 16:44

Re: TStringList in Exceltabelle ausgeben
 
Vielen Danke :P
Werde mich mal dransetzen und probieren, was draus zu machen.

Danke nochmal
Ferox

Lumpiluk 30. Jun 2009 16:48

Re: TStringList in Exceltabelle ausgeben
 
ist jetzt zwar schon etwas her, aber ich frage trotzdem mal:
Ich habe auf meinem PC nur OpenOffice istalliert. Heißt das, dass dieser Code dann nicht funktionieren würde?

Ferox 30. Jun 2009 16:56

Re: TStringList in Exceltabelle ausgeben
 
Mit OpenOffice würde das ganze nicht funktionieren, weil du da aktiv mit Excel arbeitest.
Du erstellst ja nicht nur eine Excel-Datei, sondern startest Excel sogar.

Delphi-Quellcode:
try
    excel:=createoleobject('EXCEL.APPLICATION');
  except
    showmessage('Excel kann nicht gestartet werden!');
    exit;

Popov 30. Jun 2009 17:22

Re: TStringList in Exceltabelle ausgeben
 
Zitat:

Zitat von Lumpiluk
ist jetzt zwar schon etwas her, aber ich frage trotzdem mal:
Ich habe auf meinem PC nur OpenOffice istalliert. Heißt das, dass dieser Code dann nicht funktionieren würde?

Das Problem ist nicht Excel oder Calc von OpenOffice, sondern es geht um OLE Automation (ist auch schon länger her wo ich damit gearbeitet habe). Du muß dich mit dem Programm verbinden (soweit das Programm das anbietet) und kannst dann mit dem Programm kommunizieren, d.h. steuern, Werte setzen oder abfragen.

Der Code oben geht nicht mit Calc, weil da EXCEL.APPLICATION steht, es sich also mit Excel verbindet. Für Calc wird die Zeile anders aussehen. Versuche das mal:

CreateOleObject('com.sun.star.ServiceManager')

Ansonsten sind dann auch die internen Befehle anders. Aber mit etwas Anpassung sollte es auch gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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