Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Excel - Export ohne Excel - Problem beim erzeugen (https://www.delphipraxis.net/51636-excel-export-ohne-excel-problem-beim-erzeugen.html)

Bernhard Geyer 11. Nov 2005 08:51

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Zitat:

Zitat von Zerolith
Hmmm eigentl. Hast ja recht. Bloß bin ich davon ausgegangen das ms. Excel unicode unterstützt.

oder nicht?

Macht es. Bloß wenn der gerwählte Font keine Zeichen hat kann Excel auch nichts machen.

Zerolith 11. Nov 2005 09:20

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Tahoma und Arial haben unicode zeichen...
wenn ich die DAtei dann aufmach, und manuell irgendwelche Kyrillischen zeichen oder so eingibt funktioniert das ja auch ganz prima

alphaflight83 10. Jun 2009 12:32

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Muss das hier mal wiederbeleben.
Mit Delphi 2009 brauche ich hier nun auch Unicode.
Wenn ich in der Funktion
Delphi-Quellcode:
procedure TXLSExport.Write(const Col, Row: Word; const Value: string);
für Value AnsiString statt String verwende funktoniert die Funktion wie früher,
allerdings will ich ja nun auch Unicode in den Exports benutzen.
Die Frage von Zerolith wurde damals nicht beantwortet.
Auch ich bekomme Kästchen in den Feldern, allerdings "nur" jedes zweite Zeichen.
Die Länge der Strings wäre an sich richtig, nur dass eben immer ein Kästchen reingequetscht wird,
wodurch die Hälfte des Strings unter den Tisch fällt.
Als Standard Schriftart habe ich in Excel Arial Unicode MS eingestellt,
es liegt also definitiv nicht an Excels Schriftart.

Kann das an der Dereferenzierung liegen?
Delphi-Quellcode:
XlsStream.WriteBuffer(Pointer(AValue)^, L);
Hab unlängst mal gelesen, dass die Dereferenzierung mit "Pointer" nicht so richtig funktioniert !?!

Edit: Anscheinend nicht, auch die Spezifizierung durch PWideString, bzw PUnicodeString bringt keinen Effekt

Chemiker 10. Jun 2009 14:07

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Hallo alphaflight83,

in der CodeLib gibt es auch eine Unit um Excel-Dateien, ohne Excel zu erzeugen.

Excel-Unit
Bis bald Chemiker

toms 11. Jun 2009 05:15

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Zitat:

Zitat von Chemiker
in der CodeLib gibt es auch eine Unit um Excel-Dateien, ohne Excel zu erzeugen.

TXLSExport schreibt ja auch direkt ohne OLE etc.

alphaflight83 12. Jun 2009 09:59

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Zitat:

Zitat von Chemiker
In der CodeLib gibt es auch eine Unit um Excel-Dateien, ohne Excel zu erzeugen.

Ah, hab grade gesehen, dass du Änderungen für D2009 eingefügt hast, dann werde ich mir das nochmal zu Gemüte führen.
Danke mal dafür.

GHorn 16. Jun 2009 14:17

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Hi,
ich brüte auch gerade über diesem Thema.

@Chemiker:
Setze ich

Delphi-Quellcode:
BIFFVersion:= XLS_BIFFVER  // XLS_BIFFVER = $600
um mit BIFF8 zu arbeiten, bekomme ich auch so niedliche Kästchen.
Allerdings nicht in allen Feldern. Hauptsächlich in Zeichenfeldern, die
Ziffern enthalten.
Die Anpassung an D2009 habe ich auch probiert - allerdings ohne Erfolg.
Die Kästchen und kryptischen Zeichen bleiben.

Grund für die Anpassung an BIFF8 ist die Notwendigkeit, mehr als ein
Worksheet zu erstellen und mit Daten zu füllen. Soweit ich das bisher
in Erfahrung bringen konnte, ist dafür BIFF8 erforderlich. Oder nicht??
Wie erstelle ich weitere Worksheets und gebe ihnen noch treffende Namen?

Im Übrigen ist Dein Tool super. Danke dafür.

Aktuell: D2007, Daten aus BlackFish (Unicode) und Excel 2003 (SP3).

Gruß,
Gerald

alphaflight83 16. Jun 2009 14:41

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
So jetzt kann ich mich wieder mal diesem Thema zuwenden.

Hab das jetzt mal ausprobiert und Chemikers Funktion verwendet,
allerdings bleiben auch hier noch die Kästchen-Steuerzeichen hinter jedem Char in der Tabelle.
Die Änderung bewirkt immerhin, dass die Strings nicht abgeschnitten werden.

Mit TXLSExport erreicht man das durch Änderung der Prozedur Write

Delphi-Quellcode:
procedure TXLSExport.Write(const Col, Row: Word; const Value: String);
var L: Word;
begin
  L := Length(Value) * SizeOf(Char); // <- 
  CXlsLabel[1] := 8 + L;
  CXlsLabel[2] := Row;
  CXlsLabel[3] := Col;
  CXlsLabel[5] := L;
  fs.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
  fs.WriteBuffer(Pointer(Value)^, L);
end;
Aber, wie gesagt, die Kästchen sind in beiden Fällen weiterhin da.
Die Stringlänge bei TXLSExport vor der Änderung wäre an sich wie gesagt auch richtig,
wenn die Kästchen den String nicht dehnen würden.

Kann es sein, dass noch ein De-/Codier-Schritt fehlt, um das zum laufen zu bringen?

Edit: Hab grade festgestellt, dass die Exportierung immer noch als Ansi abläuft.
Dann hat der Excel Export an sich erst mal gar nichts damit zu tun und ich muss eine Ebene drunter Fehlersuche betreiben.

Chemiker 16. Jun 2009 20:00

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Hallo alphafligt83, GHorn,

Zitat:

Zitat von GHorn
Aktuell: D2007, Daten aus BlackFish (Unicode) und Excel 2003 (SP3).

D2007 ist aber nicht UniCode fähig.

Man kann die Routinen natürlich erweitern um weitere Sheets in einem Workbook anzulegen, allerdings wird dadurch das ganze etwas aufgebläht.
Das gleiche gilt für Formatierungen, Schriftgröße usw.

Ich bin bisher nicht in die Verlegenheit gekommen Unicode zu benutzen, ich habe nur die Unit so angepasst das ich das StringGrid mit den Zufallswerten mit Delphi 2009 benutzen kann und eine Excel-Datei erhalte die alle Übertragen Daten in Excel 2007 anzeigt und nicht zum Teil die Daten abschneidet.

In diesem Link steht wie das Biff-Format aufgebaut ist: BIFF-Format
Bis bald Chemiker

alphaflight83 17. Jun 2009 09:05

Re: Excel - Export ohne Excel - Problem beim erzeugen
 
Momentan bin ich immer noch am suchen, wie ich einen TFileStream dazu bringe die Encoding auf UTF8 zu setzen.
Bei einem normalen SaveToFile ist das ja kein Ding
Delphi-Quellcode:
StringList.SaveToFile(ExportFilename, TEncoding.UTF8);
Aber beim Stream hab ich bisher noch keine Option gefunden.
Kann natürlich auch sein, dass ich das an anderer Stelle setzen muss !?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr.
Seite 2 von 4     12 34      

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