【问题标题】:Excel type library / Delphi 2009/ bad variable typeExcel 类型库/Delphi 2009/错误的变量类型
【发布时间】:2010-10-19 08:18:06
【问题描述】:

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

【问题讨论】:

    标签: delphi excel com delphi-2009


    【解决方案1】:

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

    【讨论】:

    • 我们以前使用 Delphi 2006 和 2009 附带的 Office XP 示例导入,这对于 Excel 2000 - 2007 似乎工作正常(对于我们如何使用它)。无论如何,我现在有重新导入类型库并得到完全相同的问题。
    【解决方案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 不喜欢的,除非有人有更好的解释?无论如何,我很乐意暂时使用这种解决方法。

    【讨论】:

    • 变体中的值是什么类型?看起来这将创建 COM 需要的字符串类型的新变体。也许您的旧代码正在传递 COM 变体不支持的 ANSIString?
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多