Форум программистов, компьютерный форум CyberForum.ru

Ошибка при работе с Excel - C++ COM

Восстановить пароль Регистрация
 
 
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 18:52     Ошибка при работе с Excel #1
Определяю количество занятых ячеек (ячеек с информацией) в столбце файл-Excel, точнее номер последнего занятого столбца. При выполнении следующей команды:
C++
1
2
3
4
5
   //Активация последней известной ячейки
   v_Var_Sheet.OlePropertyGet("Cells").OlePropertyGet("SpecialCells", 11).OleProcedure("Activate");
 
   //Узнать номер последнего известного столбца
   int i_ColLast = v_Var_Excel.OlePropertyGet("ActiveCell").OlePropertyGet("Column");
возникает ошибка при выполнении первой строки, если лист в Excel защищен. На незащищенном листе все нормально. Что делаю не так? может есть другой метод?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 10:32  [ТС]     Ошибка при работе с Excel #21
Нет. У меня есть много файлов. Необходимо их подгружать. У каждого файла свой формат (количество характеристик) на одну и ту же позицию. Необходимо автоматизировать. Вот поэтому именно по одному столбцу определение не подойдет. + есть позиции, у которых некоторые характеристики могут отсутствовать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,489
23.05.2016, 10:40     Ошибка при работе с Excel #22
Цитата Сообщение от akrufar Посмотреть сообщение
У каждого файла свой формат
какой бы формат не был у файла он известен. к примеру - у меня несколько файлов в каждом из которых список товаров конкретного магазина. списки конечно же разные но они имеют сходную структуру - первый столбец, первая строка заголовок, если строка пустая значит список кончился. вот я так и делаю - открываю файл и перебираю строки занося их в массив. как только встретил пустую - закрываю файл
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 12:48  [ТС]     Ошибка при работе с Excel #23
Со столбцами понятно. Со строками сложнее. Не все характеристики бываю заполнены. Даже тоже наименование иногда отсутствует у некоторых поставщиков, поэтому может выпасть часть информации+при проверки каждого столбца и каждой строки уйдет большее время, чем если выделить сразу самую последнюю заполненную ячейку. У меня вот возникла идея, может быть с защищенного листа всю информацию копировать в новый документ и там проводить манипуляции. Не быстрее получится? + все ограничения будут сняты.

Добавлено через 1 час 58 минут
C++
1
int i_ColLast = v_Var_Excel.OlePropertyGet("ActiveSheet").OlePropertyGet("UsedRange").OlePropertyGet("Columns").OlePropertyGet("Count")
Работает отлично! Даже на защищенном листе. vxg спасибо за терпение! =)
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,489
23.05.2016, 12:58     Ошибка при работе с Excel #24
Цитата Сообщение от akrufar Посмотреть сообщение
при проверки каждого столбца и каждой строки уйдет большее время
если вы их считываете в программу я не особо вижу где тут время дополнительное будет да еще и большое - оно возникнет из за if (!s.length()) break ?

Добавлено через 2 минуты
Цитата Сообщение от akrufar Посмотреть сообщение
Даже на защищенном листе
отличный выход из положения, будем знать

Добавлено через 1 минуту
на всякий случай вопрос - не нужно ли в формуле к количеству прибавлять номер столбца начала диапазона?
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 13:33  [ТС]     Ошибка при работе с Excel #25
Цитата Сообщение от vxg Посмотреть сообщение
на всякий случай вопрос - не нужно ли в формуле к количеству прибавлять номер столбца начала диапазона?
Лучше делать вот так:

C++
1
2
3
4
5
6
int i_ColLast = v_Var_Excel.OlePropertyGet("ActiveSheet").
         OlePropertyGet("UsedRange").OlePropertyGet("Column") +
      v_Var_Excel.OlePropertyGet("ActiveSheet").
         OlePropertyGet("UsedRange").OlePropertyGet("Columns").
         OlePropertyGet("Count") -
      1;
Иначе если первые столбцы пустые, неверные данные на количество этих пустых столбцов будет показывать.
vxg
Модератор
 Аватар для vxg
2723 / 1734 / 172
Регистрация: 13.01.2012
Сообщений: 6,489
18.06.2016, 13:10     Ошибка при работе с Excel #26
akrufar, и че)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2016, 13:16     Ошибка при работе с Excel
Еще ссылки по теме:

C++ COM Ошибка COM (Excel) без использования MFC, ATL
C++ COM Ошибка при выводе текста в doc средствами OLE
Задание диапазона ячеек при объединении (OLE-сервер Excel) C++ COM
Ошибка при выводе в Word C++ COM
C++ COM Работа в Excel из VS

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
18.06.2016, 13:16  [ТС]     Ошибка при работе с Excel #27
Да не в ту тему отписался, а удалить сообщение не удалось, вот и забил 123 =) писал сюда: Ускорить работу с формированием запроса
Если есть идеи, отпишись =)
Yandex
Объявления
18.06.2016, 13:16     Ошибка при работе с Excel
Ответ Создать тему
Опции темы

Текущее время: 02:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru