[英]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.