![]() |
Re: Datenbank in Excel schreiben
Moin...
@Nimoee, endyexcellent Wiso denn auch nicht? CSV ist eines der ältesten und einfachsten Formate um Datensätze zu speichern... Wenn Eine CSV-Datei im Notepad erzeugt wird, bekommt sie sogar ein Excell Symbol von Windows verpasst... glaubts ruhig :P bis denne... |
Re: Datenbank in Excel schreiben
Hallo endyexcellent,
direkt in eine Excel-Tabelle habe ich auch noch nicht geschrieben, aber vielleicht hilft Dir der Umweg über einen Export Deiner Datenbank als CSV-Datei weiter.
Code:
Die nachfolgende Unit ist von Specialwork und findest Du hier:
procedure TFBrowser.ExportalsExcelCSVDatei1Click(Sender: TObject);
var i : byte; begin QExp1.DatabaseName := Tab1.DatabaseName; i := Pos(ExtractFileExt(Tab1.TableName), Tab1.TableName); QExp1.ExportFile := AppBkSp(Tab1.DatabaseName) + copy(Tab1.TableName,1, i) + 'CSV'; QExp1.SQL.Clear; QExp1.SQL.Add('Select * From ' + Tab1.TableName); QExp1.Active := true; QExp1.ExportAsCsv; QExp1.Active := false; end; ![]()
Code:
Ist getestet und funktioniert.
unit QueryExport;
interface uses Windows, Messages, SysUtils, Classes, DB, DBTables; type TQueryExport = class(TQuery) private { Private-Deklarationen } fExportFile: String; fSeperator: String; protected { Protected-Deklarationen } public { Public-Deklarationen } procedure ExportAsCsv; published { Published-Deklarationen } property ExportFile: String read fExportFile write fExportFile; property Seperator: String read fSeperator write fSeperator; end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TQueryExport]); // RegisterComponents('Specialwork Database', [TQueryExport]); end; procedure TQueryExport.ExportAsCsv; var ExportedStrings: TStringList; Y: Integer; CurrentDataset: String; begin ExportedStrings:=TStringList.Create; try try if Active then begin while not Eof do begin CurrentDataset:=''; for Y:=0 to Fields.Count-1 do begin CurrentDataset := CurrentDataset + Fields[y].AsString; CurrentDataset := CurrentDataset + Seperator; end; ExportedStrings.Add(CurrentDataset); Next; end; end; ExportedStrings.SaveToFile(ExportFile); except on E: Exception do begin OutputDebugString(PChar(E.Message)); end; end; finally ExportedStrings.Free; end; end; end. mfg eddy |
Re: Datenbank in Excel schreiben
Hallo Tonic,
das ist unfair. Er hatte gefragt wie er in ein Excel sheet schreiben kann. CSV ist aber nichts anderes als ein Austauschformat. Das ist kein Excelsheet und schon gar kein vollwertiger Ersatz. Und das Symbol, das kann ich jeder Extension verpassen! ( auch kein Argument ). Ich kann auch in eine Word File schreiben, indem ich ein Textfile benutze. Nimoee |
Re: Datenbank in Excel schreiben
@Nimoee: enDyExcellent ist eine Sie :hello:
Aber nun zu meinem Problem: Ich habe also ein Programm geschrieben mit welchem ich Datensätze meiner datenbank-Tabelle in Excel schreiben kann. Sie ungefähr so aus:
Code:
Jetzt habe ich aber viel zutun wenn ich jeden Feldnamen mit dem Befehl:
begin
try excel := CreateOleObject('Excel.Application'); excel.visible := true; except ShowMessage('Excel konnte nicht gestartet werden !'); end; begin Excel.Workbooks.Add; IBTable1.First; Excel.Cells[1, s+1] := 'Feldname 1'; Excel.Cells[1, s+2] :='Feldname 2'; Excel.Cells[1, s+3] :='Feldname 3'; z := 2; While not IBTable1.eof do begin For s:=0 to IBTable1.Fieldcount-1 do Excel.Cells[z, s+1]:=IBTable1.Fields[s].Value; Inc(z); IBTable1.Next; end; end;
Code:
in meine Excel-Tabelle reinschreibe. ich habe nämlich Feldnamen 1 bis Feldnamen 100 (andere Bezeichnung natürlich)
Excel.Cells[1, s+1] := 'Feldname 1';
Gibt es eine Möglichkeit die Feldnamen der Datenbank-tabelle abzurufen und sie dann mit irgendeiner Schleife oder ähnlichem in mein Excel zu schreiben? Mfg, enDyExcellent |
Re: Datenbank in Excel schreiben
Hallo enDyExcellent,
guckst du oben... in meinem Posting :mrgreen: . (Stichwort FieldName Eigenschaft.) |
Re: Datenbank in Excel schreiben
Meinst Du:
Code:
???
Excel.Cells[z, s+1]:=IBTable1.Fields[s].FieldName;
So bekomme ich einen OLE-Fehler. Klappt nicht. Debugger Exception. Listenindex überschreitet das Maximum(43) steht da. kann ich leider nichts mit anfangen, was bedeutet das? |
Re: Datenbank in Excel schreiben
Hallo endyexcellent,
ja prinzipiell schon, aber in einer Schleife:
Delphi-Quellcode:
For s:=0 to IBTable1.Fieldcount-1 do
Excel.Cells[z, s+1]:=IBTable1.Fields[s].FieldName; |
Re: Datenbank in Excel schreiben
Hallo enDyExcellent,
ein direkter Export einer Tabelle nach Excel gefällt mir gut. Da kann man den Umweg über CSV vermeiden. Also habe ich mir Deinen Quelltext geschnappt und angefangen, mich dem Problem allgemein zu widmen. Leider scheitere ich schon bei dem Versuch, in die Excel-Tabelle zu schreiben.
Code:
Vielleicht kann mir jemand auf die Sprünge helfen ....
procedure TFBrowser.ExcelTabelleErzeugen1Click(Sender: TObject);
var Excel: Variant; zl, i : integer; s : variant; begin try excel := CreateOleObject('Excel.Application'); excel.visible := true; except ShowMessage('Excel konnte nicht gestartet werden !'); exit; end; try Excel.Workbooks.Add; // leere Tabelle wird erzeugt, 1. Blatt angewählt Tab1.First; zl := 1; // Feldbezeichner übertragen for i := 0 to Tab1.FieldCount - 1 do begin s := Tab1.FieldDefs.Items[i].Name; Excel.Cells[1, i] := s; // zeile,spalte <-- EOleException wird ausgelöst // Excel.Cells[1, i].Value := s; auch bei dieser Variante gibt's nur ein EOleException end; inc(zl); { while not Tab1.Eof do begin For i :=0 to Tab1.Fieldcount-1 do Excel.Cells[zl, i+1] := Tab1.Fields[i].Value; inc(zl); Tab1.Next; end;} except ShowMessage('Es ist noch ein Fehler aufgetreten !'); end; end; mfg eddy |
Re: Datenbank in Excel schreiben
Hallo endyexcellent
und alle anderen, konnte mir selber auf die Sprünge helfen. So einfach kann der Export nach Excel vorgenommen werden, ich bin begeistert.
Code:
Getestet und funktionsfähig!
procedure TFBrowser.ExcelTabelleErzeugen1Click(Sender: TObject);
var excel: variant; zl, i : integer; s : variant; begin if not Tab1.Active then begin ShowMessage('Keine Datenbank geöffnet'); exit; end; try excel := CreateOleObject('Excel.Application'); excel.visible := true; except ShowMessage('Excel konnte nicht gestartet werden !'); exit; end; try Excel.Workbooks.Add; // leere Tabelle wird erzeugt, 1. Blatt angewählt Tab1.First; zl := 1; // Feldbezeichner übertragen for i := 0 to Tab1.FieldCount - 1 do begin s := Tab1.FieldDefs.Items[i].Name; Excel.Cells[1, i+1] := s; // zeile,spalte end; SetHG; // Cursor auf HoureGlass umstellen inc(zl); // Daten übertragen while not Tab1.Eof do begin for i := 0 to Tab1.Fieldcount-1 do begin s := Tab1.Fields[i].Value; Excel.Cells[zl, i+1].value := s; // s nicht ersetzen, da sonst Fehler end; inc(zl); Tab1.Next; end; SetDf; // Cursor auf Default except ShowMessage('Es ist noch ein Fehler aufgetreten !'); SetDf; end; end; mfg eddy |
Re: Datenbank in Excel schreiben
Hallo alle zusammen,
nun ich wollte heute die gleiche Frage stellen: Wie kann ich eine Datenbank (TQuery) in eine Excel-Tabelle schreiben? Mein Ansatz zur Lösung ist die Frage: Wie spreche ich den Excel-Server aus dem Register [Server] an? Darüber muß doch eine Verbindung möglich sein! Ich habe das mal ausprobiert, scheitere aber an der mangelnden Dokumentation, bzw. einem fehlenden Beispiel. Wer kann sich dazu mal äußern ? Gruß JoJo :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz