Autor Beitrag
awzvm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 02.11.09 16:17 
Hallo Zusammen,

ich habe folgenden Fehler beim Lesen einer Zelle, in der eine Zahl z.B. 60 steht.
Es erscheint die Fehlermeldung: "Variante des Typs (OleStr) konnte nicht in Typ (Double) konvertiert werden."

Kann mir da einer helfen, wie ich diesen Fehler abstelle? Der Fehler erscheint an der markierten Stelle

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
const
    xlCellTypeLastCell = $0000000B;
var excel, Sheet: OLEVariant;
    RangeMatrix: Variant;
    x, y, k: Integer;
    Datei:Textfile;
    buffer:string;
    spalte,zeile,endPos,startPos,i:integer;
begin

 ..
    // Create Excel-OLE Object
    try
      excel := CreateOleObject('Excel.Application');
    except
      ShowMessage('Excel konnte nicht gestartet werden!');
      Exit;
    end;


    try
      excel.Visible := False;
      excel.Workbooks.Open(OpenDialog_V.FileName);
      Sheet := excel.Workbooks[ExtractFileName(OpenDialog_V.FileName)].WorkSheets[1];

      Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

      RangeMatrix := excel.Range['A1', excel.Cells.Item[X, Y]].Value;

      ShowMessage(RangeMatrix[12]);  // <---------------------------------- hier erscheint Fehler (bei Text geht es)
  
      // Unassign the Delphi Variant Matrix
      RangeMatrix := Unassigned;

    finally
      // Quit Excel
      if not VarIsEmpty(excel) then
      begin
        excel.DisplayAlerts := False;
        excel.Quit;
        excel := Unassigned;
        Sheet := Unassigned;
      end;
    end;


Danke.
PreMarT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 57

Work: Win XP ; Home: Win Vista 64-Bit

BeitragVerfasst: Mo 02.11.09 18:15 
Hmm ich find du machst es dir echt schwer, willst du nur eine Zelle abfragen?

dann mach doch sowas

ausblenden Delphi-Quelltext
1:
ShowMessage(FloatToStr(Sheet.Cells.Item[Zeile1,Spalte2].Value);					


oder hab ich dich falsch verstanden?
awzvm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 03.11.09 13:02 
Hallo,

ja, das stimmt, ich lese eigentlich immer nur eine Zelle aus.

Mit deinem Vorschlag geht es, aber auch nur, wenn ich die Zellen einzeln auslese:
ausblenden Delphi-Quelltext
1:
2:
3:
        s1:=Sheet.Cells.Item[k,1].Value;
        s2:=Sheet.Cells.Item[k,2].Value;
        ListBox_Artieklstamm_AM.Items[zeile-1]:=s1 + '@' + s2;


Wenn diese direkt hintereinander ausgelesen werden, so erscheint der Fehler wieder:
ausblenden Delphi-Quelltext
1:
ListBox_Artieklstamm_AM.Items[zeile-1]:=Sheet.Cells.Item[k,1].Value + '@' + Sheet.Cells.Item[k,2].Value;					


Aber, da ich sie nun einzeln auslese, funktioniert es.

DANKE!
PreMarT
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 57

Work: Win XP ; Home: Win Vista 64-Bit

BeitragVerfasst: Di 03.11.09 16:31 
Als was hast du denn dein s1 und s2 deklariert?

wenn du es hintereinander machen willst musst du es in ein String umwandeln

also immer FloatToStr(.....) davor packen.