#c #excel #visual-c #vba
#c #excel #visual-c #vba
Вопрос:
Я пытаюсь прочитать некоторые значения из файла Excel. Для этого мне нужно знать последнюю строку каждого столбца. Для этого я использую функцию поиска. Но это приводит к ошибке во время выполнения. Я использую c . Вот этот код
Excel::_ApplicationPtr app;
::CoInitialize(NULL);
app.CreateInstance("Excel.Application");
Excel::_WorkbookPtr wbk = app->Workbooks->Open("Algo_Sample.xlsx"));
Excel::_WorksheetPtr sheet = wbk->Sheets->Item[1];
Excel::RangePtr range_Ptr = sheet->GetRange("A:A");
range_Ptr->Find("Subject","A1",Excel::xlValues,Excel::xlWhole,Excel::xlByRows,Excel::xlNext,false,false);
Я проверил с помощью отладчика, ошибка находится в последней строке. Это снимок файла Excel
Я буду очень благодарен человеку, который прольет свет на этот вопрос
Примечание: я использую Windows XP, Visual Studio 2008, office 2007, c .
Комментарии:
1. Фактические номера ошибок / сообщения всегда полезны. Вы ищете «sibject», но в вашей колонке есть «subjects». Это намеренно?
2. Также… .Find возвращает ссылку на диапазон (или ничего / Null, если значение не найдено), и вы ничего не устанавливаете для его возвращаемого значения.
3. @Tim Ах да. Но и в приведенных выше случаях это не должно приводить к ошибке во время выполнения.
4. @Tim Конкретных ошибок нет. Просто «приложение попросило среду выполнения завершить его необычным способом».
5. Вы пробовали присваивать возвращаемое значение чему-либо? Это устранило проблему?
Ответ №1:
Я не уверен насчет связи с C , но в Excel, если вы хотите назначить последнюю использованную строку определенного столбца, я использую это:
MyLastRowCount = Cells(Rows.Count, "A").End(xlUp).Row
Здесь переменной MyLastRowCount
присваивается номер строки последней использованной ячейки в столбце A.
Что он делает, так это переходит к последней доступной ячейке (A65536 для xl03 или A1048576 для xl07 / 10) в столбце A, а затем переходит к первой занятой ячейке снизу.
С уважением,
Роберт Илбринк
Ответ №2:
::Excel::RangePtr range = m_pObject->Cells->Find
(
pValue,
vtMissing,
::Excel::XlFindLookIn::xlValues,
::Excel::XlLookAt::xlPart,
::Excel::XlSearchOrder::xlByRows,
::Excel::XlSearchDirection::xlNext,
false,
false,
vtMissing
);