Autor Beitrag
Seifriz
Hält's aus hier
Beiträge: 8

Win 7 - 64 Bit
Delphi 6 Prof., Delphi 2007 Win32
BeitragVerfasst: Mi 10.12.08 22:45 
Hallo,
ich lese über folgenden Code eine Zelle einer Exceltabelle ein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
  try
    Excel:=CreateOleObject('Excel.Application');
    Excel.Visible:=False;
  except
    ShowMessage('Excel konnte nicht gestartet werden !');
    Exit;
  end;

  // Exceldatei öffnen
  Excel.Workbooks.Open(eExcel.Text);

  // Excel-Arbeitsblatt wählen
  Excel.Worksheets.Item['Z'].Activate

  strTemp:=Excel.Cells[1,1];  //  <<<<--- EVariantError

Das funktioniert solange ein 'Wert' in der Excelzelle steht. Steht dort aber '#DIV/0!' oder '#WERT!' erhalte ich einen EVariantError.
Das verstehe ich auch - ist ja bereits ein Fehler in Excel :shock:
Wie kann ich solche Zellen übergehen bzw. mit einer Showmessage auf die fehlerhafte Zelle hinweisen.
Mit folgender Funktion
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function CT(Input: Variant): String;
begin
  try
    Result:=Input;
  except
    on EVariantError do
    begin
      showmessage('EVariantError');
      Result:='0';
    end;
  end;
end;

und dem Aufruf
ausblenden Delphi-Quelltext
1:
2:
3:
...
strTemp:=CT(Excel.Cells[1,1]);
...

bricht das Prog immer vor dem except Block ab.
Liegt wohl an der Zuweisung Result:=... :?:

Kann mir jemand ein Tipp geben?

Danke!
Seifriz Threadstarter
Hält's aus hier
Beiträge: 8

Win 7 - 64 Bit
Delphi 6 Prof., Delphi 2007 Win32
BeitragVerfasst: Mi 10.12.08 23:37 
Ola!
Ausserhalb der IDE macht das Prog was ich will! Das war eine Debugger-Exception. :oops:

Vielleicht hat aber jemand eine 'elegantere' Lösung? Mir scheint die nicht sehr professionell zu sein.

Grüße
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 11.12.08 00:01 
Hast du es schonmal mit Cells[].Value versucht? Vielleicht geht das.

Dass beim Debuggen die Exception angezeigt wird ist ja normal. Auch wenn diese danach abgefangen wird durch ein try..except. Du kannst die Anzeige bestimmter Exceptions aber auch beim Debuggen deaktivieren.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 11.12.08 00:11 
Was ist denn der Wert? null oder unassigned? Dann verwende VarToStr() für die Konvertierung zu String.
Seifriz Threadstarter
Hält's aus hier
Beiträge: 8

Win 7 - 64 Bit
Delphi 6 Prof., Delphi 2007 Win32
BeitragVerfasst: Do 11.12.08 00:44 
Hi,
so schnell komm ich garnicht mit testen nach..

AT jaenicke:
Cells[].Value kennt mein Delphi2007 nicht?!

AT delfiphan:
Nach meiner bescheidenen Erfahrung ist es eben weder NULL noch UNASSIGNED, dann könnte man es ja gut abfangen...
d.h. auch VarToStr führt zur einer Exception.

Danke für Eure Tipps
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: Do 11.12.08 00:59 
Hallo Seifriz,

Deine Fehlerbehandlung greift zu spät, da der Fehler schon in Excel auftritt, sollte er auch in Excel abgefangen werden.

Man kann in Excel mit IsError prüfen, ob ein Fehlerwert vorliegt. Ist das nicht der Fall soll der Wert in die Variable abgespeichert werden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Excel.Cells[1,1].Value:= '=10/0'// Fehler einbauen
  if not Excel.IsError(Excel.Cells[1,1].Value) then
  begin
    TestText:= Excel.Cells[1,1].Value;
  end else
  begin
    ShowMessage('Es ist ein Fehler aufgetreten!');
  end;
  ShowMessage(TestText);

Bis bald Chemiker
Seifriz Threadstarter
Hält's aus hier
Beiträge: 8

Win 7 - 64 Bit
Delphi 6 Prof., Delphi 2007 Win32
BeitragVerfasst: Do 11.12.08 10:34 
Hallo Chemiker,

danke für die Info. Ich habe da einiges noch nicht richtig durchschaut gehabt, was die Verbindung mit Excel angeht bzw. die Funktionen die man nutzen kann.
Eine Liste der Funktionen (z.B. IsError) finde ich sicher bei Excel und VBA.

Die Lösung gefällt mir! Werde sie nun in mein Prog einbinden.

Danke für Eure Hilfe!
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Di 10.02.09 10:11 
user profile iconSeifriz hat folgendes geschrieben Zum zitierten Posting springen:
Hi,
so schnell komm ich garnicht mit testen nach..

AT jaenicke:
Cells[].Value kennt mein Delphi2007 nicht?!

AT delfiphan:
Nach meiner bescheidenen Erfahrung ist es eben weder NULL noch UNASSIGNED, dann könnte man es ja gut abfangen...
d.h. auch VarToStr führt zur einer Exception.

Danke für Eure Tipps

Was ist der Typ des Variants? Kannst du es vielleicht mit if VarType(Input) = varError abfangen?