2017-02-07 22 views
1

我使用的.NET库Excel-DNA公开了Excel的C-API到C#代码。使用xlfGetDocument功能像这样(我特别希望ints):使用Excel C-API函数`xlfGetDocument`返回'最后一次使用的行/列'返回的值超出'实际使用的范围'

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; 

返回我rowLastrowFirst,有点超出了我的数据范围。根据Steve Dalton的书“使用C/C++中的Excel插件开发的财务应用程序”,该函数的'10'和'12'参数应该返回最后一个行/列的最后一行。但这种情况并非如此。

这是为什么?

从获得上述纸张的使用范围之后,我用Excel-DNA以获得实际的内容:

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

我怎样才能得到实际使用的范围,而不应用一个过滤器内容(似乎应该只是不必要的开销)?

回答

1

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

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

相关问题