我想知道如何确定变量是否引用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');
我知道,可以通过在try...except...end
之间放置代码的最后一行(使用saveAs)来完成,但我觉得这种方法不够好。
我正在阅读有关VarIsEmpty
,VarIsEmptyParam
,Nothing,this question的内容,但我对此并不确定。
答案 0 :(得分:6)
您应该使用VarIsClear
进行此测试。
指示指定的变量是否具有未定义的值。 如果给定变量的值未定义,则VarIsClear返回true。该 由于以下几个原因,值可能未定义:
- Variant可能已将其值设置为“未分配”。
- Variant的值可能是已设置为nil(Delphi)或NULL(C ++)的接口类型。
- Variant可以是从其IsClear方法返回true的自定义变体。
在所有其他情况下,函数结果为false。
注意:不要将未分配的变体与Null变体混淆。仍然分配了Null变量,但其值为Null。不像 未分配的变体,Null变体可以在表达式中使用并且可以 转换为其他类型的变种。
但是,我怀疑是否需要它。怎么可能没有分配PptFile
?只有在对pptApp.Presentations.Open()
的调用失败时才会发生这种情况,这会引发异常。或者我误解了这个?目前,我无法看到您可以接听PptFile.SaveAs()
来自PptFile
尚未分配的电话的任何情况。