Как использовать функцию «Найти» в программировании Excel?

#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
    );