AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei XLS-Import

Ein Thema von DevilsCamp · begonnen am 22. Mär 2006
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Fehler bei XLS-Import

  Alt 22. Mär 2006, 10:16
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:
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='0then
      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;
Ich hoffe, mir kann jemand helfen.




edit:

ich habe mal folgendes abgeändert:
Delphi-Quellcode:
            apa := RangeMatrix[K, R];
            if (not VarIsClear(apa)) then
              s := RangeMatrix[K, R]
            else
              s := '';
in
Delphi-Quellcode:
            s := '';
            
            try
              apa := RangeMatrix[K, R];
              s := RangeMatrix[K, R]
            except
              s := '';
            end;
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
  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 21:17 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