Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Excel generieren ohne Office (https://www.delphipraxis.net/164093-excel-generieren-ohne-office.html)

Moony 28. Okt 2011 10:23

Datenbank: MS SQL • Version: 2008 • Zugriff über: ADO

Excel generieren ohne Office
 
Hallo zusammen,

ich habe ein Programm geschrieben, mit dem man ein vorhandenes Excel öffnet und dort die Zellen füllt. Dies passiert zur Zeit über
Delphi-Quellcode:
XLApplication := CreateOleObject('Excel.Application');
.

Gibt es eine andere Möglichkeit das zu realisieren ohne dass Office benötigt wird???

Danke und Gruß,Moony

taveuni 28. Okt 2011 10:26

AW: Excel generieren ohne Office
 
Wir machen's mit dem

Gibt aber auch anderes.

ibp 28. Okt 2011 10:36

AW: Excel generieren ohne Office
 
ja mit z.B: AdvStringGrid und AdvExcelIO von TMS Software geht das...

tshubaka 28. Okt 2011 14:23

AW: Excel generieren ohne Office
 
hallo,
das geht auch ohne Zusatz.
Delphi-Quellcode:
const
{$J+}
  CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0);
{$J-}
  CXlsEof: array[0..1] of Word = ($0A, 00);
////////////////////////////////////////////////////////////////////////////////
procedure XlsWriteCellNumber(XlsStream: TStream; const ACol, ARow: Word;
const AValue: Double);
const
{$J+}
  CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
{$J-}
begin
  CXlsNumber[2] := ARow;
  CXlsNumber[3] := ACol;
  XlsStream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
  XlsStream.WriteBuffer(AValue, 8);
end;
////////////////////////////////////////////////////////////////////////////////
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
  L : Word;
const
{$J+}
  CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
  L := Length(AValue);
  CXlsLabel[1] := 8 + L;
  CXlsLabel[2] := ARow;
  CXlsLabel[3] := ACol;
  CXlsLabel[5] := L;
  XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
  XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;
////////////////////////////////////////////////////////////////////////////////
procedure XlsWriteVal(XLsStream:TStream; Const ERow , ECol :word;Field:TField);
var
  S : String;
  N : Extended;
  D : TDateTime;
Begin
  N := 50000;
  S := '';
  D := 0;
  case field.DataType of
    ftUnknown   : S:='UNKNOWN';
    ftString    : S:=Field.asstring;
    ftSmallint  : N:=Field.asfloat;
    ftInteger   : N:=Field.asfloat;
    ftWord      : N:=Field.asfloat;
    ftBoolean   : S:=Field.asstring;
    ftFloat     : N:=Field.asfloat;
    ftCurrency  : N:=Field.asfloat;
    ftBCD       : N:=Field.asfloat;
    ftDate      : N:=Field.AsFloat;
    ftTime      : N:=Field.AsFloat;
    ftDateTime  : D:=Field.AsDateTime;
    ftBytes     : S:='BYTES';
    ftVarBytes  : S:='VARBYTES';
    ftAutoInc   : N:=Field.asfloat;
    ftBlob      : S:='BLOB';
    ftMemo      : S:=field.AsString;
    ftGraphic   : S:='GRAPHIC';
    ftFmtMemo   : S:='FMTMEMO';
    ftParadoxOle : S:='PARADOXOLE';
    ftDBaseOle  : S:='DBASEOLE';
    ftTypedBinary: S:='TYPEBIN';
    ftCursor    : S:='CURSOR';
    ftFixedChar : S:=field.asstring;
    ftWideString : S:=field.asstring;
    ftLargeInt  : N:=Field.asfloat;
    ftADT       : S:='ADT';
    ftArray     : S:='ARRAY';
    ftReference : S:='REFER';
    ftDataSet   : S:='DATASET';
    ftOraBlob   : S:='ORABBLOB ';
    ftOraClob   : S:='ORACCBLOB ';
    ftVariant   : S:=field.asstring;
    ftInterface : S:='INTERFACE';
    ftIDispatch : S:='IDISPATCH';
    ftGuid      : S:='GUID';
  end;
  if N <> 50000 then  // auch nuller
     XlsWriteCellNumber(XLsStream, ERow, ECol, N);
  if S <> '' then
     XlsWriteCellLabel(XLsStream, ERow, ECol, S);
  if D <> 0 then
     XlsWriteCellNumber(XLsStream, ERow, ECol, D)
