Excel export mittels Range.Value

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
musicto
Beiträge: 5
Registriert: Do 11. Apr 2024, 07:32

Excel export mittels Range.Value

Beitrag von musicto »

Guten Morgen zusammen,

nachdem ich mein im Laufe der Zeit gewachsenes Lazarus Projekt (erstellt mit 2.0.10) auf die aktuelle Lazarus Version übernehmen wollte funktioniert folgender Code zum Erstellen von Excel Dokumenten nicht mehr.

Hier sehr vereinfacht aufgeführt:

Code: Alles auswählen

procedure TForm1.ToggleBox1Change(Sender: TObject);
var
  Range: olevariant;
  arrData: olevariant;
  x : integer;
  varXLApp: olevariant;
  varXLWb: olevariant;
begin
  arrData := VarArrayCreate([1, 10, 1, 10], varVariant);
 for x := 1 to 10 do
  begin
      arrData[x, x ] := UTF8ToUTF16('Test');
  end;
  varXLApp := CreateOleObject('Excel.Application');
  varXLWb := varXLApp.Workbooks.Add;
  Range :=varXLWb.WorkSheets[1].Range[varXLWb.WorkSheets[1].Cells[1, 1],varXLWb.WorkSheets[1].Cells[10, 10]];
  Range.Value :=  arrData;
  varXLApp.Visible := True;
end;    
Der Fehler tritt an dieser Stelle auf :

Code: Alles auswählen

 Range.Value :=  arrData;
EOleSysError: "Mitglied nicht gefunden"

Ab Lazarus 2.0.12 ist dort etwas geändert worden.
Davor funktionierte es so ohne Probleme.
Bevor ich mit fpspreadsheet oder einer anderen Art des Excel Exports beschäftigen muss...kann mir einer Helfen meinen alten Code zum laufen zu bringen?

Vielen Dank und Grüße

Sascha

ErnstVolker
Beiträge: 354
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Excel export mittels Range.Value

Beitrag von ErnstVolker »

Hhmm, so 'ne richtige Idee habe ich nicht. Ich hatte mich vor langer Zeit mal mit DesignCad-Automatisierung beschäftigt und da auch mit Variants zu tun.

Du definierst "arrData" vom Typ "olevariant".

Dann kommt die Zeile

Code: Alles auswählen

arrData := VarArrayCreate([1, 10, 1, 10], varVariant);
Hier wird "varVariant" -sprich ?"normales Variant"?- verwendet. Das ist aber vermutlich kein olevariant oder gibt es da Typumwandlung?

Schönen Sonntag

wp_xyz
Beiträge: 5204
Registriert: Fr 8. Apr 2011, 09:01

Re: Excel export mittels Range.Value

Beitrag von wp_xyz »

Zugriff auf Excel mittels OLE war für mich immer der Horror an Unverständlichkeit. Mit FPSpreadsheet wäre das in den folgenden Zeilen zu erledigen:

Code: Alles auswählen

uses
  fpspreadsheet, xlsxooxml;

procedure TForm1.Button1Click(Sender: TObject);
var
  workbook: TsWorkbook;
  worksheet: TsWorksheet;
  x: Integer;
begin
  workbook := TsWorkbook.Create;
  worksheet := workbook.AddWorksheet('Tabelle 1');
  for x := 0 to 9 do
    worksheet.WriteText(x, x, 'Test');
  workbook.WriteToFile('test.xlsx', true);
  workbook.Free;
end; 
Die Dokumentation zu FPSpreadsheet findest du auf https://wiki.lazarus.freepascal.org/FPSpreadsheet, sowie den dort am Ende verlinkten wiki-Seiten.

Antworten