Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание макросов в Excel из программы на С++ / 9 сообщений из 9, страница 1 из 1
17.07.2007, 18:12:00
    #34665222
eppopov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
Создал код по запуску 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
17.07.2007, 18:44:34
    #34665316
a...ю
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
Код: plaintext
1.
 _Application oApp;
    oApp.CreateDispatch("Excel.Application");
можно подробнее ? Откуда что взялось ?
...
Рейтинг: 0 / 0
17.07.2007, 18:52:19
    #34665339
eppopov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
a...ю
Код: plaintext
1.
 _Application oApp;
    oApp.CreateDispatch("Excel.Application");
можно подробнее ? Откуда что взялось ?

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

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

А насчёт вируса-так есть в Экселе функция
WorkBooks.Open(szFile,UpdateLinks,ReadOnly,Format,Password,WriteResPassword,IgnoreReadOnlyRecommended,Origin,Delimiter, Editable, Notify, Converter, AddToMRU). нигде не могу найти пример её вызова. Никак не смог разобраться с этой кучей параметров, поэтому и полез в макросы
...
Рейтинг: 0 / 0
17.07.2007, 19:22:00
    #34665396
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
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
17.07.2007, 19:28:38
    #34665407
eppopov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
White Owl[quot eppopov(определи имя файла, скинь все остальные параметры в OleNull).

Объясни пожалуйста поподробнее насчёт OleNull.Как им пользоваться и что это-макрос?
...
Рейтинг: 0 / 0
17.07.2007, 20:01:11
    #34665448
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
eppopov White Owl[quot eppopov(определи имя файла, скинь все остальные параметры в OleNull). Объясни пожалуйста поподробнее насчёт OleNull.Как им пользоваться и что это-макрос?Угу... кажется макрос.... Не помню, давно дело было :)
Запусти поиск по форуму на слова "Excel.Application" получишь десятки три-четыре тем где все это всесторонне обсуждается.
...
Рейтинг: 0 / 0
18.07.2007, 06:04:00
    #34665762
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание макросов в Excel из программы на С++
Вот метод класса, создающий макрос в книге 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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создание макросов в Excel из программы на С++ / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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