gpt4 book ai didi

Excel Application.Windows.Count 返回 0

转载 作者:行者123 更新时间:2023-12-02 06:45:09 29 4
gpt4 key购买 nike

我使用 Windows 10、Delphi Berlin 和 Microsoft Office 2007。我尝试获取打开的 Excel 窗口的数量。当我下载 Excel 文件并打开它时,会运行一个单独的 Excel,因此一个 Excel 窗口中只存在一个工作簿。

我导入了Microsoft Office 12.0对象库并编写了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;

enter image description here

最佳答案

IDE 中的消息是因为您正在使用后期绑定(bind) COM。方法调用是在运行时调度的,只有在运行时您才能知道该方法是否存在。因此,编译器无法检查代码的有效性。您的代码很好,因为它执行正确,但后期绑定(bind) COM 的性质意味着 IDE 认为您的代码包含语法错误。使用后期绑定(bind) COM 时只需忽略它即可。

您可以切换到早期绑定(bind) COM,并使编译器能够检查代码的语法。

两种方法各有利弊。后期绑定(bind)通常可以产生更简单、更简洁的代码。但代价是当你只在运行时发现错误时会感到沮丧。

如果返回的值为零,那么我猜明显的结论是没有窗口。后期绑定(bind)代码正在创建 Excel 的新实例,但早期绑定(bind)代码正在附加到现有实例。要获取现有实例(如果有),请使用GetActiveOleObject

关于Excel Application.Windows.Count 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40438227/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com