Excel übernimmt keine Daten

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Excel übernimmt keine Daten

Beitrag von JoelH »

Unter Delphi nutze ich folgenden Code um Daten nach Excel zu schieben

Code: Alles auswählen

procedure Tfrm_mdi_konto.doExcel(grid:TStringgrid);
var App_Excel : Variant;
    row, col : Integer;
begin
  app_excel := CreateOleObject('Excel.Application');
  app_excel.visible := false;
  app_excel.workbooks.add;
  app_excel.workbooks[1].sheets[1].name := 'Uebersicht';
  for row := 0 to grid.rowcount-1 do
  begin
    for col := 0 to grid.colcount-1 do
    begin
      //showmessage(grid.cells[col, row]);
      app_excel.workbooks[1].sheets[1].cells[row+1, col+1] := grid.cells[col, row];
    end;
  end;
  app_excel.visible := true;
end; 
Unter Lazarus übernimmt er mir leider nur den Namen des Sheets. Aber die Zellen bleiben leer. Obwohl im Grid etwas drin steht, das hab ich via des Showmessages gecheckt. Irgendwie stehe ich auf dem Schlauch.
Lazarus 2.0.10 mit FPC 3.2.0 win64 und Excel 2016

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Excel übernimmt keine Daten

Beitrag von PascalDragon »

Würdest du mal bitte sicherheitshalber mit FPC 3.2.1 oder 3.3.1 gegentesten? Es gab da seit 3.2.0 nämlich ein paar Korrekturen.
FPC Compiler Entwickler

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Excel übernimmt keine Daten

Beitrag von six1 »

Ich arbeite mit TsWorkSheetGrid ohne Probleme in fpc 3.2 und 3.3

Was mir an deinem Beispielcode auffällt ist, dass du EIN .add durchführst aber auf das zweite Element mit [1] zugreifst. Müsste es nicht [0] sein?
Gruß, Michael

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Re: Excel übernimmt keine Daten

Beitrag von JoelH »

six1 hat geschrieben:
Do 26. Nov 2020, 06:43
Ich arbeite mit TsWorkSheetGrid ohne Probleme in fpc 3.2 und 3.3

Was mir an deinem Beispielcode auffällt ist, dass du EIN .add durchführst aber auf das zweite Element mit [1] zugreifst. Müsste es nicht [0] sein?
Na ja, die Frage ist halt erst Mal ist es ein Bug oder mach ich was falsch.

Excel kennt keine 0 da fängt immer alles mit der eins an, ist gewöhnungsbedürftig aber nicht zu ändern, besonders wenn man Code hat der möglichst auch noch mit Openoffice oder so zusammenarbeiten soll, da muss man immer umrechnen. Das add ist lediglich quick&dirty, ich spare mir so die Prüfung ob Excel schon ein Sheet auf hat oder nicht.
PascalDragon hat geschrieben:
Mi 25. Nov 2020, 22:47
Würdest du mal bitte sicherheitshalber mit FPC 3.2.1 oder 3.3.1 gegentesten? Es gab da seit 3.2.0 nämlich ein paar Korrekturen.
Oha, hatte das aktuelle Lazarus runtergeladen und dachte das wäre dann auch aktuell. Muss ich Mal schauen.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Excel übernimmt keine Daten

Beitrag von PascalDragon »

JoelH hat geschrieben:
Do 26. Nov 2020, 07:49
PascalDragon hat geschrieben:
Mi 25. Nov 2020, 22:47
Würdest du mal bitte sicherheitshalber mit FPC 3.2.1 oder 3.3.1 gegentesten? Es gab da seit 3.2.0 nämlich ein paar Korrekturen.
Oha, hatte das aktuelle Lazarus runtergeladen und dachte das wäre dann auch aktuell. Muss ich Mal schauen.
3.2.0 ist das aktuelle Release. Die Entwicklung und das Bugfixing geht aber weiter bis es wieder ein neues Release gibt. Die 3.2.1 und 3.3.1 sind Entwicklungsversionen, zu denen es keine Releases gibt. Die muss man sich dann selber bauen (oder FpcUpDeluxe verwenden).
FPC Compiler Entwickler

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Excel übernimmt keine Daten

Beitrag von theo »

Ehrlich gesagt wäre die Installation von Trunk nicht das Erste, was ich hier probieren würde.
Das ist auch mit Aufwand verbunden und die Wahrscheinlichkeit, dass es das Problem löst ist eher gering (natürlich nicht ausgeschlossen), zumal es dieses OleObject Zeug auch schon ewig in FPC/Lazarus gibt und das hier kein besonders exotisches Szenario ist.

Hast du vielleicht Umlaute drin?
https://wiki.lazarus.freepascal.org/Exc ... f.C3.BCgen

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Re: Excel übernimmt keine Daten

Beitrag von JoelH »

Es scheint nicht an den Umlauten zu liegen. Er mag offensichtlich keine Strings. Ich habe jetzt mal etwas experimentiert.

Code: Alles auswählen

var App_Excel : OleVariant;
    row, col : Integer;
    num : Currency;
    s : String;
begin
  app_excel := CreateOleObject('Excel.Application');
  app_excel.visible := true;
  app_excel.workbooks.add;
  app_excel.workbooks[1].sheets[1].name := 'Uebersicht';
  num := 12.13;
  s := 'ich werd wahnsinnig';
  app_excel.workbooks[1].sheets[1].cells[1, 1].VALUE := 'TEST';
  app_excel.workbooks[1].sheets[1].cells[1, 2] := num;
  app_excel.workbooks[1].sheets[1].cells[1, 3] := ''''+s;
  app_excel.workbooks[1].sheets[1].cells[1, 4].Value := ''''+s;
  app_excel.workbooks[1].sheets[1].cells[1, 5] := 'manmanman';  
Die Zellen 1,2 und 5 werden übernommen und im Sheet angezeigt. Die Zellen bei denen ich s übergeben will bleiben leer. Habe auch mal mit AnsiString experimentiert, das führte dann manchmal zu Speicherüberläufen :shock: :shock: Die Hochkommas kann man auch entfernen, das ändert nicht. Auch nicht ob man VALUE oder nicht nutzt.

Da ich Text übergebe ist das ganz schlecht so :roll:

Ich habe mir aber jetzt mal das FpSpreadsheet runtergeladen. Ich sehe das doch richtig, dass ich damit auch Excelfiles generieren kann. Das würde mir nämlich auch schon genügen. Ist zwar nicht ganz so komfortabel als wenn das Excel direkt aufgeht, aber immer noch besser, als hier ewig nach dem Fehler zu suchen, denn darum scheint es sich in der Tat zu handeln.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Excel übernimmt keine Daten

Beitrag von theo »

Hast du mal mit UTF8ToUTF16 probiert, wie in dem Link oben?

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Re: Excel übernimmt keine Daten

Beitrag von JoelH »

Recht erfolglos =>
2020-11-26 11_53_52-Greenshot.png
2020-11-26 11_53_52-Greenshot.png (6.53 KiB) 3466 mal betrachtet
Access Violation.

Ich habe jetzt den Umweg über fpSpreedsheet gewählt und auch schon umgesetzt. War jetzt das Einfachste und funktioniert.

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Excel übernimmt keine Daten

Beitrag von PascalDragon »

JoelH hat geschrieben:
Do 26. Nov 2020, 11:57
Ich habe jetzt den Umweg über fpSpreedsheet gewählt und auch schon umgesetzt. War jetzt das Einfachste und funktioniert.
Kannst du mal trotzdem noch folgendes (wie im internationalen Forum erwähnt) versuchen, ich habe nämlich kein Excel und würde gerne wissen, ob es tatsächlich daran liegt woran ich denke, dass es liegt ;) ):

Code: Alles auswählen

