Работа с MS Word через OLE В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Код 1C v 8.х
Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( ПутьКФайлу) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
Doc = Объект. Application. Documents( 1 ) ;
Doc. Activate( ) ;
Text = Word. S_election;
Text. WholeStory( ) ;
Text. Delete( 1 , 1 ) ;
Text. TypeText( Символы. ВК) ;
Text. TypeText( Символы. ВК) ;
Text. TypeParagraph( ) ;
Text. TypeText( "Обычный текст, набранный первую очередь" ) ;
Text. HomeKey( , 1 ) ;
Text. Font. Bold = 9999998 ;
Text. Font. Size = 14 ;
Text. Font. Name = "Verdana" ;
Text. MoveUp( , 2 ) ;
Text. HomeKey( , 1 ) ;
Text. TypeText( "Обычный текст, набранный во вторую очередь" ) ;
Text. MoveDown( , 1 ) ;
Text. EndKey( ) ;
Text. TypeParagraph( ) ;
Text. ClearFormatting( ) ;
Position = Text. Range( ) ;
Table = Doc. Tables. Add( Position, 1 , 6 , 1 , 2 ) ;
Table. Columns( 1 ) . PreferredWidth= 10 ;
Table. Columns( 2 ) . PreferredWidth= 50 ;
Table. Columns( 3 ) . PreferredWidth= 10 ;
Table. Columns( 4 ) . PreferredWidth= 10 ;
Table. Columns( 5 ) . PreferredWidth= 10 ;
Table. Columns( 6 ) . PreferredWidth= 10 ;
Row1= Table. Rows( 1 ) ;
Row1. Cells( 1 ) . Range. Text= "№ п/п" ;
Row1. Cells( 2 ) . Range. Text= "Наименование" ;
Row1. Cells( 4 ) . Range. Text= "Кол-во" ;
Row1. Cells( 3 ) . Range. Text= "Ед. изм." ;
Row1. Cells( 5 ) . Range. Text= "Цена,руб." ;
Row1. Cells( 6 ) . Range. Text= "Сумма,руб." ;
НомерСтроки = 1 ;
Для каждого СтрокаТовары Из Ссылка. Товары Цикл
Row= Table. Rows. Add( ) ;
Row. Cells( 1 ) . Range. Text= НомерСтроки;
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 2 ) . Range. Text= СтрокаТовары. Номенклатура. Наименование
+ ? ( ЗначениеЗаполнено( СтрокаТовары. ХарактеристикаНоменклатуры) ,
" (" + СтрокаТовары. ХарактеристикаНоменклатуры+ ")" , "" ) ;
Row. Cells( 4 ) . Range. Text= Строка( СтрокаТовары. Количество) ;
Row. Cells( 4 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 3 ) . Range. Text= ? ( ЗначениеЗаполнено( СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения)
, СтрокаТовары. Номенклатура. БазоваяЕдиницаИзмерения. Наименование, "-" ) ;
Row. Cells( 3 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 5 ) . Range. Text= Формат( СтрокаТовары. Цена, "ЧДЦ=2" ) ;
Row. Cells( 5 ) . Range. ParagraphFormat. Alignment = 1 ;
Row. Cells( 6 ) . Range. Text= Формат( СтрокаТовары. Сумма, "ЧДЦ=2" ) ;
Row. Cells( 6 ) . Range. ParagraphFormat. Alignment = 1 ;
НомерСтроки= НомерСтроки+ 1 ;
КонецЦикла ;
Row1. Range. Font. Bold = 9999998 ;
Row1. Range. Font. Size = 14 ;
Row1. Range. Font. Name = "Verdana" ;
Row1. Range. ParagraphFormat. Alignment = 1 ;
Row = Table. Rows. Add( ) ;
Row. Range. Font. Bold = 9999998 ;
Row. Cells( 1 ) . Range. Text= "Итого:" ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
Попытка
Table. cell( НомерСтроки+ 1 , 1 ) . Merge( Table. cell( НомерСтроки+ 1 , 5 ) ) ;
Исключение
КонецПопытки ;
Попытка
Row. Cells( 1 ) . Range. ParagraphFormat. Alignment = 3 ;
Row. Cells( 2 ) . Range. Text= Формат( Ссылка. Товары. Итог( "Сумма" ) , "ЧДЦ=2" ) ;
Row. Cells( 2 ) . Range. ParagraphFormat. Alignment = 1 ;
Doc. Save( ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
Исключение
Doc. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект. Application. Quit( ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Код 1C v 8.х Процедура ВыполнитьОбработку() Экспорт
Попытка
Объект = ПолучитьCOMОбъект( "C:\Users\NKrylov\Desktop\Тест.docx" ) ;
Объект. Application. Visible = 1 ;
Word = Объект. Application;
ThisDocument = Word. Documents( 1 ) ;
ThisDocument. Activate( ) ;
ThisDocument. GrammarChecked= 0 ;
ThisDocument. ShowGrammaticalErrors= 0 ;
S_election = Word. S_election;
S_election. WholeStory( ) ;
S_election. Delete( 1 , 1 ) ;
S_election. ParagraphFormat. LineSpacingRule = 0 ;
S_election. ParagraphFormat. SpaceAfter = 0 ;
ThisDocument. Bookmarks. Add( "Закладка1" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "34r3 " ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка3" , S_election. Range( ) ) ;
S_election. TypeParagraph( ) ;
ThisDocument. Bookmarks. Add( "Закладка4" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка3" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Bookmark = ThisDocument. Bookmarks( "Закладка3" ) ;
Table = ThisDocument. Tables. Add( Bookmark. Range( ) , 1 , 5 , 1 , 2 ) ;
Table. Rows( 1 ) . Cells( 1 ) . Range. Text = 1 ;
Table. Rows( 1 ) . Cells( 2 ) . Range. Text = 2 ;
Table. Rows( 1 ) . Cells( 3 ) . Range. Text = 3 ;
Table. Rows( 1 ) . Cells( 4 ) . Range. Text = 4 ;
Table. Rows( 1 ) . Cells( 5 ) . Range. Text = 5 ;
S_election. MoveDown( , 1 ) ;
S_election. Delete( 1 , 1 ) ;
ThisDocument. Bookmarks( "Закладка2" ) . Range. S_elect( ) ;
S_election = Word. S_election;
Text = S_election. Range. Text;
S_election. TypeText( Text + " sdcsdcs" ) ;
S_election. HomeKey( , 1 ) ;
ThisDocument. Bookmarks. Add( "Закладка2" , S_election. Range( ) ) ;
S_election. EndKey( ) ;
ThisDocument. Bookmarks( "Закладка4" ) . Range. S_elect( ) ;
S_election = Word. S_election;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. TypeText( "sdcsdcsdcsdc" ) ;
S_election. TypeParagraph( ) ;
S_election. MoveUp( , 4 , 1 ) ;
ListTemplate = Word. ListGalleries( 2 ) . ListTemplates( 1 ) . ListLevels( 1 ) ;
ListTemplate. NumberFormat = "%1." ;
ListTemplate. NumberStyle = 0 ;
S_election. Range. ListFormat. ApplyListTemplateWithLevel( Word. ListGalleries( 2 ) . ListTemplates( 1 ) ) ;
S_election. EndKey( 6 ) ;
Picture = S_election. InlineShapes. AddPicture( "C:\Users\NKrylov\Desktop\Новый.bmp" , Ложь , Истина ) ;
Picture. Height = 100 ;
Picture. Width = 150 ;
Shape = Picture. ConvertToShape( ) ;
Shape. WrapFormat. Type = 0 ;
ThisDocument. Save( ) ;
Объект = Неопределено ;
Исключение
ThisDocument. Save( ) ;
Сообщить( ОписаниеОшибки( ) ) ;
Объект = Неопределено ;
КонецПопытки ;
КонецПроцедуры
Автор: Крылов Николай Опубликовано на сайте: https://HelpF.pro Прямая ссылка: https://HelpF.pro/faq/view/1031.html