136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
1 | |
Чтение/запись в Excel с COM OLE C++24.01.2019, 21:21. Показов 57360. Ответов 71
Метки нет (Все метки)
Здравствуйте,
Подскажите пожалуйста, есть ли у кого пример кода чтения и записи данных из/в откртый ексель файл с помощью COM/OLE на чистом С++. Есть микрософтовский пример: https://support.microsoft.com/... -or-import Он создает ексель файл и записывает в него данные, но как записать данные в уже открытый ексель, как этот ексель файл отловить, такого примера нет, а доработать/изменить микрософтовский примера под свою задачу, для меня на данный момент, к сожалению совершенно не возможно, настолько там все сложно. Может кто нибудь делал нечто подобное.
0
|
24.01.2019, 21:21 | |
Ответы с готовыми решениями:
71
Cpp builder-Ole-Excel. WideString пишет в ячейку Excel минус перед нулем Общение с Excel через OLE OLE. Как переименовать созданный файл в Excel.Application? Задание диапазона ячеек при объединении (OLE-сервер Excel) |
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|||||||||||
22.02.2019, 20:18 [ТС] | 21 | ||||||||||
Простым опытным путем выяснил, что:
0
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,415
|
|
22.02.2019, 20:23 | 22 |
Optimus11, способ плохой. Сделайте то что хотите в VBA - там можно и список функций и свойств посмотреть и справку по ним почитать - потом перенесите в C++
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
||||||
22.02.2019, 20:29 [ТС] | 23 | |||||
Прошу прощение, решил самым простым способом:
PS: Мне смотреть формат ячейки ексель нужно для того, что, когда я "читаю" значения из екселя в виде текста BSTR и если в этот момент в ясейке ексель находится не текст, а число, то происходит краш приложения, поэтому и хочу опредеять формат ячейки, если текстовый, то применять BSTR, если числовой, то LONG, а потом уже ковентировать в string/
0
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,415
|
|||||||||||
23.02.2019, 21:09 | 24 | ||||||||||
Сообщение было отмечено Optimus11 как решение
Решение
Optimus11, еще раз - это плохой способ - просто потому что значение хранимое в ячейке это совсем не формат ячейки. как быть?
1) запускаете Excel 2) включаете запись макроса 3) делаете нужные вам действия, например, устанавливаете формат ячейки в текстовый 4) выключаете запись макроса 5) идете в VBA (Alt + F11), открываете модуль в который записался макрос и читаете его содержимое, у меня оно примерно такое:
Добавлено через 1 час 25 минут Optimus11, если проблема именно в том что не понятно что лежит в ячейке то можно поступать как то так
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
27.02.2019, 21:29 [ТС] | 25 |
vxg, Огромное спасибо! Это прям, то что нужно.
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
||||||
05.03.2019, 19:38 [ТС] | 26 | |||||
Здравствуйте,
Не могу разобраться, как можно выбирать рабочий лист екселя, а не только использовать активный ? Есть из msdn`овского примера, вот эти строки:
Но, какая строка в autowrape, куда все эти параметры передаются, может отвечать за выбор нужно листа, а не активного, что то вообще ни как не могу понять.
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|||||||||||
06.03.2019, 13:23 [ТС] | 27 | ||||||||||
Решено добавлением еще одно параметра в AutoWrap:
Но, я совершенно не понимаю, как это работает. Autowrap - это функция, которая, если я правильно понимаю принимает в себя 5 параметров, но если смотреть, то Name_sheet - это 6ой параметр, как он туда тогда передается ?:
0
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,415
|
|
06.03.2019, 18:17 | 28 |
Optimus11, есть такая штука «функции с переменным количеством аргументов»
0
|
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,415
|
||||||
09.03.2019, 08:02 | 29 | |||||
Optimus11
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|||||||||||
18.01.2020, 08:59 [ТС] | 30 | ||||||||||
Здравствуйте,
Подскажите пожалуйста, вот есть к примеру:
Но вопрос в другом, вот теперь есть к примеру:
И вот вопрос, как сказать екселю, чтобы он данный ему массив data_unicode.c_str() - воспринимал как набор байт юникода и преобразовывал в символы юникод, а не по умолчанию в ascii ?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
18.01.2020, 11:12 | 31 | |||||
Это не юникод, это utf-8, немного разные вещи. Юникод-строка делается так
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
18.01.2020, 11:25 [ТС] | 32 |
Насколько я понимаю юникод - это стандарт, а utf8 и utf16 его кодированные представления.
И буковка L если я правильно понимаю преобразует ascii символ или строку в utf16. Позвольте пожалуйста немного переформулировать вопрос: Есть текстовый txt документ , в нем соотвесвенно ест текст в кодировке utf8, я его считывают getline'ом в string, и с помощью обертки COM записываю в ексель, но записываются абракадабры. Вопрос как записать тонда чтобы были нормальные символы ?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
18.01.2020, 11:41 | 33 |
Именно это буковка тебе и нужна, при работе с BSTR.
Воспользуйся либо MultiByteToWideChar , CP_UTF8 Добавлено через 2 минуты В общем, там надо будет по-любому конвертировать в юникод-строку, BSTR.
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
18.01.2020, 11:51 [ТС] | 34 |
Если я правильно понимаю, то MultiByteToWideChar преобразует символ из одной кодировки в другую. Если так, то эта функция мне не нужна, так как в текстовом файле симвооы уже в ножной utf8 кодировке.
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
18.01.2020, 15:35 | 35 |
Нужной кому?
Она преобразовывает именно в то, что нужно передавать в excel. Или тебе не это надо?
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
18.01.2020, 15:56 [ТС] | 36 |
Я сам запутался уже
Я не совсем тогда понимаю, как это функция работает, как я понял на вход она принимает массив чаров в стиле строки Си, а на выходе то, что она выдает ?
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
18.01.2020, 16:11 | 37 | |||||
Сообщение было отмечено Optimus11 как решение
Решение
На выходе выдаёт юникод-строку, utf-16.
1
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
18.01.2020, 17:43 [ТС] | 38 |
0
|
136 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,894
|
|
23.01.2020, 21:34 [ТС] | 39 |
Спасибо!
Все это работает, но я уже голову сломал, не могу, откудато в появляется после преобразованного чимвола мусор. Причем муссор появляется не в буффере, потому как его размер просто ограничен ровно тем каюоличеством, которые нудны по сисвол utf16. Мусор появляется уже в екселе почему то.
0
|
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
23.01.2020, 21:39 | 40 |
0
|
23.01.2020, 21:39 | |
23.01.2020, 21:39 | |
Помогаю со студенческими работами здесь
40
Чтение из Excel в StringGrid Работа с БД SQLite 3: чтение, запись Чтение данных из Excel с Visual C++ Запись и чтение Excel Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |