【问题标题】:Asking for the 'last used row/col' with Excel C-API function `xlfGetDocument` returns values past the 'actual used range'使用 Excel C-API 函数“xlfGetDocument”请求“最后使用的行/列”返回超出“实际使用范围”的值
【发布时间】:2017-02-10 22:51:18
【问题描述】:

我正在使用 .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;

返回一个rowLast 和一个rowFirst,这有点超出我的数据范围。根据 Steve Dalton 的《在 C/C++ 中使用 Excel 插件开发的财务应用程序》一书,此函数的 '10' 和 '12' 参数应返回最后一个 USED col/row。但事实并非如此。

这是为什么?

根据上面一张表的使用范围,我正在使用 Excel-DNA 来获取实际内容:

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

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

【问题讨论】:

    标签: c# excel excel-dna


    【解决方案1】:

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

    如果你想要真正的最后使用的范围,你最好使用 COM 接口来做 Range.Find *。

    【讨论】:

      猜你喜欢
      • 2013-06-29
      • 2016-03-09
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多