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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.11.2012, 11:09   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Перепешите метод класса ComOfficeDocument_RU.visible() следующим образом

X++:
// Show / hide application
public void visible(boolean _bVisible = true)
{
    ComVariant      comVariant;
    COMDispFunction funcDisp;
    ;

    if (!m_comApplication)
        throw error(StrFmt("@DIS100406", this.GetApplicationName()));

    this.activate(_bVisible); // Activate application, if necessary

    comVariant = ComVariant::createFromBoolean(_bVisible);
    // RTG, 05.08.2010, МВБ -->
    // По непонятным причинам в Excel 2007 следующая команда ИНОГДА приводит к ошибке
    // Метод был вызван с неверным числом параметров.
    // Чтобы ее обойти необходимо сделать присвоение свойству через COMDispFunction
//    m_comApplication.Visible(comVariant);

    funcDisp = new COMDispFunction(m_comApplication, "Visible", COMDispContext::PROPERTYPUT);
    funcDisp.call(comVariant);
    funcDisp.finalize();
    // RTG, 05.08.2010, МВБ <--

}
После этого сделайте инкрементную компиляцию класса ComOfficeDocument_RU
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Antonuch (1).
Старый 30.06.2017, 04:46   #2  
Fizik is offline
Fizik
Участник
 
26 / 10 (1) +
Регистрация: 07.07.2005
Адрес: Владивосток
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013.
Ошибка работы с Excel снова появилась, причем метод visible() уже переделан.
Обращение к Excel происходит вот таким образом:

excel = new COMExcelDocument_RU();
excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false);

excel.insertValue(bookmark, substr(_content, i, 1));

Подскажите, как все же еще можно переделать.
Старый 30.06.2017, 07:35   #3  
Fizik is offline
Fizik
Участник
 
26 / 10 (1) +
Регистрация: 07.07.2005
Адрес: Владивосток
Цитата:
Сообщение от Fizik Посмотреть сообщение
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013.
Ошибка работы с Excel снова появилась, причем метод visible() уже переделан.
Обращение к Excel происходит вот таким образом:

excel = new COMExcelDocument_RU();
excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false);

excel.insertValue(bookmark, substr(_content, i, 1));

Подскажите, как все же еще можно переделать.
Добавлю, что в классе ComExcelDocument_RU уже переделаны методы getWorkSheet и getWorkSheets, как указано на странице Как правильно обернуть в ComVariant метод getWorkSheets() класса ComExcelDocument_RU
Старый 03.07.2017, 13:42   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
650 / 352 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Fizik Посмотреть сообщение
Прошло время. Волею судеб сейчас мы все еще работаем на Axapta 3.0 SP4 Build #11.0
При том корпоративный MS Office уже 2013.
Ошибка работы с Excel снова появилась, причем метод visible() уже переделан.
Обращение к Excel происходит вот таким образом:

excel = new COMExcelDocument_RU();
excel.newFile(#ReportTemplatePath_FileServer + "ApplicationFSS.xltx", false);

excel.insertValue(bookmark, substr(_content, i, 1));

Подскажите, как все же еще можно переделать.
У нас зарубежный клиент, так что вместо COMExcelDocument_RU мы используем свои кастомные наработки. Офис 2013, Аксапта версии 4.0.
Вставить значение можно так:
X++:
public void insertValue(BookMark _bookMark, anyType _anyVal, int _workSheet = 1)
{
    COM comRange;
    ;

    this.checkExistDocument();

    comRange = this.findRange(_bookMark, _workSheet);

    this.insertValueInRange(comRange, _anyVal);
}
X++:
// Creates object range type named the same way as Excel bookmark
// bookMark -> Excel bookmark name
public COM findRange(PPO_MSOfficeBookMark bookMark, int _workSheet = 1) // was protected
{
    COM comRange,
        comWorkSheet;
    COM comApplication;
    ;

    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();

        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange;
}
X++:
// Exporting value in Range object
// comRange -> Range object
// anyVal -> Varible for export to Range object
protected void insertValueInRange(COM _comRange, anyType _anyVal)
{
    _comRange.value2(_anyVal);
}
Думаю, преобразовать код под свои нужды сможете без проблем.
__________________
// no comments
За это сообщение автора поблагодарили: Logger (1).
Теги
документация, com-объект

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибки при работе Axapta fPtr DAX: Администрирование 1 23.08.2007 10:40
Ошибки при работе в трехзвенке tolstjak DAX: Администрирование 3 29.03.2007 12:01
[ANN] WordSL - использование Word 2003 в качестве визуального редактора xsl... belugin DAX: База знаний и проекты 0 26.09.2006 09:12
Вопрос по работе с таблицей в word Protey DAX: Программирование 2 24.08.2006 09:30
Как импортировать из Word chuf DAX: Программирование 4 21.06.2003 15:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:39.