14.12.2010, 11:55 | #1 |
Участник
|
Вставить программно изображение в 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 |
Участник
|
Забыл добавить, что метод добавляется в класс ComWordDocument_RU
|
|
15.12.2010, 08:17 | #3 |
Участник
|
Зачем такой изврат? Создавать макрос, который вставляет картинку? Можно же напрямую из кода:
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(); |
|
|
За это сообщение автора поблагодарили: lev (2), andrewK (1), S.Kuskov (2), Mileyko (1). |
15.12.2010, 13:15 | #4 |
Участник
|
Я согласен, что ваш код более элегантен и более безопасен (не требуется разрешение выполнения макросов). К сожалению, я плохо знаю com-модель офиса, поэтому я написал код на vbaдля решения этой задачи. Спасибо за комментарий, буду иметь в виду ваше решение.
|
|
16.12.2010, 05:52 | #5 |
Участник
|
Имейте в виду на будущее и то, что практически любой макрос VBA можно переписать в таком виде для Аксапты
|
|