Задать вопрос

Как вызвать Excel из приложения на Visual C++ 6 (MFC)?

Хочу тут перенести в одном из древних проектов на C++ фрагмент кода, речь о среде MS Visual C++ 6. Сам когда-то давно написал программку, которая из базы экспортировала запрос в Excel. И вроде бы ничего там не было сложного, я через Class Wizard подключал классы через файлы MSWORD.OLB и XL5EN32.OLB, потом выбирал _Application и дальше уже вызывал более "тонкие" настройки, чтобы сформировать лист Excel. Но вот в новом проекте в той же среде на той же ВМ пытаюсь сейчас то же самое проделать, обработка события показывает, что будто бы не установлен Excel. Но он точно есть, потому что скомпилировал старый проект и все работает:

// инициализация Excel
      _Application oApp;
      oApp.CreateDispatch("Excel.Application");
      if (!oApp)
      {
          AfxMessageBox("Невозможно запустить Excel.");
          return;
      }

	  Workbooks oBooks;             //объявление коллекции рабочих книг Excel
	  oBooks = oApp.GetWorkbooks(); // получаем список книг

В header-файле подключен excel9.h:

#include "excel9.h"

Что-то пропустил, но не могу вспомнить, что именно. Кто-нибудь помнит такую древность?

6824ad3440e38971657549.jpeg
6824ad43682d7789003156.jpeg
  • Вопрос задан
  • 642 просмотра
Подписаться 3 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
@Miron11
Пишу sql 20 лет. Срок :)
Может я что - то сам не помню, по - моему надо
oApp.Start();
Нет?
Перед oApp.GetWorkbooks()
И проверить, чтобы опции oApp соответствовали режиму, в котором окошко Exel видимое.
Ответ написан
Комментировать
@shupike Автор вопроса
Не поверите :-) - залез в архивы, нашел саму первую программку, где использовал OLE (еще в 2004), вспомнил, что нужно было вытащить определенные классы из *.olb-файлов (свои для Word и для Excel). Похоже, я сейчас просто перепутал - стал вызывать Excel классами Word'a... В итоге попробовал аккуратно и отдельно по Word и по Excel, но самое главное, что я забыл (даже записал теперь в ReadMe) - вот эти строки:
BOOL COfficeApp::InitInstance()
{
// Initialize OLE libraries
if (!AfxOleInit())
{
AfxMessageBox("Could not initialize COM dll");
return FALSE;
}
AfxEnableControlContainer();
Нужно было добавить в InitInstance() в файле *.cpp проекта - перед AfxEnableControlContainer(); Вроде заработало. Спасибо за поддержку в любом случае :-)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы