Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Excel - Vergleich führt zu Ungültiger Varianten Operation
Stecky2000 - Do 03.02.11 12:02
Titel: Excel - Vergleich führt zu Ungültiger Varianten Operation
Hallo,
ich hab mal wieder ein Problem und komme mit den durch die Suchfunktion gefundenen Dingen nicht klar, da sie auf mein Problem nicht ganz passen.
Ich habe folgenden Code
Delphi-Quelltext
1:
| If (Excel.Cells[StrToInt(V_Ini_Excel_9ProzentX), StrToInt(V_Ini_Excel_9ProzentY)] = 'X') then |
und genau da löst er die EVariantInvalidOpError aus.
Ich habe schon abgewandelt in
Delphi-Quelltext
1:
| If (Excel.Cells[StrToInt('27'), StrToInt('19')] = 'X') then |
und
Delphi-Quelltext
1:
| If (Excel.Cells[27, 19] = 'X') then |
Excel hab ich übrigens auf zwei verschiedene Arten deklariert:
mal so: Excel: OLEVariant;
und auch mal so: Excel: Variant;
Immer der gleiche Effekt.
Also insgesamt (gekürzt) so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var Excel: Variant;
begin
...
try excel := CreateOleObject('Excel.Application'); excel.visible := False; except ShowMessage('Excel konnte nicht gestartet werden !'); end;
Excel.DisplayAlerts:=False; Excel.Workbooks.Open(OpenDialog1.Filename);
If (Excel.Cells[StrToInt(V_Ini_Excel_9ProzentX), StrToInt(V_Ini_Excel_9ProzentY)] = 'X') or (Excel.Cells[StrToInt(V_Ini_Excel_9ProzentX), StrToInt (V_Ini_Excel_9ProzentY)] = 'x') then RadioGroup6.ItemIndex := 4;
... |
Die Variablen V_Ini_Excel_9ProzentX und V_Ini_Excel_9ProzentY sind übrigens String.
aber immer der gleiche Effekt.
Ich glaube nicht, dass ich da was am Code geändert hätte und das hat ja sonst immer funktioniert.
Habt Ihr einen Tipp?
bummi - Do 03.02.11 12:11
ich greife immer über Sheets zu ...
Delphi-Quelltext
1: 2: 3: 4: 5:
| Function TMSOLE.Cell(xpos,ypos:integer;sheet:String=''):Variant; begin if Length(Sheet)=0 then Result:=FExcel.Sheets[1].Cells[xpos,ypos] else Result:=FExcel.Worksheets[Sheet].Cells[xpos,ypos]; end; |
Stecky2000 - Do 03.02.11 12:15
Der Zugriff auf Excel ist ja eigentlich kein Problem, yumal es in der datei die ich ;ffne nur ein Sheet gibt.
Ich habe eine Prozedur mit der ich nach excel schreibe und diese mmit der ich aus Excel lese.
Die schreibende funktioniert noch wie zuvor, die zum Lesen löst beim Vergleich (ist Zellinhalt = X) diesen Fehler aus.
bummi - Do 03.02.11 13:12
so gehts ...
elundril - Do 03.02.11 13:24
Bzw über Cells[x,y].Value geht es auch soweit ich weiß, wenn du direkt zahlen vergleichen willst später mal. Und zwar aus dem grund weil dir Value ein Variant zurückliefert.
lg elundril
Bergmann89 - Do 03.02.11 14:04
Hey,
pack dir den Inhalt der Zelle vorher in ne String-Variable
Delphi-Quelltext
1: 2: 3: 4: 5:
| var str: String
str := Excel.Cells[StrToInt(V_Ini_Excel_9ProzentX), StrToInt(V_Ini_Excel_9ProzentY)]; If (str = 'X') then |
MfG Bergmann
bummi - Do 03.02.11 14:05
@Bergmann89
da bekommst Du nur eine Referenz, keinen String. Value oder Text sind richtig.
Stecky2000 - Fr 25.02.11 08:44
Sorry das ich mich so lange nicht gemeldet habe.
Ich wollte mich nur noch mal für die Tipps bedanken. Ich habe es mit .Text gemacht und es funktioniert.
Unter Delphi 7 ging es auch ohne, in Delphi 2010 braucht es das wohl.
Also, nochmals vielen Dank.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!