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

C++: COM, OLE, ActiveX

Войти
Регистрация
Восстановить пароль
 
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
#1

Работа в Excel из VS - C++ COM

31.05.2016, 15:15. Просмотров 595. Ответов 10
Метки нет (Все метки)

Добрый день!
Пишу программу в Visual Studio. В программе создаю экселевский файл. В него программно записываю данные. Можно теперь с помощью COM & OLE что-нибудь поменять в этом файле: значение ячейки, цвет, шрифт, фон? Приведите, пожалуйста, пример кода, как подключиться и как что-нибудь простое поменять в excel. Несколько лет назад использовала OLE в билдере. Там вроде вообще несложно было. А по VS не могу ничего найти.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
31.05.2016, 15:35     Работа в Excel из VS #2
из вот этого
Цитата Сообщение от Simply me Посмотреть сообщение
Пишу программу в Visual Studio. В программе создаю экселевский файл. В него программно записываю данные.
лично для меня следует что вы уже знаете как
Цитата Сообщение от Simply me Посмотреть сообщение
что-нибудь поменять в этом файле
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
31.05.2016, 17:16  [ТС]     Работа в Excel из VS #3
Нет)
Для этих манипуляций я использовала стандартные функции для работы с файлами: fopen_s, fprintf. Просто в имени файла искусственно указала расширение '.xls'.
Поэтому не могу считать, что умею работать с excel из VS.
vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
31.05.2016, 17:29     Работа в Excel из VS #4
Simply me, вы знаете как писать в xls файл напрямую???? снимаю шляпу. относительно простой модификации через COM можно почитать тут
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
31.05.2016, 17:54  [ТС]     Работа в Excel из VS #5
Спасибо, постараюсь разобраться.

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
вы знаете как писать в xls файл напрямую????
Не понимаю, почему Вы считаете, что это сложно.
C++
1
2
3
4
5
6
FILE *f;
filename="1.xls";
fopen_s(&f, filename);
fprintf(f, "%s\t %s\t \n", cell11, cell12);
fprintf(f, "%s\t %s\t \n", cell21, cell22);
fclose(f);

vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
31.05.2016, 18:05     Работа в Excel из VS #6
Simply me, и excel ЭТО открывает)?
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
31.05.2016, 18:22  [ТС]     Работа в Excel из VS #7
vxg, да) Ну сначала выдаёт какое-то сообщение типа ругательства, не помню текст, а потом открывает.
vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
31.05.2016, 18:28     Работа в Excel из VS #8
Simply me, если вы почитаете что он пишет то там скорее всего "файл не является файлом excel или поврежден, открыть полюбому как текст? выберите кодировку" так что вы не пишете файл excel не обольщайтесь
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
31.05.2016, 18:46  [ТС]     Работа в Excel из VS #9
Уточню текст сообщения, когда буду на работе. Выбрать кодировку не просит.

Цитата Сообщение от vxg Посмотреть сообщение
так что вы не пишете файл excel
Не знаю, смотря по какому критерию определять, является ли файл экселевским. Расширение xls, excel открывает.

Так-то я не против по-другому и создавать файл, и записывать в него данные, и редактировать)) Просто не знаю, как это проще сделать. В билдере, помню, вообще просто было.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <comobj.hpp>
#include<comobject.h>
#pragma link "Excel_2K_SRVR"
Variant  Application,Books,Book,Sheets,Sheet,Cells,Cell, Chart, Charts;
  Application=GetActiveOleObject("Excel.Application");
  Books = Application.OlePropertyGet("Workbooks");
  Book = Application.OlePropertyGet("ActiveWorkbook");
  n=Application.OlePropertyGet("ActiveSheet").OlePropertyGet
  ("Cells", 1, "B").OlePropertyGet("Value");
 //Диаграмма в Excel
  Chart=Application.OlePropertyGet("Charts").OleFunction("Add");
  Chart.OlePropertySet("ChartType",72);
  Chart.OleProcedure("SetSourceData",Sheet.OlePropertyGet
  ("Range",Sheet.OlePropertyGet("Cells",2,8),
  Sheet.OlePropertyGet("Cells",2,28))) ;
 //Настройка диаграммы
  //Расположение
  Chart.OlePropertySet("Top",550);
  Chart.OlePropertySet("Left",50);
  //Заголовок
  Book.OlePropertyGet("ActiveChart").OlePropertySet("HasTitle",true);
  Chart=Book.OlePropertyGet("ActiveChart").OlePropertyGet("ChartTitle");
  Chart.OlePropertyGet("Characters").
  OlePropertySet("Text","Распределение значений NPV");
Может, есть что-то аналогичное в VS?
vxg
Модератор
3057 / 1859 / 195
Регистрация: 13.01.2012
Сообщений: 7,076
31.05.2016, 18:54     Работа в Excel из VS #10
Simply me, это не xls файл по своему внутреннему формату. excel вам точно так же может открыть любой файл. Один из способов делать то что вы хотите в VS я вам написал - см ссылку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2016, 18:58     Работа в Excel из VS
Еще ссылки по теме:

C++ COM Диаграмма в Excel
Cpp Builder / Excel C++ COM
C++ COM Cpp builder-Ole-Excel. WideString пишет в ячейку Excel минус перед нулем
Сторонний процесс Excel C++ COM
Добавление картинки в Excel C++ COM

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

Или воспользуйтесь поиском по форуму:
Simply me
235 / 31 / 2
Регистрация: 05.05.2012
Сообщений: 293
Завершенные тесты: 1
31.05.2016, 18:58  [ТС]     Работа в Excel из VS #11
Да, vxg, Вы правы)) Не тянет на эксель.
Миниатюры
Работа в Excel из VS  
Yandex
Объявления
31.05.2016, 18:58     Работа в Excel из VS
Ответ Создать тему
Опции темы

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