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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2015, 15:07   #1  
Dumfag is offline
Dumfag
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2015
Excel и AX 2009
Добрый день всем!

Хочу из аксапты сделать отчет Excel с прикреплением файла.
У меня пока не получается.

X++:
static void InsertAttachInExcel(Args _args)
{
    ComExcelDocument_RU excel = new ComExcelDocument_RU();
    COM OLEObjects;
    COM comWorksheet;
    COM application;
    COM comWorkbooks;
    ;
    excel.open("c:\\temp\\hello.xlsx");
    application  = excel.application();
    comWorkbooks = Application.workbooks();

    try
    {
        
        comWorksheet    = application.activeSheet();
        OLEObjects        = comWorksheet.OLEObjects();
        OLEObjects.Add("c:\temp\Д_013308.pdf"); //Ругается в этом месте.
        excel.documentSave();
    }
    catch
    {
        excel.documentSave();
    }
}
Ошибка вот такая Метод "Add" в COM-объекте класса "OLEObjects" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Вставка объекта неосуществима.

Что я делаю не так?
Старый 12.11.2015, 15:43   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Первое что бросилось в глаза. Путь к файлу написан с ошибкой. Обратные слеши не экранированы
Старый 12.11.2015, 16:00   #3  
Dumfag is offline
Dumfag
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2015
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Первое что бросилось в глаза. Путь к файлу написан с ошибкой. Обратные слеши не экранированы
Делал с таким вариантом "c:\\temp\\Д_013308.pdf", не помогло.

В макросе VBA выглядит вот так:
Код:
Sub addFile()
    ActiveSheet.OLEObjects.Add(Filename:="C:\TEMP\Д_013308.pdf", Link:=False, _
        DisplayAsIcon:=True, IconFileName:= _
        """C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe""", IconIndex _
        :=0, IconLabel:="C:\TEMP\Д_013308.pdf").Select
End Sub
Как перевести в код AX?
Старый 12.11.2015, 16:39   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
А если путь к файлу прописать в отдельном поле и использовать это поле вместо текста?
__________________
С уважением,
Вячеслав
Старый 12.11.2015, 16:42   #5  
dmn is offline
dmn
Участник
 
9 / 18 (1) ++
Регистрация: 25.09.2014
Из справки Excel
Код:
OLEObjects.Add Method
expression.Add(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)
(you must specify either ClassType or FileName). A string that contains the programmatic identifier for the object to be created. If ClassType is specified, FileName and Link are ignored.
Если указан ClassType, то FileName и Link игнорируются.

Попробуйте заменить на это:
X++:
OLEObjects.Add(ComVariant::createNoValue(), @'c:\temp\Д_013308.pdf');
За это сообщение автора поблагодарили: Dumfag (1).
Старый 12.11.2015, 16:44   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Открываете справку по методу OleObject.Add()

https://msdn.microsoft.com/en-us/lib...ffice.15).aspx

Его синтаксис выглядит так

expression.Add(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

Поскольку Axapta не поддерживает именованные параметры, то параметры указываются в порядке их следования. Т.е. параметр FileName - это второй параметр. А перед ним должен быть параметр ClassType. В данном случае, вместо него надо передать null

"На вскидку" (не проверял), должно быть что-то вроде такого

X++:
    ComVariant var;
    ;
    var = new ComVariant(COMVariantInOut::In_out, ComVariantType::VT_BOOL);
    var.variantType(ComVariantType::VT_NULL);

    OLEObjects.Add(var, "c:\\temp\\Д_013308.pdf");
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Dumfag (1).
Старый 12.11.2015, 16:56   #7  
Dumfag is offline
Dumfag
Участник
 
8 / 10 (1) +
Регистрация: 20.03.2015
Спасибо всем, кто откликнулся. Проблема решена.
Теги
axapta, com-объект, excel, oleobjects

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance - What information and data to collect when you want to open a support case Blog bot DAX Blogs 0 29.09.2015 15:11
emeadaxsupport: In AX 2009 SP1 RU8 - During Excel import, a 64 bit value is placed in a 32 bit integer Blog bot DAX Blogs 0 17.09.2013 14:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
Shekhar: Dynamics AX 2009 : Exporting data to Excel (Part2) Blog bot DAX Blogs 0 30.03.2010 15:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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