end;
////////////////////////////////////////////////////////////////////////////////
function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
var
  FStream: TFileStream;
  I, J: Integer;
begin
  Result := False;
  FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
  try
    CXlsBof[4] := 0;
    FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
    for i := 0 to AGrid.ColCount - 1 do
    begin
      for j := 0 to AGrid.RowCount - 1 do
      begin
        try
          XlsWriteCellNumber(FStream, I, J, strtofloat(AGrid.cells[i, j]));
        except
          XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
        end;
      end;
    end;
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
    Result := True;
  finally
    FStream.Free;
  end;
end;
////////////////////////////////////////////////////////////////////////////////
procedure dbtoXLS(data : TDataset; AFileName : String);
var
  BOOKm : pointer;
  i : integer;
  FStream : TFileStream;
begin
  if not data.active then exit;
  BOOKm:=DATA.GetBookmark;
  data.DisableControls;
  data.first;
  FStream := TFileStream.Create(AFileName, fmCreate);
  try
    CXlsBof[4] := 0;
    FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
    for i:=0 to Data.FieldCount-1 do
      XlsWriteCellLabel(FStream, i, 0 , data.fields[i].FieldName);
    while not DATA.Eof do
    begin
      for i:=0 to Data.fieldcount-1 do
        XlsWriteVal(FStream,i , data.recno , Data.Fields[i]);
      data.NEXT;
    end;
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
  finally
    data.GotoBookmark(BOOKm);
    data.EnableControls;
    FStream.Free;
  end;
end;
Gruss
Peter

Moony 28. Okt 2011 15:17

AW: Excel generieren ohne Office
 
Danke, ich werd das mal umsetzen...

marky522 24. Dez 2011 09:20

AW: Excel generieren ohne Office
 
Hallo,

das Thema Excel-Files ohne Excel zu erzeugen scheint immer wieder hier im Forum hochzukommen,
daher habe ich ich entschieden eine DLL (Usbiff8.dll) und eine dazugehörige Unit (UXLS.pas)
hier zu veröffentlichen, welche dies ermöglichen.
Die Datei Beschreibung.txt enthält eine Beschreibung der Funktionen und Eigenschaften.
Zusätzlich ist noch eine Unit (Unit1.pas) angehängt, welche als Demoprojekt dient. Bitte ein Label
und einen Button auf das Form ziehen.

Ich habe die DLL selbst erstellt, daher verbleiben die Urheberrechte bei mir. Es kann jedoch
jeder die DLL völlig frei benutzen.

Die DLL wurde unter folgenden Betriebssystemen getestet: WIN 98, WIN 2000, XP, VISTA (32Bit, 64Bit),
WIN 7 (32Bit, 64Bit)
Die erstellten Excel Dateien wurden mit Microsoft Office (97-2010), Planmaker Office, Kingsoft Office,
Open Office und Gnumeric getestet.

Es existieren folgende Haupt-Restriktionen: Es können keine Charts und keine Pictures erzeugt werden.
Ebenso können keine Formeln eingegeben werden.
(Ich habe mit der Implementierung von Charts begonnen, sie aber nicht beendet, daher bitte die
entsprechenden Befehle nicht aufrufen. Sie sind noch in der DLL und UXLS.pas vorhanden.)

himitsu 24. Dez 2011 09:34

AW: Excel generieren ohne Office
 
PChar ist ein sehr ungünstiger Exporttyp.

Ich empfehle dringend auf PAnsiChar zu ändern, da die DLL ja mit Delphi 7 erstellt wurde und die DLL demnach als PAnsiChar deklariert wurde.

Zitat:

