Ну что сразу приходит на ум, так это использование Document Variables….
Значит, процедура в codemodule DrawPicture:
Public Sub InsertPicture()
MsgBox ActiveDocument.Variables(‘varPathToBMP’).Value
End Sub
И как ты понял, код в VB:
Private Sub Command1_Click()
Dim appWord As Word.Application
Dim docWord As Word.Document
Set appWord = New Word.Application
Set docWord = appWord.Documents.Add(Template:=’Focuments and SettingsAdministratorApplication DataMicrosoftTemplatesTest1.dot’)
‘ TODO: add check for already exist variable
docWord.Variables.Add Name:=’varPathToBMP’, Value:=’C:TEMPIncom.bmp’
appWord.Run MacroName:=’InsertPicture’
appWord.Quit
Set appWord = Nothing
End Sub
Это должно работать и с 97…
Я думаю, обработчик ошибок и прочее сделаешь сам…
Удачи..
На чтение 2 мин Опубликовано 15.10.2015
В прошлых статьях мы показывали, как настраивать дополнительные свойства и создавать пользовательские свойства в документе Word. Эти свойства можно вставить при помощи экспресс-блока Поле (Field). Что полезно, когда есть слова, фразы или значения, которые часто используются в документах.
Если слово, фразу или значение, которые многократно используются в документе, планируется изменять в будущих редакциях этого документа, то использование встроенного или пользовательского свойства будет весьма полезным. Вам достаточно изменить значение свойства только в одном месте, чтобы оно изменилось сразу во всём документе.
Чтобы вставить значение встроенного или пользовательского свойства, поставьте курсор в то место, куда его нужно вставить, и откройте вкладку Вставка (Insert).
Примечание: При вставке пользовательского свойства в документ, вставлено будет только его значение. Если Вы хотите дополнить (расшифровать) значение именем свойства, введите нужный текст прежде, чем вставлять само значение.
В разделе Текст (Text) вкладки Вставка (Insert) нажмите кнопку Экспресс-блоки (Quick Parts).
Примечание: Подписи этих кнопок могут не отображаться, когда окно Word открыто недостаточно широко. Если Вы не видите подпись кнопки, найдите иконку, указанную курсором на изображении ниже.
В появившемся меню нажмите Поле (Field).
В выпадающем списке Категории (Categories) выберите О документе (Document Information).
В списке Поля (Field names) кликните по DocProperty. В разделе Свойства поля (Field Properties), который расположен по центру диалогового окна, под заголовком Свойство (Property) появится список всех доступных свойств документа (как встроенных, так и добавленных Вами). Выберите из списка пользовательское свойство, которое хотите добавить в документ, и нажмите ОК.
Значение будет вставлено туда, где находится курсор.
Изменив значение пользовательского свойства, необходимо обновить поля, вставленные в документ, чтобы они отобразили это изменение. Для этого нужно выделить все поля в документе (или полностью весь документ) и нажать клавишу F9.
Оцените качество статьи. Нам важно ваше мнение:
|
|||
MagicFly
15.01.09 — 12:34 |
Подскажите как можно из 1С передать параметр в Word? Например, я прописываю строку: Fnd.Execute(«<Диаметр>»,,,,,,,,,Диаметр,2);, где Диаметр у меня типа перечисление. При выполнение кода пишется ошибка: Плохой тип переменной. |
||
skunk
1 — 15.01.09 — 12:36 |
ясный фиг … откуда ворд может знать за перечесления эсины |
||
Torquader
2 — 15.01.09 — 12:36 |
Перечисление нужно преобразовать в строку, например Строка(Диаметр). |
||
MagicFly 3 — 15.01.09 — 12:37 |
(2)Ясно, спасибо за разъяснение! |
AdBlock убивает бесплатный контент. 1Сергей
(Здесь действие происходит в модуле формы)
&НаСервере
Функция ЗаполнитьМакетНаСервере()
ОбработкаОб = РеквизитФормыВЗначение("Объект");
АктивныйДокумент = ОбработкаОб.ПолучитьМакет("МакетДоговораActiveDocument"); //ОболочкаActiveDocument
КомОбъект = АктивныйДокумент.Получить(); //метод работает на сервере
////////////ПЕРВЫЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
//инициализируем переменные, чтобы если какие-то из них окажутся незаполненными, то не отображалась текстовая ошибка в документе
КомОбъект.Variables("ДатаПриема").Value = " ";
КомОбъект.Variables("Организация").Value = " ";
КомОбъект.Variables("ЮрАдрес").Value = " ";
КомОбъект.Variables("Должность").Value = " ";
КомОбъект.Variables("ИНН_КПП_ОГРН").Value = " ";
КомОбъект.Variables("Адрес").Value = " ";
КомОбъект.Variables("ФИОСотрудника").Value = " ";
//заполнение переменных реальными значениями
КомОбъект.Variables("ДатаПриема").Value = "22 сентября 2017г";
КомОбъект.Variables("Организация").Value = "Миросса";
КомОбъект.Variables("ЮрАдрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("Должность").Value = "Генеральный директор";
КомОбъект.Variables("Адрес").Value = "Санкт Петербург, Невский пр, д. 102";
КомОбъект.Variables("ФИОСотрудника").Value = "Сергей Петрович";
//Книга.ActiveWindow.Visible = Истина; //?
//Книга.Activate(); //?
КомОбъект.Fields.Update();
////////////ВТОРОЙ ВАРИАНТ ЗАПОЛНЕНИЯ ПАРАМЕТРОВ////////////
Replace = КомОбъект.Content.Find;
FindText = "<<ФиоСокр>>"; // что искать - имя_шаблона
MatchCase = Ложь; // использовать регулярные выражения
MatchWholeWord = Истина; // искать слово целиком
MatchWildcards = Ложь; // испоьзовать регулярные выражения
MatchSoundsLike = Неопределено; // искать созвучные
MatchAllWordForms = Неопределено; // искать все формы слова
Forward = Истина; // искать вперед
Wrap = Неопределено; // что должен вернуть Find-объект
Format_ = Ложь; // использовать форматирование
ReplaceWith = "С.П."; // текст, на который надо заменить имя_шаблона
//Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith );
Replace.Execute(
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
ReplaceWith );
Replace = КомОбъект.Content.Find; //перед каждым вызовом Execute()
Replace.Execute(
"<<ИНН_КПП_ОГРН>>",
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
"7802022" );
имяФ = ПолучитьИмяВременногоФайла("doc");
КомОбъект.SaveAS(имяФ); //здесь возможна ошибка (http://infostart.me/public/568913/)
Двоичные = новый ДвоичныеДанные(имяФ);
//в web клиенте Двоичные.Записать() не работает, поэтому
//Адрес = новый ХранилищеЗначения(Двоичные);
//возврат Адрес;
//а затем на клиенте:
//ПолучитьФайл(Адрес, "ИмяФайла.doc", Истина); //файл скачивается в браузере
КомОбъект.Application.Quit(); //закрыть Word
КомОбъект = 0;
Возврат Двоичные;
КонецФункции
&НаКлиенте
Процедура ЗапускПриложения(КодВозврата, ДополнительныйПараметр) Экспорт
КонецПроцедуры
&НаКлиенте
Процедура Печать(Команда)
//Попытка
// Ворд = Новый COMОбъект("Word.Application");
//Исключение
// Сообщить("Установи Word..");
// Возврат;
//КонецПопытки;
Двоичные = ЗаполнитьМакетНаСервере();
имяФ = ПолучитьИмяВременногоФайла("doc"); //в web клиенте не работает
Двоичные.Записать(имяФ); //в web клиенте не работает
//ЗапуститьПриложение(имяФ); //error Использование синхронных методов на клиенте запрещено!
Оповещение = Новый ОписаниеОповещения("ЗапускПриложения", ЭтотОбъект);
НачатьЗапускПриложения(Оповещение, имяФ,, Ложь); //ложь - не дожидаемся завершения приложения (в процедуру ЗапускПриложения всё равно заходим, сразу же
КонецПроцедуры
Пример использования ActiveDocument _Word.
Как создать поля-параметры в Word
1 Выбираем участок(кусок текста) для параметра, например: «Организация»(на первой картинке она уже скрыта) , а можно удалить его и спозиционироваться на этом месте.
2 В меню Word, переходим на «Вставка», далее «Экспресс-блоки», далее «Поле»
3 В открывшемся диалоговом окне, выбираем тип «DocVariable»
4 Назначаем имя, в моем случае «NomerDogovora»
5. Жмем «Ок», когда окно закроется, вы скорей всего не увидите изменений, так как скрыт «Word kod», нажмите Alt+F9, что бы открыть код.
6. Таким образом создаете все нужные Вам параметры
Ссылки: http://www.modber.ru/catalog/item3340.html, http://j008.ru/ps/027_ActiveDocument
WordОвские файлы *doc, *docx — это ZIP-архивы ((*xls и *xlsx тоже)). Меняем расширение docx на zip и распаковываем архив. Получим структуру папокфайлов. Текст файлов в формате XML. Удобно редактировать текст, менять картинки(папка wordmedia). И собираем обратно, архивируем.
СоздатьКаталог(«C:времКаткат01»);
Архив = Новый ЧтениеZipФайла();
Архив.Открыть(«C:времКаткат01наименование.zip»);
Архив.ИзвлечьВсе(«C:времКаткат01Unpacked», РежимВосстановленияПутейФайловZIP.Восстанавливать);
Архив.Закрыть();
// что-то делаем
//ПутьИзменяемыйФайл = «C:времКаткат01Unpackedwordmediaimage1.png»; //для docx
//файл = новый файл(ПутьИзменяемыйФайл);
//Если НЕ Файл.Существует() Тогда
//
//КонецЕсли;
Архиватор = Новый ЗаписьZipФайла(«C:времКаткат01наименование2.zip», «», «»);
Архиватор.Добавить(«C:времКаткат01Unpacked*.*», РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
Архиватор.Записать();
УдалитьФайлы(«C:времКаткат01»);
Я делал так (пользовался формами).
1. MSWord -> RClick на панелях инструментов Ворда -> «Формы» (чтобы отобразить панель инструментов «Формы»)
2. На панели инструментов «Формы» — LClick «Текстовое поле» -> В документе появится текстовое поле (серенькое, если затенение полей формы включено)
3. RClick на появившемся поле в документе -> Свойства
4. В окне «Параменты текстового поля» -> «Параменты поля/Закладка:» вводим, например, «MyTextField1» -> ОК
5. В текстовом поле документа (сереньком) вводим какой-нибудь текст, например, «QWERTY»
6. В ВБА (Alt+F11) -> пишем:
Код: Выделить всё
Sub tt()
MsgBox ThisDocument.FormFields.Item("MyTextField1").Range.Text
End Sub
7. F5 на макросе и видим на экране «QWERTY» ! Или «ЙЦУКЕН», как у меня, что в общем-то тоже радует глаз!
Я, кстати, ещё и защиту документа включал, чтобы «никто » не мог исправить ничего, кроме данных форм…
Пойдёт? Извиняюсь, что так подробно, вдруг всё-таки кто-ньть читать будет