Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel (Import/Export) (https://www.delphipraxis.net/4605-excel-import-export.html)

dopeline 6. Mai 2003 09:28


Excel (Import/Export)
 
Hallo!

Ich will eine Tabelle (StringGrid) nach Excel exportieren (also die Tabelle in einer Exceldatei abspeichern und diese automatisch mit excel öffnen)

und wenn es möglich ist, auch die einträge aus einer exceldatei importieren.

Wie mache ich das?

Grüße, dopeline :dancer:

Specialwork 6. Mai 2003 10:23

Hallo Dopeline,

Ich habe mal ein Beispiel erstellt, mit dem man ein Excelsheet erstellen und mit Daten versorgen kann.

Excelsheets füllen

Gruß, Tom

dopeline 7. Mai 2003 07:58

Uff! geht das nicht einfacher? excel muss doch beim export gar nicht geöffnet werden. die tabelle ein meinem adressbuch-programm soll einfach nur (mit nem savedialog) irgentwo als xls gespeichert werden.

Jelly 7. Mai 2003 08:46

Du kannst sehr leicht über ADO auf Excel Dateien zugreifen. In deinem Fall besonders geeignet da es sich um eine Tabellenstruktur handelt.

Der Connectionstring sieht so aus:
Code:
Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=%s;
Extended Properties= "Excel 8.0;
HDR=Yes";
Persist Security Info=False;
Persist Security Info=False
Mit SQL Befehl "Create Table" kannst du deine Tabelle erzeugen und wie gewohnt mit Daten füllen.

Gruss,
Tom

r_kerber 7. Mai 2003 11:24

Hallo,

es geht auch indem Du die Daten in eine csv-Datei schreibst und diese dann mit Excel öffnest.

dopeline 7. Mai 2003 15:01

und wie mache ich das?
(bin newbie, was delphi angeht :oops: )

r_kerber 7. Mai 2003 18:06

z.B. so:
Delphi-Quellcode:
var
  F: TextFile;
begin
  AssignFile(F, 'datei.csv');      
  Rewrite(F);
  Writeln(F, Format('%i,%d', IntegerWert, DezimalWert]));
  ...                      
  CloseFile(F);
end;

ssach 7. Mai 2003 18:07

also hier ist ein Code zum speichern von stringgrids in eine csv datei, konnte sie nochnicht testen, werde dies aber im abend noch tun:

Delphi-Quellcode:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
R, C : integeR;
S : string;
begin
   for R := 0 to sg.RowCount - 1 do
      begin
         S := '';
         for C := 0 to sg.ColCount - 1 do
            S := S + sg.Cells[C,R] + ';';
         delete(S,length(S),1);  //loescht den ueberfluessigen ;
         lb.Items.Append(S);
      end;

   lb.Items.SaveToFile('Exell.csv');
end;
hoffe konnte helfe, cu

dopeline 7. Mai 2003 19:54

