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

C++: COM, OLE, ActiveX

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

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

21.05.2016, 18:52. Просмотров 1097. Ответов 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 защищен. На незащищенном листе все нормально. Что делаю не так? может есть другой метод?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2016, 18:52     Ошибка при работе с Excel
Посмотрите здесь:
C++ COM Ошибка COM (Excel) без использования MFC, ATL
Задание диапазона ячеек при объединении (OLE-сервер Excel) C++ COM
Excel 2007 и Win32 Console application. Не выводятся в ячейки Excel данные из приложения C++ COM
C++ COM Cpp builder-Ole-Excel. WideString пишет в ячейку Excel минус перед нулем
Ошибка при выводе в Word C++ COM
C++ COM Ошибка при компилировании программы
C++ COM Ошибка компиляции при подключении TLB
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
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
Недостаток в том, что надо явно указывать номер столбца, придется перебирать каждый отдельно. Так что не подходит. попробую другие методы
vxg
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
23.05.2016, 10:21     Ошибка при работе с Excel #20
Цитата Сообщение от akrufar Посмотреть сообщение
Недостаток в том, что надо явно указывать номер столбца
логика подсказывает что вы должны его знать или у вас документ неустановленной формы который распознает нейросеть)? тогда перебирайте все ячейки на листе) по ссылке прямо сказано что тот способ который вы применяли ранее не работает на защищенных листах
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 10:32  [ТС]     Ошибка при работе с Excel #21
Нет. У меня есть много файлов. Необходимо их подгружать. У каждого файла свой формат (количество характеристик) на одну и ту же позицию. Необходимо автоматизировать. Вот поэтому именно по одному столбцу определение не подойдет. + есть позиции, у которых некоторые характеристики могут отсутствовать.
vxg
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
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
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
18.06.2016, 13:10     Ошибка при работе с Excel #26
akrufar, и че)?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2016, 13:16     Ошибка при работе с Excel
Еще ссылки по теме:
Ошибка при работе с Excel C#
C# Ошибка при работе с excel
Ошибка при работе с Excel C# WPF
Ошибка при работе с макросами Excel MS Excel
Странная ошибка при работе с Excel C++ Builder

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

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

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