Die DLL wurde unter folgenden Betriebssystemen getestet: WIN 98, WIN 2000, XP, VISTA (32Bit, 64Bit),
WIN 7 (32Bit, 64Bit)
PS: Der Versuch eine Datei in C:\... zu erstellen kann seit Win7 (mit ordentlichen Benutzerrechten, bzw. mit aktivem UAC noch nie funktioniert haben. (eigentlich schon seit Win2000, mit Benutzerrechte ging das nicht ... Zugriff verweigert)

Und eigentlich ist die Übergabe von Objekten, über die DLL-Grenzen hinweg, sowieso keine soooo gute Idee.

marky522 24. Dez 2011 10:06

AW: Excel generieren ohne Office
 
Zitat:

PS: Der Versuch eine Datei in C:\... zu erstellen kann seit Win7 (mit ordentlichen Benutzerrechten, bzw. mit aktivem UAC noch nie funktioniert haben. (eigentlich schon seit Win2000, mit Benutzerrechte ging das nicht ... Zugriff verweigert)
Das ist ja nur ein Demoprojekt, welches die grundsätzliche Funktionsweise der DLL zeigen soll :wink:

Zitat:

Ich empfehle dringend auf PAnsiChar zu ändern, da die DLL ja mit Delphi 7 erstellt wurde und die DLL demnach als PAnsiChar deklariert wurde.

Diese Änderung kann von jedem bequem in der UXLS.pas vorgenommen werden.

himitsu 24. Dez 2011 10:30

AW: Excel generieren ohne Office
 
Zitat:

Zitat von marky522 (Beitrag 1142997)
Das ist ja nur ein Demoprojekt, welches die grundsätzliche Funktionsweise der DLL zeigen soll :wink:

Nur daß der Test nicht funktioniert und mir demnach auch nichts zeigen kann. :zwinker:
Mein Explorer wird nicht virtualisiert (das ist der Standard) und demnach zeigt er mir die C:\test1+1.xls nicht an. :zwinker:


Bezüglich des Objektsharings: Mach aus dem Objekt ein Interface und gut ist es.
PS: Das .Free kann nicht funktionieren, da hier der falsche Speichermanager angesprochen wird.
(und PChar nicht vergessen oder auf WideString umsteigen)

marky522 24. Dez 2011 13:21

AW: Excel generieren ohne Office
 
Zitat:

Nur daß der Test nicht funktioniert und mir demnach auch nichts zeigen kann.
Mein Explorer wird nicht virtualisiert (das ist der Standard) und demnach zeigt er mir die C:\test1+1.xls nicht an.

Na da bin ich aber froh, dass du die Datei doch noch entdeckt hast:-D

Zitat:

Bezüglich des Objektsharings: Mach aus dem Objekt ein Interface und gut ist es.
Da die DLL so funktioniert, wie sie ist, habe ich eigentlich nicht vor sie zu ändern.

Zitat:

PS: Das .Free kann nicht funktionieren, da hier der falsche Speichermanager angesprochen wird.
Ich habe das genauso gemacht, wie in dem berühmten Beispiel einer Objekt-DLL von A. Kosch.
Ausserdem habe ich 500 Excel Dateien in einer Schleife erzeugen lassen und konnte kein Speicherleck in der Anwendung finden :gruebel:

himitsu 24. Dez 2011 13:51

AW: Excel generieren ohne Office
 
Mit Delphi 7 und wenn man alle Interfaces (virtuelle Methoden) nutzt und oder die Codeoptimierung deaktiviert ist, dann funktioniert es.

Ab Delphi 2009 muß man mit dem PChar aufpassen und sobald Delphi "nichtgenutzte" Methoden aus der VMT entfernt, dann stimmen die Indize der nachfolgenden Methoden nicht mehr und das war's dann > Exceptions wären das Mindeste.

marky522 25. Dez 2011 18:42

AW: Excel generieren ohne Office
 
Na gut Himitsu, du hast mich überredet! Ich habe die Interface-Proceduren so
angepasst, dass die Klasse innerhalb der DLL bleibt.

Der Nachteil dieser Implementierung ist, dass jetzt von einer Application aus nicht
gleichzeitig (parallel), sondern nur nacheinander mehrere Excel Dateien erzeugt werden können, da nur immer
eine Instanz der Klasse angelegt sein kann (und zwar innerhalb der DLL).
Ausserdem musste ich für jede Eigenschaft eine Procedure anlegen, die das Setzten (Ändern)
ermöglicht. Das war aufwendiger als ich dachte. :(

Natürlich hat sich durch die Änderung die Schnittstelle komplett geändert, sodass ich
das Demoprojekt komplett überarbeiten musste.

marky522 22. Jan 2012 16:23

AW: Excel generieren ohne Office
 
Hallo,

ich musste die beiden Versionen der DLLs Usbiff8.dll und Usbiff8V2.dll updaten, da
ab ca 8000 unterschiedlichen Strings in einem Excel-Dokument ein Record überlief.

Ich habe beide DLLs und die beiden Demoapplikationen mit angehängt, es hat sich jedoch
jeweils nur die DLL geändert.

Viel Spaß beim testen!

mkinzler 22. Jan 2012 20:36

AW: Excel generieren ohne Office
 
Seit Office2007 setzt man aber auf das Office Open XML Format. Dabei handelt es sich um ein Zip-Archiv mit XML-Dateien.

marky522 23. Jan 2012 07:32

AW: Excel generieren ohne Office
 
Hallo,

ja das stimmt! Jedoch ist das xls-Dateiformat derzeit noch verbreiteter, daher habe ich mich
entschieden dieses zunächt zu generieren.

Meiner Meinung nach ist das Open XML Format eher einfacher zu implementieren als das Biff8 Format.

oPok 1. Feb 2012 15:07

AW: Excel generieren ohne Office
 
Ich habe eine XMLX und ODS Export Library geschrieben: XMLX Excel und ODS OpenOffice Export für Delphi... Keine DLL, inklusive Quelltext.

karin_ro 27. Jun 2012 15:27

AW: Excel generieren ohne Office
 
Ich habe das mal versucht, das klappt einwandfrei.
Wenn Man die Stringfelder umdefiniert als AnsiString, so
gibt es auch mit Delphi XE2 keine Probleme.
Jetzt habe ich noch 3 Fragen

1. Wie kann an eine bestehende Exceldatei angefügt werden
2. Wo finde ich Infos, zur Formattierung
3. Klappt das auch umgekehrt, so dass eine Datei eingelesen werden kann.

Wa da jemand Infos hätte, wäre das echt Super!!!!
:lol:

marky522 28. Jun 2012 19:57

AW: Excel generieren ohne Office
 
Hallo,

zu Deinen Fragen:

1) Es kann nichts an eine bestehende Excel Datei angefügt werden. Die Datei muss von
von Grund auf erstellt werden.

2) Infos zum Biff8 Format sind in folgenden zwei Dateien enthalten, die man durch
"googlen" im Internet findet:
-MICROSOFT OFFICE EXCEL 97-2007
BINARY FILE FORMAT SPECIFICATION
[*.xls (97-2007) format]
-OpenOffice.org's Documentation of the
Microsoft Excel File Format
Excel Versions 2, 3, 4, 5, 95, 97, 2000, XP, 2003

In der DLL sind die wichtigsten und nötigsten Formate entsprechend diese beiden
Dokumente implementiert.

3) Nein! Dazu muss die Datei im Biff8 Format analysiert werden.
Ich habe das nicht in der DLL implementiert.

