28.07.2010, 18:42 | #1 |
Участник
|
Word, AddOLEObject
Доброго времени суток.
Открываю шаблон Word-а 2003 и пытаюсь заполнить ячейку таблицы объектом, связанным с картинкой. Если делать средствами Word-а, то это здесь: Вставка/Объект/Создание из файла... Здесь выбираю картинку и ставлю галку "В виде значка". Внимание, вопрос : Если записывать макрос и запускать, то все красиво. Если тот же код макроса написать в Axaptа, то добавляет объект, но без иконки. И еще одна разница в поведении - из макроса я могу кликнуть 2 раза по объекту и он открывается, а из кода Аксапты - нет. Что я делаю неправильно, подскажите плз Код: public void InsertOLEObject(BookMark bookMark, str FileName, boolean LinkToFile = true, boolean DisplayAsIcon = true) { COM ComRange; COM InShape; COM PictRes; RT_Resources2 rtR2; str IconFileName; ; if (!m_comDocument) throw error(StrFmt("@DIS6401", this.getApplicationName())); ComRange = this.findRange(bookMark); InShape = ComRange.InlineShapes(); rtR2 = RT_RefToResources2::findInnerRes('PictIcon'); IconFileName = WinApi::getTempPath() + rtR2.FileName; rtR2.open(); PictRes = InShape.AddOLEObject("htmlfile", FileName, LinkToFile, DisplayAsIcon, IconFileName, 0, "Pict"); InShape.finalize(); } |
|
28.07.2010, 19:45 | #2 |
Участник
|
Для данного случая не проверял, но как правило ВСЕ переменные (за некоторым исключением) в COM-интерфейс надо передавать "обернутыми" в ComVariant. Иначе последствия трудно предсказуемые
X++: PictRes = InShape.AddOLEObject(COMVariant::createFromStr("htmlfile"), COMVariant::createFromStr(FileName), COMVariant::createFromBoolean(LinkToFile), COMVariant::createFromBoolean(DisplayAsIcon), COMVariant::createFromStr(IconFileName), 0, // Не уверен, что здесь нужно число, а не COMArgument::NoValue COMVariant::createFromStr("Pict") ); |
|
29.07.2010, 10:15 | #3 |
Участник
|
Не помогло к сожалению... По-прежнему нет никаких признаков того, что объект добавлен в ячейку, пока не наткнешься на него случайно курсором. и активируется он не двойным кликом
|
|
30.07.2010, 11:01 | #4 |
Moderator
|
А запустите у себя следующий джоб, предварительно поместив в корень диска C (или в иную папку, подправив пути в коде) прилагаемые файлы:
X++: static void Job328(Args _args) { ComWordDocument_RU doc = new ComWordDocument_RU(); COM comTemp; ; doc.open(@'C:\TestDoc1.doc', true); // - файл примера прилагается к сообщению comTemp = doc.getComDocument(); comTemp = comTemp.Bookmarks(); comTemp = comTemp.Item('ZZZ'); // закладка ZZZ - первая ячейка второй строки таблицы comTemp = comTemp.Range(); comTemp = comTemp.InlineShapes(); comTemp = comTemp.AddOLEObject( 'htmlfile', // ClassType @'C:\PageSetup3.JPG ', // FileName - файл примера прилагается к сообщению False, // LinkToFile True, // DisplayAsIcon @'C:\AxAppl.ico', // IconFileName - файл примера прилагается к сообщению 0, // IconIndex 'Page Setup'); // IconLabel comTemp.Select(); } |
|
|
За это сообщение автора поблагодарили: JustNick (1). |
02.08.2010, 10:59 | #5 |
Участник
|
Да, спасибо большое!
Как выяснилось, была еще одна проблема - какой-то глюк с форматами в вордовском шаблоне. Проблема решилась после очистки форматов в ячейке таблицы |
|