저는 Windows 10, Delphi Berlin 및 Microsoft Office 2007을 사용합니다. 열린 Excel 창 수를 얻으려고합니다. Excel 파일을 다운로드하여 열 때 별도의 Excel이 실행되므로 Excel 창 하나에 하나의 통합 문서 만 존재합니다.Excel Application.Windows.Count는 0을 반환합니다.
Microsoft Office 12.0 Object Library를 가져 와서 2 개의 절차를 작성했습니다. Button1Click은 tExcelApplication에서 작동하고 Button2Click은 CreateOleObject ('excel.application')에서 작동합니다. Excel을 실행 한 후 전자는 제대로 작동하지만 카운트는 편집기에서 오류로 인식되고 후자는 0을 반환합니다.
어떻게 작동합니까? 오류 메시지를 제거하거나 _Excel이 작동합니까? 늦게 바인딩 COM을 사용하고 있기 때문에
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;
동일한 상황에서 두 절차는 다른 반환 값을 생성합니다. –
질문의 두 번째 부분은 늦은 바운드 코드가 0을 반환하는 이유입니다. 아니면 초기 바인딩 된 코드가 0을 반환합니까? 당신은 정말로 창문이 있고 그 엑셀이 틀린 가치를 부여하는지 100 % 확실합니까? 믿기 어려워 보입니다. –
@JOS GetActiveOleObject를 시도해보십시오. 새로운 Excel 프로세스를 시작할 수도 있습니다. –