excel - 在 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
告诉它在不显示的情况下打开它。
解决方案
推荐阅读
- python - “'str' 对象不可调用”。我想念的东西很简单吗?
- docker - 容器中非 root 用户的访问级别
- javascript - 如何增量构建一个数组树,其中每个数组只能有 1、2、4、8、16 或 32 个项目?
- javascript - 突出显示当前菜单项?
- azure - AAD 应用注册中已存在具有相同属性标识符 Uris 值的另一个对象
- api - 使用日期查询使用 GitHub API 搜索存储库
- c++ - 在 GLSL 着色器中使用多个纹理时,纹理会被覆盖
- python - 如何在python中以大写字母更改单词的第i个字母?
- javascript - 使用 jquery.validate.min.js 进行表单验证
- sql - 如何根据在另一个数据库中遇到的参数创建 SQL 数据库