![]() |
Re: Excel - Export ohne Excel - Problem beim erzeugen
Hallo mschaefer,
Zitat:
Bis bald Chemiker |
Re: Excel - Export ohne Excel - Problem beim erzeugen
Nachtrag: Nachdem ich nun nach weiteren Recherchen feststellen musste, dass das Thema doch komplexer ist als zunächst angenommen,
hab ich mich am Montag dazu entschlossen die ![]() (Hätte ich schon am ersten Tag machen sollen, aber hinterher ist man ja bekanntlich immer schlauer) Der Test war absolut zufriedenstellend, da die Funktionen und Möglichkeiten umfangreich sind und die Ausgabe jetzt besser aussieht als vorher. Das Ganze war immerhin in viellerlei Hinsicht lehrreich, deshalb nochmal Danke an Alle. |
Re: Excel - Export ohne Excel - Problem beim erzeugen
Zitat:
Ich habe eine kleine Änderung in deiner Excel-Unit gemacht um auch Zahlen einzugeben.
Delphi-Quellcode:
Um es zu benutzen :
{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Unit: XLSDateiUnit letz.Ändr.: 11.06.2008 Version: 1.10 Funktion: In diser Unit werden für das BIFF-Format die Records zur Verfügung gestellt. Änderungen für die Migration auf Delphi 2009 durchgeführt. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++} unit XLSDateiUnit; interface uses Grids, Classes; type TXLS_BOFRec= packed record // Start des Datenblockes RecCode: Word; // $809 BOF RecLaenge: Word; // Record Länge // Komplett 16/ normal 8 BIFFVersion: Word; // $ 600 BiffVersions-Nummer:8 Bereich: Word; // $10 = Workssheet ExcelVersion: Word; // muss nicht angegeben werden 2719=Excel 2000 ExcelDatum: Word; // muss nicht angegeben werden // ExcelHistoryFlag: DWord; // muss nicht angegeben werden // LetzteExcelVersion: DWord; // muss nicht angegeben werden. end; TXLS_LABELRec= packed record // String-Record von Excel RecCode: Word; // $204 Bei Biff 8 RecLaenge: Word; // Record Länge // muss zuvor berechnet werden Row: Word; // Zeilen-Nr. beginnt bei 0 Col: Word; // Spalten-Nr. beginnt bei 0 IndexXFRec: Word; // noch nicht ganz verstanden // erstmal=0 ZellenStLeange: Word; // Nur die ZellenString-Länge end; // FS999 Änderung TXLS_NUMBERRec= packed record // Number-Record von Excel RecCode: Word; // $203 Bei Biff 8 RecLaenge: Word; // Record Länge // muss zuvor berechnet werden Row: Word; // Zeilen-Nr. beginnt bei 0 Col: Word; // Spalten-Nr. beginnt bei 0 IndexXFRec: Word; // noch nicht ganz verstanden // erstmal=0 end; // Ende TXLS_EOFRec= packed record // Ende des Datenblockes RecCode: Word; // $A0 RecLaenge: Word; // 00 hat immer die Länge = 0 end; function XLS_BOFRecDatenFuellen(): TXLS_BOFRec; // FS999 Ânderung function XLS_FloatFuellen(const Zeile,Spalte: Word):TXLS_NUMBERRec; // Ende function XLS_StringFuellen(const Zeile,Spalte: Word; Wert: String):TXLS_LABELRec; function XLS_EOFRecDatenFuellen(): TXLS_EOFRec; function ZellenInhalt(Zeile, Spalte: Integer; Tab: TStringGrid): String; function DatenInXLSDateiUebertragen(const XLS_LWPathDateiName: string; DatenStringGrid: TStringGrid): boolean; implementation uses SysUtils; {------------------------------------------------------------------------------} function XLS_BOFRecDatenFuellen(): TXLS_BOFRec; begin with Result do begin RecCode:= $809; RecLaenge:= 8; BIFFVersion:= 1; // Kann auch 1 sein Bereich:= $10; ExcelVersion:= 1; ExcelDatum:= 0; // ExcelHistoryFlag:=0; // LetzteExcelVersion:=0; end; end; // FS999 Änderung {------------------------------------------------------------------------------} function XLS_FloatFuellen(const Zeile,Spalte: Word):TXLS_NUMBERRec; begin with Result do begin RecCode:= $203; RecLaenge:= 14; Row:= Zeile; Col:= Spalte; IndexXFRec:= 0; end; end; // Ende {------------------------------------------------------------------------------} function XLS_StringFuellen(const Zeile,Spalte: Word; Wert: String):TXLS_LABELRec; begin with Result do begin RecCode:= $204; RecLaenge:= 8 + (Length(Wert)*SizeOf(Char)); // Änderung für Delphi 2009 Row:= Zeile; Col:= Spalte; IndexXFRec:= 0; ZellenStLeange:= (Length(Wert)*SizeOf(Char)); // Änderung für Delphi 2009 end; end; {------------------------------------------------------------------------------} function XLS_EOFRecDatenFuellen(): TXLS_EOFRec; begin with Result do begin RecCode:= $A; RecLaenge:= 0; end; end; {------------------------------------------------------------------------------} function ZellenInhalt(Zeile, Spalte: Integer; Tab: TStringGrid): String; begin Result:= Tab.Cells [Spalte, Zeile]; end; {------------------------------------------------------------------------------} function DatenInXLSDateiUebertragen(const XLS_LWPathDateiName: string; DatenStringGrid: TStringGrid): boolean; var x, i: integer; XLSFileStream: TFileStream; XLS_BOF: TXLS_BOFRec; XLS_EOF: TXLS_EOFRec; XLS_St: TXLS_LABELRec; Inhalt: String; begin XLSFileStream:= TFileStream.Create(XLS_LWPathDateiName, fmCreate); Result:= FALSE; try // XLS-File Anfang schreiben XLS_BOF:= XLS_BOFRecDatenFuellen(); XLSFileStream.WriteBuffer(XLS_BOF,SizeOf(XLS_BOFRecDatenFuellen())); // Werte aus einem StringGrid lesen und in die XLS-Datei eintragen for x := 0 to DatenStringGrid.ColCount - 1 do // Max. 254 Excel-Grenze begin for I := 0 to DatenStringGrid.RowCount - 1 do // Max 65536 Excel-Grenze begin Inhalt:= ZellenInhalt(I, x, DatenStringGrid); XLS_St:= XLS_StringFuellen(I, x, Inhalt); XLSFileStream.WriteBuffer(XLS_St, Sizeof (XLS_St)); XLSFileStream.WriteBuffer(Inhalt[1], (Length(Inhalt)*SizeOf(Char))); // Änderung für Delphi 2009 end; end; // Werte eintragen Ende. // XLS-File Ende schreiben XLS_EOF:= XLS_EOFRecDatenFuellen(); XLSFileStream.WriteBuffer(XLS_EOF,SizeOf(XLS_EOFRecDatenFuellen())); Result:= TRUE; finally // Datei wieder schliesen. XLSFileStream.Free; end; end; end.
Delphi-Quellcode:
Bis bald,
Var
... XLS_Fl: TXLS_NUMBERRec; n: Double; begin ... n := 5.42; XLS_Fl:= XLS_FloatFuellen(r, c); XLSFileStream.WriteBuffer(XLS_Fl, Sizeof(XLS_Fl)); XLSFileStream.WriteBuffer(n, 8); ... end; Frederic |
Re: Excel - Export ohne Excel - Problem beim erzeugen
Hallo fs999,
Du kannst bei der Function auch direkt den Wert mitgeben:
Delphi-Quellcode:
Aufruf dann:
// FS999 Änderung
TXLS_NUMBERRec= packed record // Number-Record von Excel RecCode: Word; // $203 Bei Biff 8 RecLaenge: Word; // Record Länge // muss zuvor berechnet werden Row: Word; // Zeilen-Nr. beginnt bei 0 Col: Word; // Spalten-Nr. beginnt bei 0 IndexXFRec: Word; // noch nicht ganz verstanden // erstmal=0 Zahl: double; // Zahl double end; // Ende
Delphi-Quellcode:
Bis bald Chemiker
// FS999 Änderung
{------------------------------------------------------------------------------} function XLS_FloatFuellen(const Zeile,Spalte: Word; aWert: double):TXLS_NUMBERRec; begin with Result do begin RecCode:= $203; RecLaenge:= 14; Row:= Zeile; Col:= Spalte; IndexXFRec:= 0; Zahl:= aWert; end; end; // Ende |
AW: Excel - Export ohne Excel - Daten anhängen
Hallo,
wie sieht es aber aus, wenn man an eine bereits erzeugte ExcelFile einige neue Zeilen hinzufügen möchte, so zum Beispiel über längeren Zeitraum Daten zu sammeln. Geht das überhaupt mit einem solchen Eccel-Export ? Danke EB |
AW: Excel - Export ohne Excel - Problem beim erzeugen
Notfalls halt Inhalt einladen, neue daten hinzufügen, neu speichern
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 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