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
Antwort Antwort
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, 15: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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Dateien in Excel übertragen

  Alt 27. Sep 2019, 16:42
Hallo,
was steht denn in R1 und R2 ?

Aus einem alten Artikel:
To access a Range object in Excel, simply specify the Range with which you want to work: Range := Sheet.Range['C1:F25']; In this case the code defines a range from cell C1 to cell F25.

Also müsste das doch so sein
statt
Range := Sheet.Range[R1, R2];

so sein
Range := Sheet.Range[R1+':'+R2];
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 07:50
In R1 bzw. R2 steht der Zellverweis also: R1 ist immer "A1" und R2 ist die höchste Zelle (z.B.) K4285

Hmm, danke an die "echte" Excel Schematic habe ich gar nicht gedacht, da dies bisher in Delphi ja so funktioniert hat und ich dachte das Excel es dann auch so erwartet, aber ich teste das mal aus.

...

Nein, das war es leider nicht, dann Stürzt das Programm auch ab, jedoch mit einer leeren Fehlermeldung.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Sep 2019 um 07:54 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 09:08
Hallo,
immer noch an der gleichen Stelle?
Sind das wirklich gültige Werte?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 09:16
Wie gesagt, das ist ja 1:1 das was ich in Delphi auch verwendet habe und funktionierte, erst ab Lazarus tritt das Problem auf.
Ich habe mir die Werte mal per showmessage(); ausgeben lassen und die Werte passen.

...hab es "gefunden"...

function RefToCell( ACol, ARow: Integer): string; geändert auf function RefToCell( ACol, ARow: Integer): widestring; ,

R1, R2 : string; geändert auf R1, R2 : widestring; Und nun funktioniert es -.-
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.

Geändert von Moombas (30. Sep 2019 um 09:34 Uhr)
  Mit Zitat antworten Zitat
Ron67

Registriert seit: 10. Sep 2018
Ort: Großraum Nürnberg
13 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 09:31
Hast du auch an die $-Zeichen gedacht?

Range['$B$3:$C$4']

Bei mir muß das so stehen.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 09:51
Anderer Variablenname für Range? Nur um sicher zu gehen?
Ansonsten die Range-Methode direkt benutzen, nicht auf dem Sheet-Objekt? Also sinngenäß:
rg := xlApp.Range(Sheet.Cells[1,1],Sheet.Cells[Sheet.UsedRange.Rows.Count,Sheet.UsedRange.Columns.Count])
Ralph
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 10:10
Hallo,
es funktioniert jetzt ja.
Komisch ist es trotzdem ...
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

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

AW: Dateien in Excel übertragen

  Alt 30. Sep 2019, 11:36
Naja, ich habe in Lazarus nun schon an seeehr vielen Stellen das Problem mit "WideString" lösen können, aber die Idee das hier einzusetzen kam mir leider erst heute -.-
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:20 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