![]() |
Dateien in Excel übertragen
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:
An der markierten Stelle, also bei
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;
Delphi-Quellcode:
stürzt das Programm ab.
Range := Sheet.Range[R1, R2]; //--ABSTURZ--!!
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:
Delphi-Quellcode:
und muss sowohl das Programm als auch Excel dann "killen". Was macht Lazarus hier wieder anders?
0000000077C7F2D0 895c2420 mov %ebx,0x20(%rsp)
|
AW: Dateien in Excel übertragen
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]; |
AW: Dateien in Excel übertragen
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. |
AW: Dateien in Excel übertragen
Hallo,
immer noch an der gleichen Stelle? Sind das wirklich gültige Werte? |
AW: Dateien in Excel übertragen
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"...
Delphi-Quellcode:
geändert auf
function RefToCell( ACol, ARow: Integer): string;
Delphi-Quellcode:
,
function RefToCell( ACol, ARow: Integer): widestring;
Delphi-Quellcode:
geändert auf
R1, R2 : string;
Delphi-Quellcode:
Und nun funktioniert es -.-
R1, R2 : widestring;
|
AW: Dateien in Excel übertragen
Hast du auch an die $-Zeichen gedacht?
Range['$B$3:$C$4'] Bei mir muß das so stehen. |
AW: Dateien in Excel übertragen
Anderer Variablenname für Range? Nur um sicher zu gehen?
Ansonsten die Range-Methode direkt benutzen, nicht auf dem Sheet-Objekt? Also sinngenäß:
Delphi-Quellcode:
rg := xlApp.Range(Sheet.Cells[1,1],Sheet.Cells[Sheet.UsedRange.Rows.Count,Sheet.UsedRange.Columns.Count])
|
AW: Dateien in Excel übertragen
Hallo,
es funktioniert jetzt ja. Komisch ist es trotzdem ... |
AW: Dateien in Excel übertragen
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 -.-
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 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