danke! das sollte funktionieren.
ich hab versucht, das mit nem savedialog zu machen, funktioniert aber nicht :( .

Wie stelle ich das an?

ssach 7. Mai 2003 20:08

hier die version mit nem savedialog, du musst solchen nur auf deine form ziehen, nenne h savedialog dann kannst du denn code komplett kopieren!

Delphi-Quellcode:
procedure TForm1.BtnSaveClick(Sender: TObject);
var
R, C : integeR;
S : string;
begin
* *for R := 0 to sg.RowCount - 1 do
* * * begin
* * * * *S := '';
* * * * *for C := 0 to sg.ColCount - 1 do
* * * * * * S := S + sg.Cells[C,R] + ';';
* * * * *delete(S,length(S),1);* *//loescht den ueberfluessigen ;
* * * * *lb.Items.Append(S);
* * * end;
   if SaveDialog.Execute then
* *   lb.Items.SaveToFile(SaveDialog.Filename); //filename ist der pfad
end;
um noch die endung csv hinzubekommen musst du im objekt inspektor vom savedialog bei filters einfach eine option mit *.csv eingeben! hast du noch probleme gib bescheid! wenn du willst kann ich dir die prozedur zum laden von csv dateien in delphi gib auch bescheid!

cu

Marco Haffner 7. Mai 2003 21:56

Ich habe bei mir auf dem Rechner noch eine Unit die es ermöglicht direkt eine Excel-Tabelle zu schreiben ohne das Excel installiert sein muß.
Wenn ich wieder an meinem Rechner sitze kann ich nachsehen woher ich die habe.

dopeline 7. Mai 2003 22:24

vielen dank @ssach! aber ich hab da noch 2 fragen:

1. was heist das lb. (s.u.)?
2. "filename" --> pfad
ich dachte, den pfad gibt man dann im laufenden programm im
savedialog an und nicht schon vorher?! :?:

Delphi-Quellcode:
lb.Items.SaveToFile(SaveDialog.Filename); //filename ist der pfad
irgentwie seh ich da noch nicht so ganz durch... :oops: (Sorry...)

@Marco Haffner das wäre sehr nett!

Grüße, dopeline

Marco Haffner 7. Mai 2003 22:40

So bin wieder an meinem Rechner, und hab's auch gefunden, sogar mit Demo.
Benötigt wird dann aber nur die xls.pas die sich im Suchpfad befinden muß.
Leider weiß ich jetzt nicht mehr wo die geladen hatte, deswegen als Attachment.

ssach 8. Mai 2003 14:40

hy,

lb ist meine abkuerzug fuer listbox, du musst solch ine auf dein form setzhen, und stellst die eigenschaft visible einfach auf false!
den pfad gibrt man im savedialog, aber man muss ihn danach der listbox zuweisen!

am abnd werde ich dir die prozedur zum laden von csv dateien in eine listbox

bis dann

cu

dopeline 8. Mai 2003 16:01

OK, also das exportieren klappt jetzt einigermaßen!
aber wenn ich die datei in excel öffne sehe ich, dass die tabelle aus meinem programm gleich 4x exportiert wurde (untereinandergestzt). wie kann ich das verhindern?

noch 2 sachen:

1. wie kann ich die spaltenbreite in der excel-datei festlegen?
2. er soll, beim export in der excel-datei eine überschrift ("Adressen-Export...") erzeugen (mit vordefinierter schriftgröße usw)

dopeline 8. Mai 2003 16:12

ich glaube das problem mit den 4 untereinanderhängenden tabellen erklärt sich so:

ich exportiere das erste mal meine tabelle und erzeuge eine exceldatei
(dann ist in der datei auch nur eine tabelle vorhanden. soweit gut)

ich exportiere ein zweites mal und "überschreibe" die schon vorhandene datei.
(beim öffnen fine ich die tabelle vom ersten export ganz oben und darunter die zuletzt exportierte. und so setzt sich das immer weiter fort,bei jedem export wird eine tabelle unten rangehängt)

man muss ihm irgentwie sagen, dass er die datei erst "löschen" soll.

geht das?

Marco Haffner 8. Mai 2003 17:23

Zitat:

Zitat von dopeline
1. wie kann ich die spaltenbreite in der excel-datei festlegen?
2. er soll, beim export in der excel-datei eine überschrift ("Adressen-Export...") erzeugen (mit vordefinierter schriftgröße usw)
...
...
...
man muss ihm irgentwie sagen, dass er die datei erst "löschen" soll.

Zu 1: mit Xls_SetColWidth(FileHandle, 0, 17);
Wobei die 0 die Spalte angibt und 17 die Breite.
Zu 2: Da müßte dann die Unit noch für angepasst werden.
Da ich dies bis jetzt noch nicht brauchte habe ich es mir auch nicht genauer angesehen. Kannst ja mal auf www.wotsit.org nach weiteren Infos suchen.

Indem Du selbst überprüfst ob die Datei vorhanden ist und dann löscht.

Tester 15. Sep 2003 13:36

Zitat:

Zitat von Specialwork
Hallo Dopeline,

Ich habe mal ein Beispiel erstellt, mit dem man ein Excelsheet erstellen und mit Daten versorgen kann.

Excelsheets füllen

Gruß, Tom

Hi!

Problem bei diesem Program wäre aber das man Excel nochmal selber im Task-Manager beenden muß.

Umgehen kann man dieses, wenn man beim Beenden folgendes schreibt
Code:
 
   var SaveChanges : OleVariant;
   begin
     SaveChanges := true;
     //verhindert die Abfrage fürs Speichern
     ExcelWorkbook1.Close(SaveChanges);
     ExcelApplication1.Quit;
     ExcelApplication1.Disconnect;
     ExcelWorkbook1.Disconnect;
     ExcelWorksheet1.Disconnect;
   end;
MfG

Tester

Shivan 15. Sep 2003 15:00

Re: Excel (Import/Export)
 
Tuningsmöglichkeiten gibts übrigens noch, wenn man bei der Range nicht nur eine Zelle exportiert sondern eine ganze Zeile oder sogar noch mehr.

Das ganze geht über ein Variant Array
Delphi-Quellcode:
var arrData: Variant;

arrData := VarArrayCreate([1, yourStringGrid.RowCount, 1, yourStringGrid.ColCount], varVariant);

//Range ermitteln
Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],wb.WorkSheets[1].Cells[yourStringGrid.RowCount, yourStringGrid.ColCount]];

Range.Value := arrData;

The-Friendly-Sniper 16. Sep 2003 09:30

Re: Excel (Import/Export)
 
:bounce2: Hi, ich hätte zum Thema mal 'ne Frage und zwar wie kann ich vorhandene XLS Datei auslesen, so das ich diese in CSV speichern kann.
Die XLS enhalten keine Bilder, sondern bestehen nur aus spalten.

APP 16. Sep 2003 14:17

Re: Excel (Import/Export)
 
Hallo,

ich habe den Thread hier zwar nur schnell "quergelesen",
ich glaube aber, diesen Link hattet ihr noch nicht:
(Excel Dateien erzeugen, OHNE M$-Excel)

Bitte mit BIFF (Christian Maas )
Mit Delphi Dateien für MS-Excel, Lotus 123 und Star Calc erzeugen (S. 40)
Quellcodes zu den Artikeln der Ausgabe 03.2002

http://www.entwickler.com/itr/ausgab...nodeid,54.html

Direktlink:
http://www.entwickler.com/itr/ausgab...d45ea8155b.zip

HP vom Autor:
http://www.chmaas.handshake.de/cm/articles.htm

Logic 15. Mai 2004 14:26

Re: Excel (Import/Export)
 
Und wie kann ich nun die erstellte csv datei wieder einlesen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr.

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