Excel类型库/ Delphi 2009 /坏变量类型

时间:2009-04-14 12:59:20

标签: delphi excel com delphi-2009

我们刚刚从Delphi 2006更新了一个使用Excel类型库到Delphi 2009的应用程序。我发现现在几乎没有任何东西 - 几乎所有对Excel的调用都会产生一个消息“Bad variable type。”。例如,我们可以这样做:Sheet.Cells.Item [Row,Column] .Value:= Value,其中Sheet是ExcelWorksheet,Value是Variant。我们在堆栈中看到的下一件事是在Variants中调用_DispInvoke,然后调用ComObj。我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果Excel或Delphi版本发生了变化,我建议您重新创建/重新导入类型库。使用其他版本的TLB通常会产生这些问题。

答案 1 :(得分:2)

事实证明,我们有一个通用程序来设置格式的单元格的值:

procedure SetValue(aSheet: ExcelWorksheet; aRow, aCol: Integer; aValue: Variant)
begin
  aSheet.Cells.Item[aRow, aCol].Value := aValue;
end;

这失败了我提到的错误。如果我将其更改为:

procedure SetValue(aSheet: ExcelWorksheet; aRow, aCol: Integer; aValue: Variant)
var
  sValue: WideString;
begin
  sValue:= aValue;
  aSheet.Cells.Item[aRow, aCol].Value := sValue;
end;

对我而言,这表明Delphi 2009正在做一些不同的变体(至少比D2006还要好),这是COM不喜欢的东西,除非有人有更好的解释?无论如何,我很高兴暂时不顾这种解决方法。