首页 > 解决方案 > 在 Excel 365 中使用 Delphi 中的 ExcelSession.Workbook.Open 会导致工作表出现

问题描述

给出一段简单的代码来打开 Excel 工作簿并计算使用的列和行:

procedure GetWorksheetSize(const AFilename: String; var AUsedColumns, AUsedRows: Integer);
var
  ExcelSession, ExcelWorkbook, ExcelSheet: Variant;
begin
  ExcelSession := CreateOLEObject('Excel.Application');
  ExcelSession.Visible := false;
  ExcelSession.UserControl := false;
  ExcelSession.Workbooks.Open(AFilename);
  ExcelWorkbook := ExcelSession.Workbooks[1];
  ExcelSheet := ExcelWorkbook.ActiveSheet;
  AUsedColumns := ExcelSheet.UsedRange.Columns.Count;
  AUsedRows := ExcelSheet.UsedRange.Rows.Count;
  ExcelWorkbook.Close;
  ExcelSession.Quit;
  ExcelSession := UnAssigned;
  ExcelWorkbook := UnAssigned;
  ExcelSheet := UnAssigned;
end;

不管我是用Delphi 2005, XE2 还是 10.3写的,结果都是一样的;对于Excel 2013、2016 和 2019,该过程会在用户没有看到工作簿的情况下填写参数。对于Excel 365,工作簿会短暂出现(没有Excel应用程序窗口/功能区),然后消失。

有谁知道阻止工作簿出现的方法?没有参数Workbooks.Open告诉它在不显示的情况下打开它。

标签: exceldelphioffice365

解决方案


推荐阅读