Автоматизации Excel называя конфликт “_filterdatabase” - разные поведения автоматизации MFC Оле и C# .Чистая
Открытие документа Excel с помощью C++ MFC OLE automation показывает конфликт имен ("_FilterDatabase"), в то время как аналогичный подход в C# .NET через Microsoft.Офис.Взаимодействие.Excel-нет.
n мой проект автоматизации Ole C++ MFC, для которого я импортировал библиотеку типов excel.exe и выбрал интерфейсы _Applicatin (CExcelApplication), _Workbook(CWorkbook) и Workbooks(CWorkbooks).
Открытие документа Excel с помощью C++ MFC OLE automation показывает конфликт имен ("_FilterDatabase"), в то время как аналогичный подход в C# .NET через Microsoft.Офис.Взаимодействие.Excel-нет.
В моем проекте C++ MFC OLE Automation я импортировал библиотеку типов для excel.exe и выбрал интерфейсы _Applicatin (CExcelApplication), _Workbook(CWorkbook) и Workbooks(CWorkbooks).
В моем проекте C# .NET я добавил ссылку COM "библиотека объектов Microsoft Excel 16.0".
Что я уже пробовал:
Это код, который я использую в проекте автоматизации Ole MFC C++ :
void OpenExcelDocument(const std::wstring& strDocument) { // Create Excel object and bring Excel to the screen CExcelApplication appExcel; appExcel.CreateDispatch(L"Excel.Application"); appExcel.put_Visible(TRUE); // obtain the Workbooks interface LPDISPATCH pDispWorkbooks = appExcel.get_Workbooks(); if (pDispWorkbooks == NULL) return; CExcelWorkbooks workbooks; workbooks.AttachDispatch(pDispWorkbooks); // setup the default parameters VARIANT varDefault; memset(&varDefault, 0, sizeof(varDefault)); varDefault.vt = VT_ERROR; varDefault.scode = DISP_E_PARAMNOTFOUND; // open the document workbooks.Open(strDocument.c_str(), varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault, varDefault); }
Следующий код показывает, как с помощью C# .Чистая
using Excel = Microsoft.Office.Interop.Excel; namespace ReadExcelDoc { class Program { static void OpenExcelDocument(String strDocument) { Excel.Application xlApp = new Excel.Application(); xlApp.Visible = true; Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(strDocument); } static void Main(string[] args) { String xlsFile = @"..."; OpenExcelDocument(xlsFile); } } }
Мои вопросы таковы:
- Действительно ли это внутренне тот же самый подход для объектов Excel COM?
- Есть ли способ избежать запроса Excel на разрешение конфликта имен в моем подходе автоматизации OLE MFC C++, несмотря на изменение документа Excel вручную?
- Правильно ли указаны мои аргументы по умолчанию VARIANT в C++?
Rick York
У меня нет решения для вас, но вы смотрели образцы, которые пришли с VS2010? В каталоге MFC есть раздел о OLE, в котором может быть что-то полезное. Это хороший образец пакета, чтобы иметь его рядом, несмотря ни на что.
achimschoen
Спасибо за ответ. Я знаю эти примеры. К сожалению, они не отвечают на мой вопрос.