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

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
 
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
#1

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

21.05.2016, 18:52. Просмотров 1079. Ответов 26
Метки нет (Все метки)

Определяю количество занятых ячеек (ячеек с информацией) в столбце файл-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 защищен. На незащищенном листе все нормально. Что делаю не так? может есть другой метод?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 20:20     Ошибка при работе с Excel #2
Цитата Сообщение от akrufar Посмотреть сообщение
Что делаю не так?
то что вы делаете дает ли эксель сделать руками? дает ли он это сделать в макросе на вба? если нет - очевидно это нельзя сделать.
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 20:23  [ТС]     Ошибка при работе с Excel #3
Да, дает. Проверял. Код:
ActiveCell.SpecialCells(xlLastCell).Select

Пробовал вместо Activate писать Select. Тоже не помогло
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 20:32     Ошибка при работе с Excel #4
akrufar, руками дает а в вба нет? может вы в вба пишите не то что делаете руками? через запись макроса пробовали?
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 20:37  [ТС]     Ошибка при работе с Excel #5
Цитата Сообщение от vxg Посмотреть сообщение
akrufar, руками дает а в вба нет? может вы в вба пишите не то что делаете руками? через запись макроса пробовали?
Да, через макросы дает. И руками тоже дает (ctrl+end). Все получается. А через Си не дает

Код VBA как раз из макроса скопировал (ActiveCell.SpecialCells(xlLastCell).Select)
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 20:45     Ошибка при работе с Excel #6
Цитата Сообщение от akrufar Посмотреть сообщение
Код VBA как раз из макроса скопировал
ничуть ваш код на этот код не похож. по идее там
C++
1
v_Var_Excel.OlePropertyGet("ActiveCell").OleFunction("SpecialCells", xlLastCell /*надо глядеть какое это число*/).OleProcedure/*а может функция надо глядеть*/("Select")
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 20:50  [ТС]     Ошибка при работе с Excel #7
xlLastCell = 11. OleProcedure("Select") пробовал, разницы нет.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 20:52     Ошибка при работе с Excel #8
Цитата Сообщение от akrufar Посмотреть сообщение
разницы нет
а как с первым куском? у вас там не активцелл а просто целлс
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 20:58  [ТС]     Ошибка при работе с Excel #9
Цитата Сообщение от vxg Посмотреть сообщение
а как с первым куском? у вас там не активцелл а просто целлс
Тогда билдер ругается и говорит EOleSysError with message "Неизвестное имя" и указывает на эту строку
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 21:06     Ошибка при работе с Excel #10
akrufar, очевидно вы не у того объекта её запрашиваете - вот во второй строке он же не ругается?
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 21:11  [ТС]     Ошибка при работе с Excel #11
Разобрался, надо немного исправить код на такой:
C++
1
2
v_Var_Excel.OlePropertyGet("ActiveCell").OlePropertyGet("SpecialCells", 11).
      OleProcedure("Select");
Тогда все запускается, но с защищенным листом все также, не работает:
EOleSysError with message "Ошибка"

Добавлено через 2 минуты
А еще вот на этой строке стопорится и стрелку показывает при выводе этой ошибки:
C++
1
return OlePropertyGet(name, static_cast<TAutoArgsBase*>(&args));
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 21:33     Ошибка при работе с Excel #12
akrufar, если работает в вба то работает и тут иного сложно представить спешиалцелл это точно свойство-массив или функция?
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 21:38  [ТС]     Ошибка при работе с Excel #13
Цитата Сообщение от vxg Посмотреть сообщение
akrufar, если работает в вба то работает и тут иного сложно представить
Самое интересное, что оно работает на простых листах, но не на защищенных.

Цитата Сообщение от vxg Посмотреть сообщение
спешиалцелл это точно свойство-массив или функция?
Вот этот вопрос я не понял. В VBA я не силен. Начинающий. Вычитал, что ActiveCell возвращает диапазон ячеек. А судя по тому как макрос работает SpecialCells с 11 кодом выдает только одну ячейку.
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
21.05.2016, 21:52     Ошибка при работе с Excel #14
akrufar, нажмите в вба ф2 полазайте по его объектам. Если вызовы одинаковые то действие кода вба должно быть таким же как на C++ - там чудес нет и скрытых тайн
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
22.05.2016, 15:48  [ТС]     Ошибка при работе с Excel #15
А можете данный код запустить у себя на машине? Используя файл с защищенным листом. может опять проблема на стороне моей среды разработки?
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
22.05.2016, 21:18     Ошибка при работе с Excel #16
akrufar, у меня макрос вба при попытке исполнить ваш код на защищённом листе говорит что этого на таких листах делать нельзя
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 08:09  [ТС]     Ошибка при работе с Excel #17
Цитата Сообщение от vxg Посмотреть сообщение
akrufar, у меня макрос вба при попытке исполнить ваш код на защищённом листе говорит что этого на таких листах делать нельзя
Странно. У меня свободно исполняет.
А есть тогда другой метод вычислить последнюю занятую строку и столбец в Excel на защищенном листе?
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
23.05.2016, 09:48     Ошибка при работе с Excel #18
Цитата Сообщение от akrufar Посмотреть сообщение
А есть тогда другой метод вычислить последнюю занятую строку и столбец в Excel на защищенном листе?
к своему огорчению за вас нашел этот метод в первой же строке поиска в гугл
Visual Basic
1
Cells(Rows.Count, 1).End(xlUp).Row
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 10:01  [ТС]     Ошибка при работе с Excel #19
Недостаток в том, что надо явно указывать номер столбца, придется перебирать каждый отдельно. Так что не подходит. попробую другие методы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2016, 10:21     Ошибка при работе с Excel
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3068 / 1870 / 196
Регистрация: 13.01.2012
Сообщений: 7,120
23.05.2016, 10:21     Ошибка при работе с Excel #20
Цитата Сообщение от akrufar Посмотреть сообщение
Недостаток в том, что надо явно указывать номер столбца
логика подсказывает что вы должны его знать или у вас документ неустановленной формы который распознает нейросеть)? тогда перебирайте все ячейки на листе) по ссылке прямо сказано что тот способ который вы применяли ранее не работает на защищенных листах
Yandex
Объявления
23.05.2016, 10:21     Ошибка при работе с Excel
Ответ Создать тему
Опции темы

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