@ alphaflight83:
chemiker hat ja schon auf seinen Link in #19 hingewiesen. Hier
noch einige zusätzliche Erläuterungen zum Quelltext von chemiker:
Delphi-Quellcode:
const
XLS_WORKBOOK = $5; // nur Workbook und separate Sheets
XLS_WORKSSHEET= $10; // Sheet or dialogue record (s.S.136 Dokument s. oben)
XLS_BOF = $809; // BIFF5 bis BIFF8 (s.S.135 Dokument s. oben)
XLS_BIFFVER = $600; // BIFF8 (s.S.136 Dokument s. oben)
XLS_LABEL = $204; // (s.S.187, 5.63 Dokument s. oben)
XLS_EOF = $A0; // (s.S.161, 5.37 Dokument s. oben)
XLS_EXCEL_VERSION = 1;
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 = Worksheet
ExcelVersion: Word; // muss nicht angegeben werden (z.B. 2719=Excel 2000)
ExcelDatum: Word; // muss nicht angegeben werden
end;
Delphi-Quellcode:
procedure TXLS_DateiClass.XLS_BOFRecDatenFuellen;
begin
with FBOF do
begin
RecCode:= XLS_BOF ; // $809
RecLaenge:= 8;
//BIFFVersion:= XLS_BIFFVER; // $600 BIFF8
BIFFVersion:= 1; // kein BIFF8
Bereich:= XLS_WORKSSHEET; // $10
ExcelVersion:= 1;
ExcelDatum:= 0;
end;
end;
Setze ich die BIFF-Version auf 8 durch $600, erhalte ich auch diese schmucken
Kästchen und Sonderzeichen. BIFF8 ist Unicodefähig. Aber in der erzeugten Datei
sind die Texte / Daten, die eigentlich in die Zellen geschrieben werden sollen,
unvollständig bzw. verschoben.
Excel liest (parst) diese Streams und erwartet an einer bestimmten Position auch
bestimmte Angaben für die Formatierung usw. Stehen an diesen Stellen aber z.B.
Texte für die Zellen, muß das schief gehen. Das Problem ist also, den Buffer des
Streams korrekt zu füllen. Insbesondere, was die Zeichenlängen und Zeilenendezeichen
betrifft.
Gruß
Gerald
edit: Die Seitenangaben beziehen sich auf das Dokument compdocfileformat.pdf
(s. Beitrag #19).