使用 Excel C-API 函数 `xlfGetDocument` returns 值超过 'actual used range' 请求 'last used row/col'

Asking for the 'last used row/col' with Excel C-API function `xlfGetDocument` returns values past the 'actual used range'

我正在使用 .NET 库 Excel-DNA,它将 Excel 的 C-API 暴露给 C# 代码。像这样使用 xlfGetDocument 函数(我特别想要 ints):

int rowLast = ((int)(double)XlCall.Excel(XlCall.xlfGetDocument, 10, sheetName) > 0) ? (int)(double)XlCall.Excel(XlCall.xlfGetDocument, 10, sheetName) - 1 : 0;
int colLast = ((int)(double)XlCall.Excel(XlCall.xlfGetDocument, 12, sheetName) > 0) ? (int)(double)XlCall.Excel(XlCall.xlfGetDocument, 12, sheetName) - 1 : 0;

return给我一个rowLast和一个rowFirst有点超出我的数据范围。根据 Steve Dalton 的书 "Financial Applications using Excel add-in development in C/C++",此函数的 '10' 和 '12' 参数应该 return 最后 USED col/row。但事实并非如此。

这是为什么?

根据上面的 sheet 的使用范围,我使用 Excel-DNA 来获取实际内容:

contentReference = new ExcelReference(0, rowLast, 0, colLast);
contents = (object[,])contentReference.GetValue();

如何在不对内容应用过滤器的情况下获得实际使用的范围(看起来这应该只是不必要的开销)?

因为 Excel 使用稀疏矩阵存储方案,它认为最后使用的 row/column 是最后一个包含数据或被格式化(或确实包含数据或格式化)的单元格的行和列).

如果您想要真正的上次使用范围,您最好使用 COM 接口来执行 Range.Find *。