achimschoen Ответов: 0

Автоматизации 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

Спасибо за ответ. Я знаю эти примеры. К сожалению, они не отвечают на мой вопрос.

0 Ответов