AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2015, 15:28   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,660 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вы бы сделали хотя бы поиск по данному форуму по ключевому слову "ComDispFunction". Есть масса примеров его использования.

В данном конкретном случае решение будет выглядеть так:

Сначала коллекция листов (рабочая книга. Файл Excel)

X++:
// Метод getWorkSheets()
private COM getWorkSheets()
{
    ComVariant  varRet;
    ComDispFunction funcGet;
    ;

    if (!comWorkSheets && m_comDocument)
    {
        try
        {
            /*
            comWorkSheets = m_comDocument.worksheets();
            */
            funcGet = new ComDispFunction(m_comDocument, "worksheets", COMDispContext::PropertyGet);
            varRet  = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH);
            funcGet.call(varRet);
            comWorkSheets = COM::createFromInterface(varRet.iDispatch());
        }

        catch (Exception::Error)
        {
            throw error("@GEE6043");
        }
    }

    return comWorkSheets;
}
Теперь собственно один лист

X++:
private COM getWorkSheet(anytype _workSheetID)
{
    COM comRet;
    ComVariant  varRet;
    ComDispFunction funcGet;
    COMVariant varArgStr;
    COMVariant varArgInt;
    ;

    if (m_comDocument)
    {
        try
        {
            this.getWorkSheets();
            /*
            comRet = comWorkSheets.item(_workSheetID);
            */
            funcGet = new ComDispFunction(comWorkSheets, "item", COMDispContext::PropertyGet);
            varRet  = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_DISPATCH);

            switch (typeOf(_workSheetID))
            {
            case types::String :
                        varArgStr = new COMVariant(COMVariantInOut::In, COMVariantType::VT_BSTR);
                        varArgStr.bStr(_workSheetID);
                        funcGet.call(varArgStr, varRet);
                        break;
        
            case types::Integer :
                        varArgInt = new COMVariant(COMVariantInOut::In, COMVariantType::VT_INT);
                        varArgInt.int(_workSheetID);
                        funcGet.call(varArgInt, varRet);
                        break;

            default :
                        throw error('Не корректный тип параметра');
                        break;
            }   // switch (typeOf(_workSheetID))
    
            comRet = COM::createFromInterface(varRet.iDispatch());

        }

        catch (Exception::Error)
        {
            throw error("@GEE6043");
        }
    }

    return comRet;
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: AlGol (2), NeveB (1), Logger (7), Ace of Database (5), ena_ax (1), Sergey Petrov (1), at5454 (1).
Теги
com-объект, comdispfunction, excel, excel com формат, законченный пример, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2009 RU5: класс CustVendAutoSettlement_Cust_RU, метод description() Damn DAX: Программирование 4 18.12.2010 15:42
Метод "version" не поддерживается интерфейсом Automation COM-объекта класса "<неизвестно>". Poleax DAX: Администрирование 2 02.11.2010 15:25
Метод 'SendMail' в COM-объекте класса 'Dundas.mailer' возвратил код ошибки 0x80004005 (E_FAIL), который означает: The HELLO command failed. Andrew Akhmetov DAX: Программирование 4 09.04.2008 13:24
ComExcelDocument_RU Antonuch DAX: Программирование 4 15.01.2008 13:10
Метод класса, возвращающий сумму налога. 2.5SP5 studentLPC DAX: Программирование 2 25.07.2003 12:21

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:32.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.