Excel Application.Windows.Count返回0

我使用Windows 10,delphi柏林和Microsoft Office 2007.我尝试获取打开的Excel窗口的数量。 当我下载Excel文件并打开它时,将会运行一个分离的Excel,因此只有一个工作簿存在于一个Excel窗口中。

我导入了Microsoft Office 12.0 Object Library并编写了2个程序。 Button1Click适用于tExcelApplication,Button2Click适用于CreateOleObject('excel.application')。 我运行Excel后,前者效果很好,但Count只是在编辑器中被识别为错误,后者返回0。

我如何删除恼人的错误信息或让_Excel工作?

type TForm1 = class(TForm) ExcelApplication1: TExcelApplication; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; procedure TForm1.Button1Click(Sender: TObject); begin Button1.Caption := IntToStr(ExcelApplication1.Windows.Count); end; procedure TForm1.Button2Click(Sender: TObject); var _Excel: Variant; begin _Excel := CreateOleObject('excel.application'); Button2.Caption := _Excel.windows.count; end; 

在这里输入图像说明

IDE中的消息是因为您正在使用延迟绑定的COM。 方法调用在运行时调度,只有在运行时才会发现方法是否存在。 因为编译器不能检查你的代码的有效性。 你的代码很好,因为它正确执行,但是晚期COM的本质意味着IDE认为你的代码包含语法错误。 使用延迟绑定的COM时,您只需要忽略它。

你可以切换到早期绑定的COM,让编译器能够检查你的代码的语法。

这两种方法都有优点和缺点。 后期通常可以产生更简单和更简洁的代码。 但是当你只是在运行时发现你的错误的时候,是以挫折为代价的。

如果返回的值是零,那么我想明显的结论是没有窗口。 后期绑定代码正在创buildExcel的新实例,但是早期绑定代码将附加到现有实例。 要获得现有的实例,如果有,使用GetActiveOleObject