marky522 29. Jun 2012 10:53

AW: Excel generieren ohne Office
 
Noch ein kleiner Nachtrag:

Die mit Hilfe der oben genannten Dokumente erstellte Biff8 Datei muss dann
noch in Micropsoft Compound File Format eingelabert werden.
Dies geschieht gemäß dieses Dokuments:

-OpenOffice.org's Documentation of the
Microsoft Compound Document
File Format

Das Dokument kann ebenfalls durch "googeln" gefunden werden.

MfG

marky522 20. Mär 2014 18:58

AW: Excel generieren ohne Office
 
Hallo,

ich habe beide DLL-Versionen erneut upgedated - Hauptänderungen:

1) Generierung von Exceldateien mit vielen Zeilen pro Arbeitsblatt geht erheblich schneller.
2) Es können sämtliche im System verfügbare Fonts verwendet werden.
3) Fehler wurde beseitigt, so dass auch "sehr große" Dateien erzeugt werden können
4) Interface wurde komplett auf PAnsiChar umgestellt, so dass sich die DLLs auch mit Unicode-fähigem Delphi nutzen lassen - Getestet wurden die DLLs mit D7, D2007 und XE2.

Viel Spaß damit!

blondervolker 20. Mär 2014 19:20

AW: Excel generieren ohne Office
 
Nicht schlecht...:thumb:

