2017-02-07 14 views
1

Я использую библиотеку .NET, Excel-DNA, которая предоставляет C-API Excel для кода 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; 

возвращает мне rowLast и rowFirst, который несколько выше моего диапазона данных. Согласно книге Стив Далтона «Финансовые приложения с использованием расширения надстроек Excel в C/C++» аргументы «10» и «12» для этой функции должны возвращать последние USED col/row. Но это не так.

Почему это?

После получения от использованного-диапазона с выше листом, я использую Excel-ДНК, чтобы получить фактическое содержание:

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

Как я могу получить фактический используемый диапазон без применения фильтра к содержимому (похоже, это должно быть просто лишними накладными расходами)?

ответ

1

Поскольку Excel использует разреженную матричную схему хранения, он считает, что последняя используемая строка/столбец является строкой и столбцом последней ячейки, которая содержит данные или отформатирована (или содержит данные или форматирование).

Возможно, вам лучше использовать интерфейс COM, чтобы использовать Range.Find *, если вы хотите использовать реальный последний использованный диапазон.