1

我想知道如何确定变体是否引用了 OLE 自动化对象。

我正在将一些 Excel 图表导出到 Powerpoint。

我有这个代码:

var PptFile: Variant;

....

// PptFile _might_ be initialized:

PptFile:=pptApp.Presentations.Open(pptFilename);

// It depends on whether the export has items which need to be exported to 
// Powerpoint or not

....

// I would like to determine if PptFile does reference an OLE automated object or not
PptFile.SaveAs(excelFileName+'.pptx');

我知道,可以通过将代码的最后一行(使用 saveAs)放在 之间来完成try...except...end,但我觉得这种方法不够好。

我正在阅读关于VarIsEmpty, VarIsEmptyParam, Nothing , this question的内容,但我不确定。

4

1 回答 1

6

你应该使用VarIsClear这个测试。

指示指定的变体是否具有未定义的值。如果给定变体的值未定义,则 VarIsClear 返回 true。该值可能由于以下几个原因而未定义:

  • Variant 可能已将其值设置为未分配。
  • Variant 的值可能是已设置为 nil (Delphi) 或 NULL (C++) 的接口类型。
  • Variant 可能是从其 IsClear 方法返回 true 的自定义变体。

在所有其他情况下,函数结果为假。

注意:不要将未分配的变体与 Null 变体混淆。仍会分配 Null 变体,但具有 Null 值。与未分配的变体不同,Null 变体可以在表达式中使用,并且可以转换为其他类型的变体。


但是,我怀疑它是否需要。怎么可能PptFile没有分配?只有在调用pptApp.Presentations.Open()失败时才会发生这种情况,并且会引发异常。还是我误解了这一点?我目前看不到任何情况下您可以拨打尚未分配的PptFile.SaveAs()电话PptFile

于 2013-11-29T11:59:15.657 回答