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

C++: COM, OLE, ActiveX

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

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

21.05.2016, 18:52. Просмотров 1115. Ответов 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 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
22.05.2016, 21:18 #16
akrufar, у меня макрос вба при попытке исполнить ваш код на защищённом листе говорит что этого на таких листах делать нельзя
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 08:09  [ТС] #17
Цитата Сообщение от vxg Посмотреть сообщение
akrufar, у меня макрос вба при попытке исполнить ваш код на защищённом листе говорит что этого на таких листах делать нельзя
Странно. У меня свободно исполняет.
А есть тогда другой метод вычислить последнюю занятую строку и столбец в Excel на защищенном листе?
0
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
23.05.2016, 09:48 #18
Цитата Сообщение от akrufar Посмотреть сообщение
А есть тогда другой метод вычислить последнюю занятую строку и столбец в Excel на защищенном листе?
к своему огорчению за вас нашел этот метод в первой же строке поиска в гугл
Visual Basic
1
Cells(Rows.Count, 1).End(xlUp).Row
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 10:01  [ТС] #19
Недостаток в том, что надо явно указывать номер столбца, придется перебирать каждый отдельно. Так что не подходит. попробую другие методы
0
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
23.05.2016, 10:21 #20
Цитата Сообщение от akrufar Посмотреть сообщение
Недостаток в том, что надо явно указывать номер столбца
логика подсказывает что вы должны его знать или у вас документ неустановленной формы который распознает нейросеть)? тогда перебирайте все ячейки на листе) по ссылке прямо сказано что тот способ который вы применяли ранее не работает на защищенных листах
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 10:32  [ТС] #21
Нет. У меня есть много файлов. Необходимо их подгружать. У каждого файла свой формат (количество характеристик) на одну и ту же позицию. Необходимо автоматизировать. Вот поэтому именно по одному столбцу определение не подойдет. + есть позиции, у которых некоторые характеристики могут отсутствовать.
0
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
23.05.2016, 10:40 #22
Цитата Сообщение от akrufar Посмотреть сообщение
У каждого файла свой формат
какой бы формат не был у файла он известен. к примеру - у меня несколько файлов в каждом из которых список товаров конкретного магазина. списки конечно же разные но они имеют сходную структуру - первый столбец, первая строка заголовок, если строка пустая значит список кончился. вот я так и делаю - открываю файл и перебираю строки занося их в массив. как только встретил пустую - закрываю файл
1
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 12:48  [ТС] #23
Со столбцами понятно. Со строками сложнее. Не все характеристики бываю заполнены. Даже тоже наименование иногда отсутствует у некоторых поставщиков, поэтому может выпасть часть информации+при проверки каждого столбца и каждой строки уйдет большее время, чем если выделить сразу самую последнюю заполненную ячейку. У меня вот возникла идея, может быть с защищенного листа всю информацию копировать в новый документ и там проводить манипуляции. Не быстрее получится? + все ограничения будут сняты.

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

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

Добавлено через 1 минуту
на всякий случай вопрос - не нужно ли в формуле к количеству прибавлять номер столбца начала диапазона?
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
23.05.2016, 13:33  [ТС] #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;
Иначе если первые столбцы пустые, неверные данные на количество этих пустых столбцов будет показывать.
1
vxg
Модератор
3163 / 1966 / 221
Регистрация: 13.01.2012
Сообщений: 7,528
18.06.2016, 13:10 #26
akrufar, и че)?
0
akrufar
91 / 3 / 2
Регистрация: 19.05.2016
Сообщений: 38
18.06.2016, 13:16  [ТС] #27
Да не в ту тему отписался, а удалить сообщение не удалось, вот и забил 123 =) писал сюда: Ускорить работу с формированием запроса
Если есть идеи, отпишись =)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2016, 13:16
Привет! Вот еще темы с ответами:

Ошибка при работе с макросами 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...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.06.2016, 13:16
Ответ Создать тему
Опции темы

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