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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2010, 11:55   #1  
Mileyko is offline
Mileyko
Участник
 
39 / 19 (1) ++
Регистрация: 05.10.2008
Адрес: Новосибирск
Вставить программно изображение в word-документ
Возможно, кому-нибудь будет полезна функция вставки изображения из файла в word-документ. Лично я не смог найти какую-нибудь тему или решение этой проблемы на форуме. Если у кого-то будут вопросы, пожалуйста, задавайте.

X++:
public void VTHm_InsertImage(str _bookmark, str _fileName)
Здесь,
_bookmark – Название закладки в word-документе
_fileName – Имя файла изображения

Собственно, код:

X++:
public void VTHm_InsertImage(str _bookmark, str _fileName)
{
    #define.InsImgSub("VTHm_InsImg")
    COM vbMdl;
    COM vbCode;
    COM vbp;
    COM vbc;
    ;
    if (!m_comApplication)
    {
        throw error(strfmt("@GEE6406", this.getApplicationName()));
    }
    if (!m_comDocument)
    {
        throw error(strfmt("@GEE6401", this.getApplicationName()));
    }
    vbp = m_comDocument.VBProject();
    vbc = vbp.VBComponents();
    vbMdl = vbc.Add(1);
    vbCode = vbmdl.CodeModule();
    vbCode.InsertLines(vbCode.CountOfLines() + 1, strFmt('Sub %1()', #InsImgSub));
    vbCode.InsertLines(
            vbCode.CountOfLines() + 1
            , strFmt(
                'ActiveDocument.Bookmarks.Item("%1").Range.InlineShapes.AddPicture ("%2")'
                , _bookmark
                , _fileName
                )
            );
    vbcode.InsertLines(vbCode.CountOfLines() + 1, 'End Sub');
    m_comApplication.Run(#InsImgSub);
}
За это сообщение автора поблагодарили: George Nordic (2), S.Kuskov (1), Artoodeetoo (1).
Старый 14.12.2010, 11:57   #2  
Mileyko is offline
Mileyko
Участник
 
39 / 19 (1) ++
Регистрация: 05.10.2008
Адрес: Новосибирск
Забыл добавить, что метод добавляется в класс ComWordDocument_RU
Старый 15.12.2010, 08:17   #3  
vanokh is offline
vanokh
Участник
 
108 / 63 (3) ++++
Регистрация: 23.10.2008
Зачем такой изврат? Создавать макрос, который вставляет картинку? Можно же напрямую из кода:

X++:
    ComWordDocument_RU  word;
    COM                 com;
    ;

    word = new ComWordDocument_RU();
    word.newFile(<  >, false, false);
    
    com = word.getComDocument();
    com = com.Bookmarks();
    com = com.Item(<>);
    com = com.Range();
    com = com.InlineShapes();
    com = com.AddPicture(<  >);
    
    com.finalize();
    
    word.Visible(true);
    word.finalize();
Можно аналогично вставить в ComWordDocument_RU.
За это сообщение автора поблагодарили: lev (2), andrewK (1), S.Kuskov (2), Mileyko (1).
Старый 15.12.2010, 13:15   #4  
Mileyko is offline
Mileyko
Участник
 
39 / 19 (1) ++
Регистрация: 05.10.2008
Адрес: Новосибирск
Я согласен, что ваш код более элегантен и более безопасен (не требуется разрешение выполнения макросов). К сожалению, я плохо знаю com-модель офиса, поэтому я написал код на vbaдля решения этой задачи. Спасибо за комментарий, буду иметь в виду ваше решение.
Старый 16.12.2010, 05:52   #5  
vanokh is offline
vanokh
Участник
 
108 / 63 (3) ++++
Регистрация: 23.10.2008
Имейте в виду на будущее и то, что практически любой макрос VBA можно переписать в таком виде для Аксапты
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
как программно создать документ в DocuView алька DAX: Программирование 5 03.04.2007 18:44
Отсторнировать документ ГК программно Sada DAX: Программирование 13 28.02.2007 19:18
Word документ в 3-х звенке tumev DAX: Программирование 4 06.10.2005 08:07
Документ Word в отчет gudzon DAX: Программирование 0 17.06.2005 18:04
Как сохранить документ Word(ComWordDocument_RU) listener DAX: Программирование 4 14.08.2003 12:02

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

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

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