![]() |
Fehler bei XLS-Import
Ich gebe in einem Programm dem Anwender die Möglichkeit Daten aus einer Excel-Datei zu importieren.
Leider kann es vorkommen, dass in einer Zelle der "Wert" =#BEZUG! drinsteht. Und sobald ich diesen Wert einer String-Variablen zuweisen will, bricht die Import-Prozedur ohne Kommentar ab und das Programm läuft an der Stelle weiter, an der die Prozedur aufgerufen wurde. Hier ein Auszug aus der Prozedur:
Delphi-Quellcode:
Ich hoffe, mir kann jemand helfen.
procedure ImportXLS(AXLSFile: String);
var XLApp, Sheet, XLSDatei : OLEVariant; AnzSeiten, i : Integer; RangeMatrix : Variant; AktSheet, VStart : Variant; apa : Variant; x, k, r : Integer; b : Boolean; sn, s, t : String; anzleerzell : Integer; begin // [...] XLApp := CreateOleObject('Excel.Application'); try // Verstecke Excel bei der Ausführung XLApp.Visible := false; // Excel File öffnen XLApp.Workbooks.Open(AXLSFile); // Zugriff auf Datei XLSDatei := XLApp.Workbooks[ExtractFileName(AXLSFile)]; if FGetMode=fmGetAll then begin if FSheetN='0' then begin AnzSeiten := XLSDatei.Sheets.Count; VStart := 1; end else begin AnzSeiten := 0; VStart := FSheetN; end; b := true; AktSheet := VStart; while b do begin if terminated then exit; Sheet := XLSDatei.WorkSheets[AktSheet]; Sheet.Activate; sn := XLApp.ActiveSheet.Name; FGridX := 100; FGridY := 100; // Range einstellen RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[FGridX, FGridY]].Value; // Werte der einzelnen Zellen auslesen k := 1; anzleerzell := 0; repeat if terminated then exit; for r := 1 to FGridY do begin // ==> // in diesen 5 Zeilen habe ich mein Problem // ==> // Habe es auch schon mit VarIsEmpty versucht apa := RangeMatrix[K, R]; if (not VarIsClear(apa)) then s := RangeMatrix[K, R] else s := ''; // Diese Funktion füllt ein oder mehrere StringGrids mit den Werten aus den Zellen SendCallBackAll(r,k,s, FGridX, FGridY, XLApp.ActiveSheet.Name); end; Inc(k, 1); until k > FGridX; // RangeMatrix entleeren RangeMatrix := Unassigned; end; // [...] finally //[...] end; end; edit: ich habe mal folgendes abgeändert:
Delphi-Quellcode:
in
apa := RangeMatrix[K, R];
if (not VarIsClear(apa)) then s := RangeMatrix[K, R] else s := '';
Delphi-Quellcode:
Mit dem Erfolg, dass die Funktion zwar nicht abbricht, beim debuggen springt die Ausführung allerdings nicht in den Except-Block sondern direkt dahinter. Und da vorher nur das try..finally war sprang der wohl auch direkt dahinter, also ans Ende der Prozedur
s := '';
try apa := RangeMatrix[K, R]; s := RangeMatrix[K, R] except s := ''; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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 by Thomas Breitkreuz