AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen FreePascal FreePascal Dateien in Excel übertragen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien in Excel übertragen

Ein Thema von Moombas · begonnen am 27. Sep 2019 · letzter Beitrag vom 30. Sep 2019
 
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#1

Dateien in Excel übertragen

  Alt 27. Sep 2019, 14:51
Moin zusammen,

ein wenig weiter bin ich nun gekommen, jedoch scheitere ich an folgender Hürde, da ich leider keine Fehlermeldung erhalte, nur einen "halben" Absturz:
Delphi-Quellcode:
function StringGridToXLS(AXLApp : OleVariant; AGrid : TStringGrid; Sheetname : widestring):Boolean;
var
  Sheet: OLEVariant;
  MaxCol : Integer;
  MaxRow : Integer;
  Range : OleVariant;
  Data : OleVariant;
  Col : Integer;
  Row : Integer;
  R1,R2 : string;
begin
  Result := False;
  try
    //Worksheet auswählen
    if (Sheetname <> '') and HaveSheet(AXLApp, String(Sheetname)) then
    begin
      Sheet := AXLApp.WorkSheets[sheetname];
    end else
    begin
      Sheet := AXLApp.WorkSheets[1];
    end;
    Sheet.select;
    if AXLApp.ActiveSheet.FilterMode then
    begin
      AXLApp.ActiveSheet.ShowAllData;
    end;
    // Der vorhandenen Daten im Grid, nicht der möglichen in Excel...
    MaxCol := AGrid.ColCount;
    MaxRow := AGrid.RowCount;

    if (MaxRow > 0) and (MaxCol > 0) then
    begin
      //Bereich auswählen
      R1 := RefToCell(1, 1);
      R2 := RefToCell(MaxCol, MaxRow);
      Range := Sheet.Range[R1, R2]; //--ABSTURZ--!!
      if not VarIsNull(Range) then
      begin
        //Daten aus Grid holen
        Data := VarArrayCreate([1, MaxRow, 1, MaxCol], varVariant);
        for Row := 0 to Pred(MaxRow) do
        begin
          for Col := 0 to Pred(MaxCol) do
          begin
            Data[Succ(Row), Succ(Col)] := AGrid.Cells[Col, Row];
          end;
        end;
        //Daten dem Excelsheet übergeben
        Range.Value := Data;
        Range.Columns.AutoFit;
        Result := True;
      end;
    end;
  finally
    SaveExcel(AXLApp);
    Range := UnAssigned;
    Sheet := Unassigned;
    Data := Unassigned;
  end;
end;
An der markierten Stelle, also bei Range := Sheet.Range[R1, R2]; //--ABSTURZ--!! stürzt das Programm ab.
Die Werte in R1 und R2 sind korrekt ermittelt worden und in weder in Excel noch sonst irgendwie erhalte ich eine Fehlermeldung.
Ich lande in Lazarus nur im Assembler: 0000000077C7F2D0 895c2420 mov %ebx,0x20(%rsp) und muss sowohl das Programm als auch Excel dann "killen". Was macht Lazarus hier wieder anders?
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz