Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Excel erzeigen mit SwissDelphiCenter code geht nicht (https://www.delphipraxis.net/164833-excel-erzeigen-mit-swissdelphicenter-code-geht-nicht.html)

hedie 1. Dez 2011 18:09

Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Hallo zusammen

Ich möchte gerne eine simple Excel Datei mit dem Code von hier erzeugen:

http://www.swissdelphicenter.ch/de/showcode.php?id=725

Das erste was mir aufgefallen ist, der Code versucht in beinahe jeder Funktion in eine Konstante zu schreiben...
Das kann ja nicht funktionieren... So war es dann auch.

Ich habe dann die vermeindlichen Konstanten als Variablen definiert und dann konnte ich das Programm erzeugen.

Doch ein Excel wurde daraus nicht. Es waren irgendwelche kryptische zeichen zu sehen wenn man die Datei mit Excel geöffnet hat.

Ich hoffe jemand sieht wo hier der Haken ist :)

Danke schonmal
Grüsse

fkerber 1. Dez 2011 18:13

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Hi,

benutzt du D2007 wie im Profil angegeben oder ist es vllt. ein Unicode-Problem?

Außerdem glaube ich das mit den Konstanten nicht direkt.
Ist es nicht so, dass die Arrays konstant sind, aber ihr Inhalt deswegen doch noch lange nicht?!


LG, Frederic

hedie 1. Dez 2011 18:17

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Ja ich benutze D2007 so wie angegeben....

Delphi mekkert immer "der linken seite kann nichts zugewiesen werden" wenn ich es als konstante deklariere

DeddyH 1. Dez 2011 18:18

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Mal schnell mit XE probiert:
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
const Test: array[0..1] of Byte = ($08, $FF);
begin
  Test[0] := 10;
end;
Das akzeptiert der Compiler nur, wenn "Zuweisbare typisierte Konstanten" aktiv ist (z.B. in den Projektoptionen).

hedie 1. Dez 2011 18:26

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1138850)
Mal schnell mit XE probiert:

Das akzeptiert der Compiler nur, wenn "Zuweisbare typisierte Konstanten" aktiv ist (z.B. in den Projektoptionen).

Hat dies einen Einfluss auf das restliche Programm, oder kann man dies getrost einfach setzen?

DeddyH 1. Dez 2011 18:48

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
AFAIK geht das auch im Programm per Compilerschalter ein- und auszustellen, aber ich hab den gerade nicht im Kopf.

daywalker9 1. Dez 2011 18:52

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Delphi-Quellcode:
{$J+}

Bummi 1. Dez 2011 18:52

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
einfach mal VAR statt Const d'rüberschreiben ?

Sir Rufo 1. Dez 2011 20:05

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von Bummi (Beitrag 1138858)
einfach mal VAR statt Const d'rüberschreiben ?

Das geht nicht ;)
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var Test: array[0..1] of Byte = ($08, $FF); // hier meckert der Compiler
begin
**Test[0] := 10;
end;

Bummi 1. Dez 2011 20:14

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
ich bezog mich auf den Originalcode
Delphi-Quellcode:
const
  CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0);
  CXlsEof: array[0..1] of Word = ($0A, 00);
  CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
  CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
  CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);
hier sind es keine lokalen Variablen/Konstanten


das hier läuft ..
Delphi-Quellcode:
var Test: array[0..1] of Byte = ($08, $FF);

procedure TForm2.FormCreate(Sender: TObject);
begin
  Test[0] := 10;
end;

himitsu 1. Dez 2011 20:21

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
siehe Bummi ... der macht es richtig.

Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
const Test: array[0..1] of Byte = ($08, $FF);
begin
  Test[0] := 10;
end;
Test ist, wenn die zuweisbaren Konstanten aktiviert sind, eine kranke und unübersichtliche Version von globalen Variablen.

Const in Var zu ändern bringt da nichts, da dieses dann nur eine "lokale" Variable ergäbe.

