Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++: COM, OLE, ActiveX

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

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

21.05.2016, 18:52. Просмотров 1196. Ответов 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 защищен. На незащищенном листе все нормально. Что делаю не так? может есть другой метод?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2016, 18:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при работе с Excel (C++ COM):

Ошибка "неопределенная ссылка" при работе с std::thread - C++
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, "неопределенная ссылка " . К примеру: #include...

Ошибка COM (Excel) без использования MFC, ATL - C++ COM
Доброго времени суток! Я занимаюсь разработкой приложения, которое выгружает определенные данные из БД в файл XLS (уже отформатирован,...

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

Ошибка при работе с Excel - C# WPF
ошибка Добавлено через 27 секунд private void button3_Click_1(object sender, RoutedEventArgs e) { excelapp...

Ошибка при работе с Excel - C#
Программа взаимодействует с экселем. Если я правильно понял, у меня не подключена какая-то библиотека, потому что данный проект работал,...

Ошибка при работе с excel - C#
Нужно прочитать значение из ячейки. Например 1,1 (A1). Возникает ошибка -------------- Исключение из HRESULT: 0x800A03EC ...

26
vxg
Модератор
3199 / 2002 / 230
Регистрация: 13.01.2012
Сообщений: 7,751
21.05.2016, 20:20 #2
Цитата Сообщение от akrufar Посмотреть сообщение
Что делаю не так?
то что вы делаете дает ли эксель сделать руками? дает ли он это сделать в макросе на вба? если нет - очевидно это нельзя сделать.
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
21.05.2016, 20:23  [ТС] #3
Да, дает. Проверял. Код:
ActiveCell.SpecialCells(xlLastCell).Select

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

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

Цитата Сообщение от vxg Посмотреть сообщение
спешиалцелл это точно свойство-массив или функция?
Вот этот вопрос я не понял. В VBA я не силен. Начинающий. Вычитал, что ActiveCell возвращает диапазон ячеек. А судя по тому как макрос работает SpecialCells с 11 кодом выдает только одну ячейку.
0
vxg
Модератор
3199 / 2002 / 230
Регистрация: 13.01.2012
Сообщений: 7,751
21.05.2016, 21:52 #14
akrufar, нажмите в вба ф2 полазайте по его объектам. Если вызовы одинаковые то действие кода вба должно быть таким же как на C++ - там чудес нет и скрытых тайн
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
22.05.2016, 15:48  [ТС] #15
А можете данный код запустить у себя на машине? Используя файл с защищенным листом. может опять проблема на стороне моей среды разработки?
0
22.05.2016, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2016, 15:48
Привет! Вот еще темы с ответами:

Ошибка при работе с макросами Excel - MS Excel
Здравствуйте! При работе в Excel с толкнулся с такой ошибкой: Compile error in hidden module: Лист1 помогите пожалуйста разобраться...

Ошибка при работе с Excel файлом - AnyLogic
В модели расположен эксель файл с именем GIS и функция которая должна с ним работать. В ней следующий код: GIS.readFile(); y=0; o=0; ...

Странная ошибка при работе с Excel - C++ Builder
Пытаюсь создать Excel файл и записать в него ячейки но при компиляции программы получаю совершенно не понятную мне ошибку int i; ...

Странная ошибка при работе с Excel - Delphi
В общем, имеется такая процедура конвертации XLS в CSV (даже не спрашивайте, зачем мне это нужно): procedure...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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