首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Excel OLE是否可用的正确方法是什么?

检查Excel OLE是否可用的正确方法是什么?
EN

Stack Overflow用户
提问于 2013-02-22 13:45:26
回答 1查看 6.4K关注 0票数 12

我需要测试是否可以从我的程序中使用Excel OLE,因为它可以在没有Excel的情况下在PC上启动。网上的代码示例假设Excel已安装,但如果没有呢?

代码语言:javascript
复制
XLApp := CreateOleObject('Excel.Application');
try
  // Hide Excel
  XLApp.Visible := False;
  // Open the Workbook
  XLApp.Workbooks.Open(aPath);
  ...snip...
finally
  // Quit Excel
  if not VarIsEmpty(XLApp) then
  begin
    XLApp.Quit;
    XLAPP := Unassigned;
  end;
end;

如果安装了Excel,这是正确的代码吗?

代码语言:javascript
复制
//Try to create Excel OLE
try
  XLApp := CreateOleObject('Excel.Application');
except
  ShowMessage('Error opening Excel');
  Exit;
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-22 15:36:25

您可以使用基于Scalabium's tip的代码来检查Excel是否可用。或者类似这样的东西:

代码语言:javascript
复制
uses ComObj, ActiveX;

function IsObjectAvailable(const ClassName: string): Boolean;
var
  ClassID: TCLSID;
begin
  Result := Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), 
    ClassID));
end;

您还可以使用以下代码检查Excel是否正在运行:

代码语言:javascript
复制
function IsObjectActive(const ClassName: string): Boolean;
var
  ClassID: TCLSID;
  Unknown: IUnknown;
begin
  Result := False;
  if Succeeded(CLSIDFromProgID(PWideChar(WideString(ClassName)), ClassID)) then
    Result := Succeeded(GetActiveObject(ClassID, nil, Unknown));
end;

然后在某些程序或事件中:

代码语言:javascript
复制
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsObjectAvailable('Excel.Application') then 
    ShowMessage('Excel is available');
  if IsObjectActive('Excel.Application') then 
    ShowMessage('Excel is running');
end;
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15017672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档