Typisierte Konstanten sind halt "nur" schreibgeschützte Variablen ... "sinnloser" Weise


Was ist erzeigen?

himitsu 1. Dez 2011 23:32

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Leute ab D2009 (wegen Generics) können ja gerne mal dieses ausprobieren.
Wie man es nutzt, sollte hoffentlich ersichtlich sein.

Wenn es läuft, dann läßt sich bestimmt auch noch eine Version ohne die bösen Generics erstellen.


noch vollkommen ungetestet ... ich hof' ich hab alles richtig übersetzt und richtig neu zusammengesetzt

DeddyH 2. Dez 2011 07:05

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von fkerber (Beitrag 1138847)
Ist es nicht so, dass die Arrays konstant sind, aber ihr Inhalt deswegen doch noch lange nicht?!

Darauf habe ich mich bezogen, unabhängig von "richtig" oder "falsch". Obige Aussage trifft also nur zu, wenn die zuweisbaren typisierten Konstanten aktiviert sind.

Bummi 2. Dez 2011 07:14

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
@himitsu

Bei mir geht weder Laden einer vorhanden, noch das Speichern einer neuen, ich habe es so versucht:
Delphi-Quellcode:
var
e:TExcelCreator;
begin
     e :=TExcelCreator.Create(self);
     //e.LoadFromFile('C:\temp\test1.xls');
     e.Cell[1,1]:='Was auch immer'#13#10'in zweiZeilen';
     e.Cell[2,2]:=1234.5678;
     e.SaveToFile('C:\temp\test.xls');
     e.Free;
end;
BTW: warum hast Du von TComponent abgeleitet?

Chemiker 2. Dez 2011 13:13

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Hallo,


vielleicht hilft das weiter:http://www.delphipraxis.net/95460-st...speichern.html

Bis bald Chemiker

Bummi 2. Dez 2011 13:20

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
@Chemiker
danke, ich suche nicht, ich wollte himitsu nur eine Rückmeldung geben

himitsu 3. Dez 2011 18:36

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 3)
@Chemiker:
Im Prinzip ist das der gleiche Code, wie der hier schon im 1. Post Genannte, woraus ich meine Klasse erstellt hab.
Nur daß dein verlinker Code nur Strings kann, wärend dieser noch Integer und Floats kennt und daß man die Daten nochmals verändern kann, vor dem Speichern.


Zitat:

Zitat von Bummi (Beitrag 1138877)
Bei mir geht weder Laden einer vorhanden, noch das Speichern einer neuen, ich habe es so versucht:

BTW: warum hast Du von TComponent abgeleitet?

Joar, wenn man (ich) so blöd ist und die Cell-Info in TExcelCreator.SetVarCell, nach dem erfolgreichen Speichern, wieder mit Zufallswerten zu überschreiben
und dann auch noch beim Abspeichern (SaveToFile) die falschen Anzahlen der Rows und Cols verwendet (beim Auslesen mit <= statt => gesucht),
dann braucht man sich nicht wundern. :oops:


Nja, wir leben halt in einer KlickbuntiOOPWelt ... drum ist das schon so ausgelegt, daß man diese Komponente irgendwann mal auf der Toolpalette in die Form klatschen kann. :stupid:



PS: Bitte nicht über die OutputDebugStrings im Code wundern.
Das Schreiben scheint nun zu gehn, jedenfalls mit dem ersten Teil dieses Codes.
Delphi-Quellcode:
var
  E: TExcelCreator;
begin
  E := TExcelCreator.Create(nil);
  E.Cell[1,1] := 'Was auch immer'#13#10'in zweiZeilen';
  E.Cell[2,2] := 1234.5678;
  E.SaveToFile('C:\Users\Frank\Desktop\ExcelFile.xls');
  E.Free;

  E := TExcelCreator.Create(nil);
  E.LoadFromFile('C:\Users\Frank\Desktop\ExcelFile.xls');
  E.Cell[2,1] := 'noch mehr';
  E.SaveToFile('C:\Users\Frank\Desktop\ExcelFile2.xls');
  E.Free;
Aber beim Auslesen der selbsterstellten Datei hapert es noch.
Auch wenn es eventuell oftmals nicht geht fremde Dateien einzulesen, aber die eigenen sollten schon noch gehn (irgendwann mal).

OK, vielleicht bekommt noch jemand raus, wie man mehrzeilig in eine Spalte rein macht.



Nja, also im Prinzip ist dieses alte Binärformat doch recht einfach ufgebaut.
Eventuell könnte man sich ja auch mal ansehn, wie das neue gezippte XML-Format aussieht.


[edit]
So, jetzt geht's Speichern, des Auslesen und beim auslesen hab ich versucht noch ein bissl flexiebler zu sein, was Fremddateien angeht.
Da ich aber nur einen kleinen Teil der Spezifikation drin hab und es auch nicht angedacht ist alles aufzunehmen, wird auch niemals alles unterstützt werden, aber hier geht's ja mehr ums Erstellen der Datei, als ums Einlesen.

PS: Über mein Excel hab ich grade rausgefunden, daß es sich bei dieser Datei um ein "Arbeitsblatt/Workssheet in der uralten Version 2" handelt.

himitsu 4. Dez 2011 12:23

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
- Alles etwas aufgeräumt
- die OldStyle-Variante läuft hoffentlich in älteren Delphi-Versionen
- die anderen beiden Units sind vermutlich ab D2009 nutzbar (nja, zumindestens in D2010 getestet)
- XE2 nicht getestet und vermutlich auch nicht direkt compilierbar, dank der neuen Namensgebung der RTL-Units
- mit StringGrid-Exporter, Importer und eventuell auch für die TStringGrid-Nachfahren, wie TDBGrid

Jumpy 6. Dez 2011 07:22

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von himitsu (Beitrag 1139137)
OK, vielleicht bekommt noch jemand raus, wie man mehrzeilig in eine Spalte rein macht.

Das ist ja afaik keine Sache "wie der String aufgebaut ist" bzw. wie der Zeilenumbruch erzeugt wird, sondern in Excel ist das eine zusätzliche Einstellung, dass für eine bestimmte Zelle der Zeilenumbruch aktiviert ist. Keine Ahnung wie man das in den Binaries erkennt.

UliTs 16. Feb 2024 14:13

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von himitsu (Beitrag 1138870)
Leute ab D2009 (wegen Generics) können ja gerne mal dieses ausprobieren.
Wie man es nutzt, sollte hoffentlich ersichtlich sein.

Wenn es läuft, dann läßt sich bestimmt auch noch eine Version ohne die bösen Generics erstellen.


noch vollkommen ungetestet ... ich hof' ich hab alles richtig übersetzt und richtig neu zusammengesetzt

Hallo @himitsu, ich hatte Dir eine PN geschickt. Ist sie angekommen?
Viele Grüße Uli

DaCoda 16. Feb 2024 16:20

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
vielleicht nützt Euch das ja auch was ??? (Siehe Anhang)

UliTs 17. Feb 2024 12:24

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Zitat von DaCoda (Beitrag 1533593)
Hallo,
vielleicht nützt Euch das ja auch was ??? (Siehe Anhang)

Danke. Wenn ich das richtig sehe, funktioniert das aber nur, wenn auch Excel auf dem Rechner installiert ist, oder?

DaCoda 17. Feb 2024 12:47

AW: Excel erzeigen mit SwissDelphiCenter code geht nicht
 
Zitat:

Danke. Wenn ich das richtig sehe, funktioniert das aber nur, wenn auch Excel auf dem Rechner installiert ist, oder?
Ja, nur wenn Excel installiert ist...


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