powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание макросов в Excel из программы на С++
9 сообщений из 9, страница 1 из 1
Создание макросов в Excel из программы на С++
    #34665222
eppopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал код по запуску Excel из программы на Visual C++6:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
	if(!AfxOleInit())  // Your addition starts here
         {
            AfxMessageBox("Could not initialize COM dll");
            return ;
         }                 // End of your addition

         		 
	//Start a new workbook in Excel
    _Application oApp;
    oApp.CreateDispatch("Excel.Application");

    if (!oApp)
	{ 
       AfxMessageBox("Error while starting Excel");
       return ;
	} 

	COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
	Workbooks oBooks = oApp.GetWorkbooks();
    _Workbook oBook = oBooks.Add(vOpt);
    Worksheets oSheets = oBook.GetWorksheets();
    _Worksheet oSheet = oSheets.GetItem(COleVariant((short) 1 ));
    Range oRange;

Как теперь создать макрос, записать его в Excel и выполнить
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665316
a...ю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
 _Application oApp;
    oApp.CreateDispatch("Excel.Application");
можно подробнее ? Откуда что взялось ?
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665339
eppopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a...ю
Код: plaintext
1.
 _Application oApp;
    oApp.CreateDispatch("Excel.Application");
можно подробнее ? Откуда что взялось ?

Из библиотеки типов, поставляемой офисом взял .h и .сpp файлы. При помощи сервера автоматизации я вызываю oApp.CreateDispatch("Excel.Application"). "Excel.Application"-это COM-овская фича, т.н. ProgID,прописанный в реестре, по которому менеджер COM-объектов находит их и дополнительную COM- овскую инфу на харде. Теперь можно при помощи интерфейсов взаимодействовать с Excel и требовать необходимые действия
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665341
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eppopovКак теперь создать макрос, записать его в Excel и выполнитьСмотри коллекции VBE, CodeModule и так далее. Будь готов к тому, что твою программу признают вирусом со всеми вытекающими.
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665353
eppopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl eppopovКак теперь создать макрос, записать его в Excel и выполнитьСмотри коллекции VBE, CodeModule и так далее. Будь готов к тому, что твою программу признают вирусом со всеми вытекающими.

А где можно посмотреть?

А насчёт вируса-так есть в Экселе функция
WorkBooks.Open(szFile,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter, Editable, Notify, Converter, AddToMRU). нигде не могу найти пример её вызова. Никак не смог разобраться с этой кучей параметров, поэтому и полез в макросы
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665396
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eppopov White Owl eppopovКак теперь создать макрос, записать его в Excel и выполнитьСмотри коллекции VBE, CodeModule и так далее. Будь готов к тому, что твою программу признают вирусом со всеми вытекающими.А где можно посмотреть?В VBA. Запускай Эксель, запускай VBA, тыкай F1, читай.

eppopovА насчёт вируса-так есть в Экселе функция
WorkBooks.Open(szFile,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter, Editable, Notify, Converter, AddToMRU). нигде не могу найти пример её вызова. Никак не смог разобраться с этой кучей параметров, поэтому и полез в макросыХы, лучше разбирайся с параметрами, это элементарно (определи имя файла, скинь все остальные параметры в OleNull). Править макросы кроме как через редактор самого VBA, считается вирусо-опасным занятием и пресекается как только можно. И самим Экселем и антивирусными мониторами. Так что....
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665407
eppopov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl[quot eppopov(определи имя файла, скинь все остальные параметры в OleNull).

Объясни пожалуйста поподробнее насчёт OleNull.Как им пользоваться и что это-макрос?
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665448
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eppopov White Owl[quot eppopov(определи имя файла, скинь все остальные параметры в OleNull). Объясни пожалуйста поподробнее насчёт OleNull.Как им пользоваться и что это-макрос?Угу... кажется макрос.... Не помню, давно дело было :)
Запусти поиск по форуму на слова "Excel.Application" получишь десятки три-четыре тем где все это всесторонне обсуждается.
...
Рейтинг: 0 / 0
Создание макросов в Excel из программы на С++
    #34665762
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот метод класса, создающий макрос в книге Excel.
Правда для CBuilder.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
//----------------------------------------
bool EXCEL_APP::AddMacro(AnsiString MacroStrings){
// создать макрос в книгу EXCEL
int ItemCount;
Variant Modul,Workbook,VBProject,VBComponents,Item,Codemodule;

AnsiString ComponentName;
bool IsRus=false,IsEng=false,Result=true;
try{
    //В Options Excel поставил галочку на
    //Security-Macro security-Trusted publishers и всё заработало
    VBProject=this->Book.OlePropertyGet("VBProject");
    VBComponents=VBProject.OlePropertyGet("VBComponents");
    ItemCount=VBComponents.OlePropertyGet("Count");
    // по русски?
    for(int i= 1 ;i<=ItemCount;i++){
        Item=VBComponents.OleFunction("Item",i);
        ComponentName=Item.OlePropertyGet("Name");
        if(ComponentName.AnsiCompareIC("ЭтаКнига")== 0 ){
            IsRus=true;
            break;
        }
        if(ComponentName.AnsiCompareIC("ThisWorkbook")== 0 ){
            IsEng=true;
            break;
        }
    }
    
    if(Item.IsNull()){
        throw Exception("EXCEL_APP:AddMacro()\n"
          "Не найдена ни одна из компонент [ЭтаКнига],[ThisWorkbook]");
    }
    Modul=Item.OlePropertyGet("Codemodule");
    Modul.OleFunction("AddFromString",MacroStrings);
}
catch(Exception &e){
    AnsiString s="Не удалось создать макрос\n";
    char b[ 81 ];
    strncpy(b,MacroStrings.c_str(), 80 );
    s=s+b;
    MessageBox( 0 ,s.c_str(),"Ошибка",MB_OK);
    Result=false;
}
return Result;
}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание макросов в Excel из программы на С++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]