Schau mal dieses Video an: http://www.tmssoftware.com/flexcel/tutorial.htm

Das nutze ich. Spart viel Zeit.

Excel Tabelle öffnen und der Code ist fertschhhh....

Furtbichler 21. Mär 2014 06:37

AW: Excel generieren ohne Office
 
Ich hatte Flexcel mal ausprobiert und fast eingesetzt. Leider hat es in meinem Fall (sehr komplexes Sheet) versagt. Aber selbst eine Lösung von DevExpress hat das nicht hinbekommen. Ich hatte mir dann
die Lösung von Axolotl
besorgt. Ich würde aber zu Flexcel raten, weil es dann doch nicht so hingefrickelt ist, wie das Axolotl-Zeugs (das aber gut funktioniert, keine Frage).

Jick 26. Apr 2014 22:48

AW: Excel generieren ohne Office
 
Hallo,

wie kann ich ein € Zeichen ausgeben mit Hilfe der Dll von Marky522, habe schon alles versucht aber entweder kommt Unsinn raus oder ein Leerzeichen ?

Grüße
Michael

marky522 27. Apr 2014 07:45

AW: Excel generieren ohne Office
 
Hallo,

Excel kann zwar Unicode darstellen, doch habe ich das in der Dll nicht implementiert.
Es gibt dennoch 2 Möglichkeiten ein €-Zeichen darzustellen:

1) Du verwendest die Formate -5 bis -8 oder -42 oder -44 je nachdem was Du willst
(entsprechen Beträgen der Excel-Formaten)
oder
2) Du verwendest einen Font der dieses Zeichen auch so darstellt, wenns sowas überhaubt
gibt?

Jick 27. Apr 2014 08:00

AW: Excel generieren ohne Office
 
Hallo,

kannst du mir mal ein Beispiel zu Variante 1 zeigen, ich steh irgendwie auf dem Schlauch ?

Grüße
Michael

marky522 27. Apr 2014 08:19

AW: Excel generieren ohne Office
 
Hallo,

schau Dir bitte einfach mal das mitgelieferte Beispiel an - und da das Arbeitsblatt
"Nummernformat" und den dazu gehörigen Quellcode in der Unit "Unit1.pas", der das
Arbeitsblatt generiert.

MfG
Markus

Jick 27. Apr 2014 09:13

AW: Excel generieren ohne Office
 
So habe ich das auch versucht aber mit Libre Office scheint das nicht zu funktionieren.
Montag teste ich das mal auf Arbeit mit MS Office ob es da geht.

Grüße
Michael

Jick 28. Apr 2014 13:32

AW: Excel generieren ohne Office
 
Hallo,

also mit MS Office funktioniert das mit dem Eurozeichen einwandfrei , vielen dank.


Grüße
Michael

marky522 29. Apr 2014 10:09

AW: Excel generieren ohne Office
 
Hallo Michael,

dass das mit Libreoffice nicht funktioniert liegt vermutlich daran, dass ich gewisse Formatrecords nicht schreibe,
da sie nicht zwingend geschrieben werden müssen. Da sowieso eine Überarbeitung der DLLs im Gang ist, habe ich nun
einen Grund diese Records zu schreiben - dann sollte es auch mit Libreoffice und dem €-Zeichen funktionieren.


MfG

Markus

marky522 29. Apr 2014 20:25

AW: Excel generieren ohne Office
 
Hallo,

ich habe die beiden DLLs erneut "upgedated" mit folgenden Hauptänderungen:

1) Es können Zellen an bestehende Excel Dateien angehängt werden.
2) Es können Zellen aus bestehende Excel Dateien gelöscht werden.
3) Es können Zellen in bestehende Excel Dateien ersetzt werden.
4) Es können Excel Dateien eingelesen werden.

Hinweis:
Die DLLs können lediglich Biff8 Dateien verarbeiten (Excel 97-2003 Format).
Bei Diagrammen, die in Arbeitsblättern eingelagert sind, kann es beim Lesen und Reproduzieren der Dateien zu Problemen kommen - die gilt nicht für Diagramm-Arbeitsblätter, diese werden einfach überlesen.
Die DLLs können nur die Funktionen einlesen und reproduzieren, die sie selbst auch schreiben können, also keine Formeln, keine Diagramme, keine Bilder, keine Macros...

An Michael "Jick": Die Formatrecords werden jetzt geschrieben, somit sollte es mit Libreoffice und dem
€-Zeichen jetzt auch klappen.


Mfg
Markus

Jick 30. Apr 2014 13:38

AW: Excel generieren ohne Office
 
Hallo Markus,

funktioniert jetzt super mit Libre Office, danke.

Grüße
Michael

ByTheTime 3. Jun 2014 15:46

AW: Excel generieren ohne Office
 
Auch nochmal ein Danke von meiner Seiter :) Funktioniert super :)

marky522 9. Jun 2014 12:44

AW: Excel generieren ohne Office
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

vielen Dank! Es freunt mich, zu sehen, dass die DLLs auch von jemandem genutzt werden! :)

Mittlerweile habe ich die DLLs Usbiff8.dll und Usbiff8V2.dll erneut "upgedated":

1) Die Read-Proceduren der DLL wurden erweitert und vereinfacht.
2) Es sollte jetzt keine Probleme mehr geben, falls Diagramme in Arbeitsblättern eingelagert sind.
3) Es ist nun beim Beschreiben von Zellen möglich, deren Format (Farbe, Rahmen, Font...ect.) beizubehalten.

Die restlichen Hinweise des letzten Updates gelten weiterhin.

Viel Spaß mit den DLLs!

MfG
Markus

marky522 14. Jun 2014 06:31

AW: Excel generieren ohne Office
 
Hallo,

Zur Information,ich habe ein Projektthema hier im Forum erstellt, und die DLLs auch dort platziert.

Mfg

Markus

delphinewbie 16. Feb 2020 12:58

AW: Excel generieren ohne Office
 
Hallo,
das Thema ist zwar schon ziemlich alt, aber für mich heute wichtig.
Dabei interessiert mich vor allem, wie ich an eine existierende Excel-Datei weitere Zeilen
anhängen kann.
Zitat:

ich habe die beiden DLLs erneut "upgedated" mit folgenden Hauptänderungen:

1) Es können Zellen an bestehende Excel Dateien angehängt werden.
Ich finde dazu in der Beschreibung leider keine Hinweise. Irgendwie müsste doch erstmal ausgelesen
werden können, wieviel Zeilen die existierende Datei besitzt, bevor ich dann die nächste Zeile
beschreiben kann.

Vielen Dank und einen schönen Sonntag

marky522 17. Feb 2020 15:13

AW: Excel generieren ohne Office
 
Hallo delphinewbie,

bitte die Dateien in nachfolgendem Link verwenden, sie sind neuer:

https://www.delphipraxis.net/180747-...ighlight=excel

Wenn Du die procedure Create (Version 1) bzw. XLScreate (Version V2) mit Filemode xlsopenread oder xlsopenwrite öffnest, werden die Inhalte automatisch eingelesen.

Mfg
Markus

Hey Joe 23. Mär 2020 08:24

AW: Excel generieren ohne Office
 
Hallo zusammen,
seit längerem benutze unter Delphi 5 und 7 den von tshubaka 2011 geposteten Code zum Export von Daten eines Grids in eine Excel-Tabelle, ohne dass Excel installiert ist (ich nutze LibreOffice). Hat prima geklappt.
Unter Delphi 10.3 Rio (Community Edition) passiert folgendes:
Zeilen und Spaltenanzahl passen, Integerwerte und Realzahlen werden korrekt exportiert, von Strings aber NUR genau der erste Buchstabe.

Scheinbar funktioniert die procedure
XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
unter Delphi 10.3 nicht (mehr) wie gewünscht.

Hat jemand eine Idee, an welcher Schraube ich (am Compiler) drehen muss?
Mein Code compiliere ich mit {$H-}.
Beste Grüße
Hans-J.

Sinspin 23. Mär 2020 08:36

AW: Excel generieren ohne Office
 
Hallo, ich denke mal das hängt mit Unicode zusammen.
Schau mal nach wie Strings geschrieben werden.

Hey Joe 23. Mär 2020 09:43

AW: Excel generieren ohne Office
 
Das war's!

Vorher:
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word; const AValue: string);

Nachher:
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word; const AValue: ansistring);

Besten Dank und Grüße
Hans-J.


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