Как я могу создать для своего приложения свой экземпляр Excel и использовать его? - PullRequest
0 голосов
/ 24 марта 2011

Как я могу создать для своего приложения свой экземпляр Excel и использовать его?Теперь у меня есть ошибка ком, когда я вызываю CreateInstance, и есть экземпляр Excel в процессе.Я хочу использовать для своего приложения глобальный обработчик экземпляра Excel и убить его, когда мое приложение будет закрыто

1 Ответ

2 голосов
/ 24 марта 2011

Excel допускает несколько экземпляров.Следующий код работает с несколькими экземплярами (XL, XL1).И это работает, даже если вы ранее запустили Excel вручную.Не могли бы вы показать пример кода, чтобы уточнить ваш вопрос.

#import "C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\mso.dll"
#import "C:\Program Files (x86)\Common Files\microsoft shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" \
  rename("DialogBox","ExcelDialogBox") rename("RGB","ExcelRGB") \
  exclude("IFont","IPicture")

#include <stdexcept>
#include <iostream>

int main()
{
  CoInitialize(NULL);
  try {
    Excel::_ApplicationPtr XL, XL1;

    HRESULT hr = XL.CreateInstance(L"Excel.Application");
    if(FAILED(hr)) {
      char msg[1024] = {0};
      sprintf(msg, "E: initializing first instance failed: %d", hr);
      throw std::runtime_error(msg);
    }

    Excel::_WorkbookPtr workbook = XL->Workbooks->Add(Excel::xlWorksheet); 
    Excel::_WorksheetPtr worksheet = XL->ActiveSheet;
    worksheet->SaveAs("c:\\test.xls");

    hr = XL1.CreateInstance(L"Excel.Application");
    if(FAILED(hr)) {
      char msg[1024] = {0};
      sprintf(msg, "E: initializing second instance failed: %d", hr);
      throw std::runtime_error(msg);
    }

    workbook->Close();
    XL->Quit();
    XL1->Quit();
  }
  catch(_com_error &ce)
  {
    std::cout<<"caught" << std::endl;
    // Handle the error
  }

  CoUninitialize();

  system("pause");
  return 0;
}
...