app_excel.workbooks[1].sheets[1].cells[row+1, col+1] := WideString(grid.cells[col, row]);
FPC Compiler Entwickler

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Re: Excel übernimmt keine Daten

Beitrag von JoelH »

PascalDragon hat geschrieben:
Do 26. Nov 2020, 14:44

Kannst du mal trotzdem noch folgendes (wie im internationalen Forum erwähnt) versuchen, ich habe nämlich kein Excel und würde gerne wissen, ob es tatsächlich daran liegt woran ich denke, dass es liegt ;) ):

Code: Alles auswählen

app_excel.workbooks[1].sheets[1].cells[row+1, col+1] := WideString(grid.cells[col, row]);
:roll: Das funktioniert tatsächlich.
Manchmal ist die Lösung doch so nah :oops:
Dann werde ich wohl nochmal umbauen.

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: Excel übernimmt keine Daten

Beitrag von Sieben »

Hast du (OLE)Variant auch mal probiert? So rein interessehalber?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Excel übernimmt keine Daten

Beitrag von theo »

JoelH hat geschrieben:
Do 26. Nov 2020, 15:40
:roll: Das funktioniert tatsächlich.
Manchmal ist die Lösung doch so nah :oops:
Dann werde ich wohl nochmal umbauen.
UTF8ToUTF16 hatte ich ja auch schon vorgeschlagen. Da geht es theoretisch um das gleiche Problem.
Was dabei bei dir schief lief weiss ich auch nicht. Hat wahrscheinlich mit (Ole)Variant zu tun.

JoelH
Beiträge: 10
Registriert: Mi 25. Nov 2020, 15:33

Re: Excel übernimmt keine Daten

Beitrag von JoelH »

Sieben hat geschrieben:
Do 26. Nov 2020, 16:09
Hast du (OLE)Variant auch mal probiert? So rein interessehalber?
Ja, habe ich. Ich glaube das einzige was ich wirklich nciht probiert habe war Widestring :lol: :lol: :lol:

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Excel übernimmt keine Daten

Beitrag von PascalDragon »

JoelH hat geschrieben:
Do 26. Nov 2020, 15:40
PascalDragon hat geschrieben:
Do 26. Nov 2020, 14:44

Kannst du mal trotzdem noch folgendes (wie im internationalen Forum erwähnt) versuchen, ich habe nämlich kein Excel und würde gerne wissen, ob es tatsächlich daran liegt woran ich denke, dass es liegt ;) ):

Code: Alles auswählen

app_excel.workbooks[1].sheets[1].cells[row+1, col+1] := WideString(grid.cells[col, row]);
:roll: Das funktioniert tatsächlich.
Manchmal ist die Lösung doch so nah :oops:
Dann werde ich wohl nochmal umbauen.
Sehr gut, dann ist das tatsächlich das Problem, was ich vermutet hatte und es sollte mit 3.2.1 und 3.3.1 dann gefixt sein (bzw. auch mit dem kommendem 3.2.2 Release :mrgreen: ).
theo hat geschrieben:
Do 26. Nov 2020, 17:02
JoelH hat geschrieben:
Do 26. Nov 2020, 15:40
:roll: Das funktioniert tatsächlich.
Manchmal ist die Lösung doch so nah :oops:
Dann werde ich wohl nochmal umbauen.
UTF8ToUTF16 hatte ich ja auch schon vorgeschlagen. Da geht es theoretisch um das gleiche Problem.
Was dabei bei dir schief lief weiss ich auch nicht. Hat wahrscheinlich mit (Ole)Variant zu tun.
Das hätte in dem Fall tatsächlich nicht geholfen und so gesehen ist das Beispiel im Wiki mit 3.2.0 und älter fehlerhaft. Das Problem ist nämlich, dass die Konvertierung von sowohl AnsiString als auch UnicodeString zu WideString für das COM Dispatching in der Unit ComObj fehlerhaft war (bzw. die für UnicodeString war überhaupt gar nicht vorhanden). Das habe ich letzte Woche gefixt.
FPC Compiler Entwickler

Antworten