[英]OLE automation: How to check if a variant references an automation object
我想知道如何确定变量是否引用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)来完成此操作,但是我认为这种方法不够好。
您应该使用VarIsClear
进行此测试。
指示指定的变量是否具有未定义的值。 如果给定变量的值未定义,则VarIsClear返回true。 出于以下几种原因,可以不确定该值:
- 变量可能已将其值设置为“未分配”。
- Variant的值可以是已设置为nil(Delphi)或NULL(C ++)的接口类型。
- Variant可能是一个自定义变量,从其IsClear方法返回true。
在所有其他情况下,函数结果均为false。
注意 :请勿将未分配的变量与Null变量混淆。 仍分配Null变体,但其值为Null。 与未分配的变体不同,Null变体可以在表达式中使用,并且可以转换为其他类型的变体。
但是,我质疑是否需要它。 没有分配PptFile
怎么可能? 只有在对pptApp.Presentations.Open()
的调用失败时才会发生,并且会引发异常。 还是我误会了这一点? 目前,我看不到任何可以调用尚未分配PptFile
PptFile.SaveAs()
的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.