Прочитать таблицу word в 1с

   ProgaN

17.02.10 — 08:45

Добрый день. Стоит задача — считать таблицу из файла WORD, сравнить построчно, добавить новый столбец, записать туда значение, выделить цветом. Помогите плиз. Нало есть:

Word.Documents.Open(ИмяФайла);

Word = Новый ComОбъект(«Word.Application»);

Документ = Word.ActiveDocument ();

Таблица = Документ.Tables.Item(1);

   чувак

2 — 17.02.10 — 08:50

// Устанавливаем жирный шрифт для шапки таблицы

Документ.Range( Таблица.Cell( Счетчик,!). Range.Start,

Таблица.Cell(Счетчик,4).Range.End).Font.Bold = Истина;

Для каждого Значение Из Объект[Параметр.Ключ] Цикл

Счетчик = Счетчик + 1;

// Заполняем содержимое таблицы

Попытка

Таблица.Cell(Счетчик,1).Range().InsertAfter(Значение.Имя);

Исключение

КонецПопытки;

   Stim

3 — 17.02.10 — 08:58

(0)//ПРоцедура заполняет заранее созданую таблицу в Ворде. мож пригодится тебе

Процедура БольшаяКраснаяКнопкаНажатие(Элемент)

   // Вставить содержимое обработчика.

   АктивныйДокумент = ПолучитьМакет(«Макет1»);

   
   WordDoc = АктивныйДокумент.Получить();

   WordDoc.Application.Visible=1;

   Таблица = WordDoc.Tables.Item(1);

   
   запрос= Новый запрос();

   запрос.Параметры.Вставить(«ДатаНачала»,ДатаНачала);

   запрос.Параметры.Вставить(«ДатаКонца»,ДатаКонца);

   запрос.Текст = «ВЫБРАТЬ

   |ВсеТемы.ДатаПроведения КАК ДатаПроведения,

   |ВсеТемы.ВремяПроведения КАК ВремяПроведения,

   
   |ВсеТемы.ПредметПроведения КАК ПредметПроведения,

   |ВсеТемы.ТемаЗанятия КАК ТемаЗанятия,

   
   |ВсеТемы.ФормаПроведения КАК ФормаПроведения

   | ИЗ РегистрСведений.ВсеТемы КАК ВсеТемы

   |ГДЕ ДатаПроведения >= &ДатаНачала И ДатаПроведения <= &ДатаКонца

   |УПОРЯДОЧИТЬ ПО ДатаПроведения «;

   Результат= запрос.Выполнить().Выгрузить();

   Если месяц(ЭлементыФОрмы.ДатаНачала.Значение)= месяц(ЭлементыФОрмы.ДатаКонц.Значение) Тогда

       НачалоНедели = День(ЭлементыФОрмы.ДатаНачала.Значение);

       Иначе НачалоНедели = ФОрмат(ЭлементыФОрмы.ДатаНачала.Значение,»ДФ=»»дд ММММ»»»);

       КонецЕсли;

       WordDoc.Variables.Item(«НачалоНедели»).Value=НачалоНедели;

       WordDoc.Variables.Item(«КонецНедели»).Value=Формат(ЭлементыФОрмы.ДатаКонц.Значение,»ДФ=»»дд ММММ гггг  ‘года’ «»»);  //»ДФ=»»дд ММММ»»»

       WordDoc.Variables.Item(«ДатаУтверждения»).Value=ФОрмат(((ЭлементыФОрмы.ДатаНачала.Значение)-3*60*60*24),»ДФ=»»дд ММММ гггг  ‘  года’ «»») ;

       WordDoc.Fields.UpDate();

   
        Для ии = 1 По Результат.Количество()-1 Цикл

                   Таблица.Rows.Add(Таблица.Rows(3));  // тиражируем первую строку сколько нужно раз

               КонецЦикла;

   НомерСтроки = 2;

   для каждого стр из Результат Цикл

       ДатаПроведения = Формат(стр.ДатаПроведения, «ДФ =»»дд.ММ»»»);

   НомерСтроки = НомерСтроки+1;    

   Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Строка(ДатаПроведения));

   Таблица.Cell(НомерСтроки,1).Range().Font.Size = 9;

   Таблица.Cell(НомерСтроки,2).Range().InsertAfter(Строка(стр.ВРемяПроведения));

   Таблица.Cell(НомерСтроки,2).Range().Font.Size = 9;

   Таблица.Cell(НомерСтроки,3).Range().InsertAfter(Строка(Строка(стр.ПредметПроведения)+» «+ строка(стр.ТемаЗанятия)));

   Таблица.Cell(НомерСтроки,3).Range().Font.Size = 9;

   присоед = Таблица.Cell(НомерСтроки, 1);

   Если присоед = Таблица.Cell(НомерСтроки-1, 1)        тогда

   Таблица.Cell(НомерСтроки-1, 1).Merge(присоед);

   Таблица.Cell(НомерСтроки,1).Range().InsertAfter(Строка(ДатаПроведения));

   Конецесли;

    WordDoc= 0;        

КонецЦикла;

КонецПроцедуры

никмейн

57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

1

29.04.2021, 19:21. Показов 8144. Ответов 23

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Приветствую еще раз, задача такова: есть Документ «УчетПассажиров», у него есть ТЧ «СписокПассажиров»(реквизиты ТЧ: ФИО,ДатаРождения»), надо из ворда загрузить данные из таблицы в ТЧ документа, создал внешнюю обработку, записал алгоритм,

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Попытка
        Word = Новый COMОбъект("Word.Application");
//включаю видимость
        Word.Visible = Истина;
        Word.Documents.Open(Объект.ИмяФайла);
        Документ = Word.ActiveDocument();
    Исключение
        Сообщить("При открытии файла произошла ошибка! Операция прервана! " + " " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
//хотел получить шапку как у экселя, оказывается такого метода нету у ворда
    //WordДокумент = Word.Sheets(1);
    ПоследняяСтрокаWord = WordДокумент.Sentences.Count; 
    Для СтрокаExcel = 2 По ПоследняяСтрокаWord Цикл
        ФИО = WordДокумент.?;
        ДатаРождения = WordДокумент.?;
        ЗаполнитьДаннымиДокумент(ФИО,ДатаРождения,Телефон);
    КонецЦикла;
    Word.Quit();

Миниатюры

Загрузка данных из Microsoft Word
 



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

29.04.2021, 19:21

23

1529 / 967 / 369

Регистрация: 31.05.2012

Сообщений: 3,393

29.04.2021, 21:14

2

У документа word-а есть объект Tables со всеми таблицами, вытащив нужный объект Table методом Tables.Item дергаем из ячеек данные. Ознакомиться можно здесь https://docs.microsoft.com/ru-… ject-model



1



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

29.04.2021, 22:05

 [ТС]

3

Аватар, а скажите из pdf в 1с можно загрузить данные? И если да, то скиньте инфу как это делается ,в инете чето не нашел



0



Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

30.04.2021, 03:53

4

Цитата
Сообщение от никмейн
Посмотреть сообщение

а скажите из pdf в 1с можно загрузить данные? И если да, то скиньте инфу как это делается ,в инете чето не нашел

Я делал через внешнюю компоненту, хотя где-то читал, что последнии версии платформы умеют читать PDF

никмейн, Какая версия платформы?



0



1155 / 702 / 203

Регистрация: 22.04.2013

Сообщений: 5,219

Записей в блоге: 1

30.04.2021, 07:00

5

ЧтениеPDF (PDFReader)
Описание:
Предназначен для чтения PDF-документа.
В веб-клиенте требуется установка расширения для работы с файлами.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.16.
Описание изменено в версии 8.3.18.

на тебе инфу скинул



0



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

30.04.2021, 11:08

 [ТС]

6

Dethmontt,

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Какая версия платформы?

8.3.18.1128

Добавлено через 1 час 18 минут
Dethmontt,

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

Я делал через внешнюю компоненту

Вы через ComОбъект делали?



0



Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

30.04.2021, 15:34

7

Цитата
Сообщение от никмейн
Посмотреть сообщение

Вы через ComОбъект делали?

Нет, натвиная компонента

Добавлено через 47 секунд
никмейн, но лучше используй то что предлагает IDE

Цитата
Сообщение от Yulunga
Посмотреть сообщение

ЧтениеPDF (PDFReader)



0



никмейн

57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

30.04.2021, 21:39

 [ТС]

8

Аватар, написал такой код, но у меня он ругается на метод Cells, чт не так я делаю?

Кликните здесь для просмотра всего текста

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Попытка
        Word = Новый COMОбъект("Word.Application");
        //включаю видимость
        Word.Visible = Истина;
        Word.Documents.Open(Объект.ИмяФайла);
        Документ = Word.ActiveDocument();
    Исключение
        Сообщить("При открытии файла произошла ошибка! Операция прервана! " + " " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    Table = Документ.Tables(1);
    ВсегоСтрок = Table.Rows.Count;
    ВсегоСтолбцов = Table.Columns.Count;
    Для СтрокаWord = 2 По ВсегоСтрок Цикл
        Row = Table.Rows(СтрокаWord);
        МассивWord = Новый Массив;
        Для СтолбецWord = 2 По ВсегоСтолбцов Цикл
            Значение = Row.Сells(СтолбецWord).Range.Text;
            МассивWord.Добавить(Значение);
        КонецЦикла;
        ЗаполнитьДаннымиДокумент(МассивWord);
    КонецЦикла;
    Word.Quit();



0



Аватар

1529 / 967 / 369

Регистрация: 31.05.2012

Сообщений: 3,393

30.04.2021, 22:00

9

1C
1
Значение = Table.Cell(ИндексСтроки,ИндексКолонки).Range.Text;

там и символы перевода каретки и строки тоже вроде прочитаются, не помню



0



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

01.05.2021, 13:20

 [ТС]

10

Аватар, Теперь на сell ругается



0



1832 / 1249 / 446

Регистрация: 16.01.2015

Сообщений: 5,460

01.05.2021, 18:21

11

никмейн,

Цитата
Сообщение от никмейн
Посмотреть сообщение

Значение = Row.Сells(СтолбецWord).Range.Text

Здесь все верно. Скоре всего «С» в «Сells» из русской раскладки. Перейди в англ клаву и напечатай, или поставь точку останова и из Вычислить выражение сделай этот код.
Других причин не вижу



0



1155 / 702 / 203

Регистрация: 22.04.2013

Сообщений: 5,219

Записей в блоге: 1

01.05.2021, 18:29

12

как именно ругается на метод сел покажи, да?



0



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

01.05.2021, 18:55

 [ТС]

13

polax, Да, действительно, написал с английской раскладной, ошибка исчезла спасибо, но возникла новая ошибка

Миниатюры

Загрузка данных из Microsoft Word
 



0



1832 / 1249 / 446

Регистрация: 16.01.2015

Сообщений: 5,460

01.05.2021, 19:00

14

никмейн, Текста хмл в приведенном коде не вижу — это раз
И второе, ясно же пишет, что кто-то случайно что-то нажал при просмотре текста хмл и установил какой-то символ. Удали и будет счастье

Добавлено через 1 минуту
Ну и еще ошибка. Создание массива надо выносить перед первым текстом, иначе в него будет попадать только последняя строка. Да и само создание массива спорно. Тут лучше тз



1



никмейн

57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

02.05.2021, 09:35

 [ТС]

15

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

но лучше используй то что предлагает IDE
ЧтениеPDF (PDFReader)

1C
1
2
ФайлPDF = Новый ЧтениеPDF;
ФайлPDF.Открыть(Объект.ИмяФайла);

а дальше какой метод использовать ПоказатьВложения()?
я правильно понимаю, в pdf инфа хранится не в виде текста? или нет



0



Модератор

Эксперт 1С

3711 / 2907 / 573

Регистрация: 10.03.2011

Сообщений: 11,447

Записей в блоге: 1

03.05.2021, 04:28

16

Цитата
Сообщение от никмейн
Посмотреть сообщение

а дальше какой метод использовать

я даже не знаю, у меня 8.3.14



0



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

04.05.2021, 00:06

 [ТС]

17

Кто нибудь может подсказать?



0



1832 / 1249 / 446

Регистрация: 16.01.2015

Сообщений: 5,460

04.05.2021, 16:11

18

никмейн, Даже на ИТС все как-то невнятно описано. Типа взяли и процитировали СП. И примеров не найти в интернете. Однако есть примеры с чтением и разбором ПДФ внешними утилитами. Например, программная конвертация в текст и потом чтение текста. Есть и другие способы. Но, на мой взгляд, оптимальный вариант, способ обращения к поставщику, чтобы свои долбанные прайсы присылал в формате Эксель )))).



0



Аватар

1529 / 967 / 369

Регистрация: 31.05.2012

Сообщений: 3,393

04.05.2021, 16:38

19

По поводу ЧтениеPDF молчок в сети. А точно ЧтениеPDF? Больше в сети про это:

1C
1
2
Объект = Новый ИзвлечениеТекста(ПолноеИмяФайла);
Текст = Объект.ПолучитьТекст();

Еще установить нужно Adobe PDF IFilter v6.0



0



57 / 39 / 19

Регистрация: 24.10.2016

Сообщений: 970

04.05.2021, 22:14

 [ТС]

20

Аватар, да ЧтениеPDF

Добавлено через 2 часа 45 минут
Аватар, установить нужно Adobe PDF IFilter v6.0
А без установки никак?
Мне просто скидывают файл пдф на почту

Добавлено через 1 минуту
polax, программная конвертация в текст и потом чтение текста. Есть и другие способы. 
Можно поподробнее пожалуйста?



0



Оглавление (нажмите, чтобы раскрыть)

Вставка таблицы в документ Word

Пример вставки таблицы в Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//определяем место вставки
Range = Doc.Range(0);
//создаем таблицу 2х2
Table = Doc.Tables.Add(Range, 2, 2);
Table.Style = "Сетка таблицы";

//определяем ширину столбцов
Table.columns(1).Width = 20;
Table.columns(2).Width = 50;

//заполняем первую строку
Table.Cell(1, 1).Select();
Word.Selection.Font.Bold = Истина;
Word.Selection.TypeText("1");
Table.Cell(1, 2).Select();
Word.Selection.TypeText("Один");

//заполняем вторую строку
Table.Cell(2, 1).Select();
Word.Selection.Font.Bold = Истина;
Word.Selection.TypeText("2");
Table.Cell(2, 2).Select();
Word.Selection.TypeText("Два");

//показываем документ на экране
Word.Visible = Истина;

Вставка текста в документ Word

Пример вставки текста в документ Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//добавляем пустой документ
Doc = Word.Documents.Add();

//добавляем 10 параграфов
Для Н = 1 По 10 Цикл
    Par = Doc.Paragraphs.Add();
    Par.Range.InsertBefore("Параграф №" + Н);
КонецЦикла;

//вставляем текст в начало докуменета
Range = Doc.Range(0);
Range.InsertBefore("Начало!" + Символы.ПС);

//вставляем текст после 16-го символа
Range = Doc.Range(16, 16);
Range.InsertAfter("[Вставка]");

//показываем документ на экране
Word.Visible = Истина;

Выделение текста

Пример выделения текста в документе Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Выделяемый текст");

//выделяем первое слово
Doc.Range(0, 10).Select();

//копируем выделение в буфер обмена
Word.Selection.Copy();

//меняем размер шрифта и т.д.
Word.Selection.Font.Size = 16;

//показываем документ на экране
Word.Visible = Истина;

Выравнивание текста

Пример выравнивания текста в документе Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Заголовок");
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Выравниваем этот текст");

//0 - по левому краю
//1 - по центру
//2 - по правому краю
//3 - по ширине
//текущей параграф по центру
Par.Alignment = 1;
//заголовок по правому краю
Doc.Paragraphs(1).Alignment = 2;

//показываем документ на экране
Word.Visible = Истина;

Замена текста в документе Word

Пример замены текста в документе Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Сбербанк ИНН/КПП: [ИНН]/[КПП]");

//заменяем ИНН
Word.Selection.Find.Text = "[ИНН]";
Word.Selection.Find.Replacement.Text = "7707083893";
Word.Selection.Find.Execute(, , , , , , , , , , 2);

//заменяем КПП
Word.Selection.Find.Text = "[КПП]";
Word.Selection.Find.Replacement.Text = "773601001";
Word.Selection.Find.Execute(, , , , , , , , , , 2);

//показываем документ на экране
Word.Visible = Истина;

Открытие документа Word

Пример открытия документа Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//открываем документ C:tmp1.docx
Word.Documents.Add("C:tmp1.docx");

//показываем документ на экране
Word.Visible = Истина;

Преобразование в таблицу

Пример преобразования документа Word в таблицу из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Таблица умножения:");

//формируем строку с разделителями
Сторока = "";
Для Н1 = 1 По 9 Цикл
    Для Н2 = 1 По 9 Цикл
        Сторока = Сторока + Н1 * Н2 + ?(
            Н2 = 9, "", Символы.Таб);
    КонецЦикла;
    Сторока = Сторока + Символы.ПС;
КонецЦикла;
Par.Range.InsertAfter(Сторока);

//переходим на строчку вниз
Word.Selection.MoveDown(5, 1, 0);
//выделяем таблицу
Word.Selection.MoveDown(5, 9, 1);

//конвертируем текст в таблицу
Word.Selection.ConvertToTable(1, 9, 9, 0);
Word.Selection.Tables(1).Style = "Сетка таблицы";

//показываем документ на экране
Word.Visible = Истина;

Создание документа Word

Пример создания документа Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//показываем документ на экране
Word.Visible = Истина;

Сохранение документа

Пример сохранения документа Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Сохраняемый текст");

//сохраняем документ в файл
Doc.SaveAs("C:tmp2.docx");

//закрываем документ
Doc.Close();
Word.Quit();

Удаление текста из документа Word

Пример удаления текста из документа Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Некоторый текст");

//удаляем слово некоторый и пробел
Range = Doc.Range(0, 10);
Range.Text = "";

//показываем документ на экране
Word.Visible = Истина;

Форматирование текста в документе Word

Пример форматирования текста в документе Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//создаем новый документ
Doc = Word.Documents.Add();

//добавляем параграф
Par = Doc.Paragraphs.Add();
Par.Range.InsertBefore("Форматируем этот текст");
//меняем размер шрифта
Par.Range.Font.Size = 15;
//меняем название шрифта
Par.Range.Font.Name = "Verdana";

//выбираем слово "этот"
Range = Doc.Range(12, 16);
//меняем шрифт на ширный
Range.Font.Bold = Истина;
//курсив
Range.Font.Italic = Истина;
//подчеркнутый
Range.Font.Underline = Истина;
//красный
Range.Font.Color = 13311;

//показываем документ на экране
Word.Visible = Истина;

Чтение текста документа Word

Пример чтения текста из документа Word из 1С

//создаем объект для работы с Word
Word = Новый COMОбъект("Word.Application");

//открываем документ C:tmp1.docx
Doc = Word.Documents.Open("C:tmp1.docx");

//читаем весь текст документа
Text = doc.Content.Text;
Сообщить(Text);

//читаем с 6-го по 10-й символ
From = 6;
To = 10;
Range = Doc.Range(From, To);
Text = Range.Text;
Сообщить(Text);

//закрыть документ
Doc.Close();
Word.Quit();

Функция ВывестиДокументВордВМоксель(ИмяФайла)

   Попытка
       // Для пересчётов использовать вхВорд.CentimetersToPoints(ЧислоСМ) и вхВорд.PointsToCentimeters(ЧислоПунктов)
       вСантиметр=6.25; // в средних символах шрифта
       //(при необходимости пересчитывать по вДиапазон.CharacterWidth — ширина символов, константа WdCharacterWidth

       вШиринаСтраницы=75; // эмпирически, довести до ума с учётом
       //сообщить(«стран ширина «+стран.PageWidth+», высота «+стран.PageHeight); // в пунктах, работает

       // Типовые настройки документа Ворд:
       // 1.25 до номера (отступ первой строки) и 1.89 табуляция (до основного текста)
       // Размеры листа А4 в сантиметрах: 21х29.7

       вхВорд=Новый COMОбъект(«Word.Application»);
       вПодтверждатьПреобразования=Истина;
       вТолькоЧтение=Истина;
       вДокумент=вхВорд.Documents.Open(ИмяФайла, вПодтверждатьПреобразования, вТолькоЧтение);

        #Область Проверки
       вСтраница=вДокумент.PageSetup;
       Если вСтраница.TextColumns.Count>1 Тогда
           Сообщить(«Текущая версия не обрабатывает многоколонные документы!»);
           вДокумент.Close(Ложь); // без сохранения
           вхВорд.Quit(0);
           вхВорд=«»;
           Возврат Неопределено;
       КонецЕсли;
       вШиринаСтраницыВорда=Окр(вхВорд.PointsToCentimeters(вСтраница.PageWidth),2);
       вВысотаСтраницыВорда=Окр(вхВорд.PointsToCentimeters(вСтраница.PageHeight),2);
       Если НЕ ((20<=вШиринаСтраницыВорда И вШиринаСтраницыВорда<=22) И
           (28<=вВысотаСтраницыВорда И вВысотаСтраницыВорда<=30)) Тогда
           Сообщить(«Текущая версия не обрабатывает размеры страницы, отличающиеся от А4!»);
           вДокумент.Close(Ложь); // без сохранения
           вхВорд.Quit(0);
           вхВорд=«»;
           Возврат Неопределено;
       КонецЕсли;
        #КонецОбласти

       // подготовка вывода таблиц
       мКомТаблиц=Новый Массив;
       Для Каждого вхТаблица Из вДокумент.Tables Цикл
           мКомТаблиц.Добавить(Новый Структура(«Начало,Конец,Таблица»,вхТаблица.Range.Start,вхТаблица.Range.End,вхТаблица));
       КонецЦикла;

        #Область ПодготовкаВыводаНумерованныхСписков
       // можно, конечно, рСписок.ConvertNumbersToText(ТипНомера)
       //- но это не лучший выход, и это изменение документа

       СоотПараграфовСписков=Новый Соответствие;
       // свойство вДокумент.Lists.Count ситуационно-зависимое, не применять!
       Для Каждого рСписок Из вДокумент.Lists Цикл
           //ОбработкаПрерыванияПользователя();
           // рЛист.CountNumberedItems();
           Для Каждого вПараграфСписка Из рСписок.ListParagraphs Цикл
               //ОбработкаПрерыванияПользователя();
               рФорматСписка=вПараграфСписка.Range.ListFormat;
               рТипСписка=рФорматСписка.ListType; // WdListType
               Если рТипСписка=0 Или рТипСписка=2 Или рТипСписка=6 Тогда
                   // ненумерованные и bullet игнорируем
               Иначе
                   // заниматься иерархией с проверкой погружения (рФорматСписка.ListLevelNumber) не будем,
                   // нам достаточно проверить так:
                   вПредставлениеПункта=СокрЛП(рФорматСписка.ListString);
                   // выравнивание смотрим по первой позиции уровней (хотя можно перебирать,
                   // смотреть по позиции или по NumberFormat)
                   Попытка вВыравнивание=рФорматСписка.ListTemplate.ListLevels.Item(0).Alignment
                   Исключение вВыравнивание=0 КонецПопытки;
                   // из первого уровня также можно брать NumberPosition — отступ,если будет надо;
                   //он в пунктах, поэтому тоже может потребоваться пересчёт!
                   Если СтрРазделить(вПредставлениеПункта,«.»,Ложь).Найти(рФорматСписка.ListValue)=0 Тогда
                       Сообщить(«Внимание! Нарушение нумерации списка для «+вПредставлениеПункта+«!»);
                   КонецЕсли;
                   // фиксируем для дальнейшего вывода
                   СоотПараграфовСписков.Вставить(вПараграфСписка.Range.Start,
                   Новый Структура(«Номер,Выравнивание», вПредставлениеПункта, вВыравнивание));
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;
        #КонецОбласти

       // FitTextWidth для диапазонов НЕ используем, в т.ч. для вДокумент.Range()

       тд=Новый ТабличныйДокумент;

        #Область ПодготовкаТабДокумента
       // устанавливаем ширины рабочих колонок А4
       вСтолбец=1;
       Пока Истина Цикл
           тд.Область(1,вСтолбец,1,вСтолбец).ШиринаКолонки=Окр(вСантиметр/4,2);
           вСтолбец=вСтолбец+1;
           Если тд.ШиринаТаблицы>вШиринаСтраницы Тогда
               Прервать;
           КонецЕсли;
       КонецЦикла;
        #КонецОбласти

        #Область ВыводОсновныхДанных
       вСтрока=1;
       вПравыйКрайнийСтолбец=тд.ШиринаТаблицы;
       вИдетТаблица=Ложь;

       Для Каждого вПараграф Из вДокумент.Paragraphs Цикл
           //ОбработкаПрерыванияПользователя();
           // к сожалению, вПараграф.ListNumberOriginal использовать ненадёнжно
           вДиапазон=вПараграф.Range;
           вТекстДиапазона=вДиапазон.Text;
           вНачалоДиапазона=вДиапазон.Start;
           вКонецДиапазона=вДиапазон.End;

            #Область ВыводПозицииНумерованногоСписка
           // использовать вДиапазон.ListFormat.ListLevelNumber и
           // вДиапазон.ListFormat.ListValue не рекомендуется
           вПараграфСписка=СоотПараграфовСписков.Получить(вНачалоДиапазона);
           Если вПараграфСписка=Неопределено Тогда
               вПредставлениеПункта=«»;
               вВыравнивание=0;
           Иначе
               вПредставлениеПункта=СокрЛП(вПараграфСписка.Номер);
               вВыравнивание=вПараграфСписка.Выравнивание;
           КонецЕсли;
           Если ПустаяСтрока(вПредставлениеПункта) Тогда
               // нумерации списка нет
               вГраницаОбластиПараграфа=1;
           Иначе // надо выводить № пункта списка
               вОбластьНомера=тд.Область(вСтрока,1,вСтрока,4);
               вОбластьНомера.Объединить();
               вОбластьНомера.Текст=вПредставлениеПункта;
               // или вДиапазон.ListStyle.Font, если они разные:
               вОбластьНомера.Шрифт=ПостроительШрифта(вДиапазон.Font);
               вОбластьНомера.ГоризонтальноеПоложение=ПолучениеВыравнивания(вВыравнивание);
               вОбластьНомера.ВертикальноеПоложение=ВертикальноеПоложение.Верх; // по умолчанию
               вГраницаОбластиПараграфа=5;
           КонецЕсли;
            #КонецОбласти

           вхТаблица=Неопределено;
           Для Каждого знч Из мКомТаблиц Цикл
               Если знч.Начало<=вНачалоДиапазона И вНачалоДиапазона<=знч.Конец
                   И знч.Начало<=вКонецДиапазона И вКонецДиапазона<=знч.Конец
                   Тогда // можно было бы вДиапазон.InRange(вхТаблица.Range), но оно медленнее
                   вхТаблица=знч.Таблица; Прервать;
               КонецЕсли;
           КонецЦикла;

           Если вхТаблица=Неопределено Тогда
               вИдетТаблица=Ложь;

                #Область ВыводОбычногоАбзаца
               // для параграфа и Диапазон.ParagraphFormat, при необходимости:
               // вПараграф.FirstLineIndent — Возвращает или устанавливает значение
               // в пунктах для первой линии или отступа.

               // вПараграф.LeftIndent — Отступ слева в пунктах.
               // вПараграф.RightIndent — Отступ справа в пунктах.
               // вПараграф.LineSpacing — Междустрочный интервал.

               // вПараграф.PageSetup.PageWidth аналогично ширине документа в целом,
               // можно не заморачиваться

               вОбластьПараграфа=тд.Область(вСтрока,вГраницаОбластиПараграфа,вСтрока,вПравыйКрайнийСтолбец);
               вОбластьПараграфа.Объединить();
               вОбластьПараграфа.Текст=вТекстДиапазона;
               вОбластьПараграфа.Шрифт=ПостроительШрифта(вДиапазон.Font); // а не вПараграф.Style.Font!
               // или лучше вДиапазон.ParagraphFormat.Alignment?:
               вОбластьПараграфа.ГоризонтальноеПоложение=ПолучениеВыравнивания(вПараграф.Alignment);
               вОбластьПараграфа.ВертикальноеПоложение=ВертикальноеПоложение.Верх; // по умолчанию
               вОбластьПараграфа.РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить; // по умолчанию
                #КонецОбласти

               вСтрока=вСтрока+1;
           Иначе
               Если не вИдетТаблица Тогда // выводим таблицу,
                   // а далее пропускаем все входящие в неё диапазоны, и идём до её конца
                   ВывестиТаблицу(вхВорд, вхТаблица, тд, вСтрока);
               КонецЕсли;
               вИдетТаблица=Истина;
               Продолжить; // вСтрока уже «промотана» до нужной позиции пост-таблицы
           КонецЕсли;

       КонецЦикла;

        #КонецОбласти

       вДокумент.Close(Ложь); // без сохранения
       вхВорд.Quit(0);
       вхВорд=«»;

       Возврат тд;

   Исключение

       Сообщить(«Ошибка: «+ОписаниеОшибки());
       Возврат Неопределено;

   КонецПопытки;

КонецФункции

  1. Здравствуйте.
    1С:Предприятие 8.3 (8.3.13.1513)
    Управление производственным предприятием, редакция 1.3
    Толстый клиент. Обычное приложение.

    Читаю таблицу из ворда

    WordApplication = Новый COMОбъект("Word.Application");       
      
        WordApplication.Documents.Open(ИмяФайла);
          
        Документ = WordApplication.ActiveDocument();
        Таблица  = Документ.Tables.Item(1);

    Далее хочу получить значение в ячейке. Вычислить выражение показывает такую картину

    upload_2019-1-23_10-41-10.png

    В самом ворде какой-то служебный символ в каждой ячейке

    upload_2019-1-23_10-42-45.png

    Не могу его удалить в 1С.
    Как это сделать?
    СокрЛП — не помогает
    Думаю, что нашел в Unicode код символа, попробовал так

    СтрЗаменить(ПрочтенноеЗначение,Символ(164),"")

    тоже не помогло.

    Последнее редактирование: 23 янв 2019
  2. Вот этого не хотелось бы делать, думаю есть более «верный» метод

    Значение = Таблица.cell(1,2).Range().Text;
    Значение = Лев(Значение, Стрдлина(Значение)-2);
    
    

    — Объединение сообщений, 23 янв 2019

    Или может быть я не правильно получаю значение?

    Последнее редактирование: 23 янв 2019

  3. TrasserZero

    Offline

    TrasserZero
    Опытный в 1С

    Регистрация:
    26 окт 2016
    Сообщения:
    69
    Симпатии:
    4
    Баллы:
    29

    емнип если СтрЗаменить не работает — не тот код. Там же он не один, есть еще кодировка — Юникод, вин1251 и тп..
    // код первого символа в строке
    КодПервогоСимволаФамилии = КодСимвола(«Грозный»);
    Сообщить(КодПервогоСимволаФамилии); // 1043, потому что Unicode

    попробуйте вывести код этого символа..типа
    // код третьего символа в строке
    Сообщить(КодСимвола(«ABC», 3)); //67


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Содержание:

1.      Для чего нужна работа в 1С 8.3 с Word?

2.      Как работать программно с документами MS WORD (расширениями .doc и .docx)?

3.      Заполнение в 1С 8 таблицы Word  

1.      Для чего нужна работа в 1С 8.3 с Word?

В этой статье обсудим, как в 1С можно работать с форматом текста Word: создание, редактирование, копирование документов MS Word. Самый распространенный вариант использования программного заполнения документов MS Word – это заполнение шаблонов в ворде. То есть после создания шаблона word, пользователь помечает параметры квадратными скобками [] (это наиболее частый вариант экранирования параметров) или знаками больше меньше <>, после чего при нажатии кнопки «Печать Word» или «Сохранить Word» открывается заполненный документ MS Word. Большинству шаблонов, конечно, подойдут и табличные документы, но лично мною было создано множество шаблонов, которые требовали форматирования текстового документа именно в MS Word (чаще из-за удобства редактирования шаблона MS Word для пользователя). Это были договора, сертификаты, письма и различные заявления. Все они сохранялись в формат текста Word и в дальнейшем отправлялись по почте или уходили на печать.  

2.      Как работать программно с документами MS WORD (расширениями .doc и .docx)?

В дополнение к вступлению скажу, что хранение самих шаблонов MS Word мы в данной статье рассматривать не будем. Лично я использовал и справочники и регистры сведений (хранение в реквизите с типом ХранилищеЗначения), макеты с типом двоичные данные, аналог хранения файлов в базе данных. И были случаи использования указанного пути к каталогу с шаблонами, наподобие хранения файлов в томах на диске. Выбор за вами. В статье мы рассмотрим конкретно программный принцип работы с MS Word.

Рис. 1 Пример оформления документа word, который будет использован как шаблон

Получаем шаблон Word, например, из макета и сохраняем его во временный файл Word.


Рис. 2 Сохранение временного файла Word

Создаем Com-объект и сам документ Word, передавая в метод Add путь к ранее сохраненному шаблону.

Рис. 3 Программное создание COM-объекта и документа Word

Для заполнения параметров я использую структуру (или соответствие), ключ и значение. Имя ключа – это параметр замены, а значение – то, на которое меняем экранированный параметр.
В итоге параметры заполнения (структуру) мы размещаем где удобно, получаем ее и заполняем уже созданный документ MS Word.

Рис. 4 Определение параметров заполнения

С методом Find. Execute (Word) лучше всего ознакомится отдельно на официальном сайте Microsoft. Там же можно посмотреть описание и других методов, которые могут пригодится.

После замены разворачиваем окно и делаем его активным (то есть показываем пользователю заполненный шаблон MS word).

Рис. 5 Активация окна Word

И это – весь процесс заполнения шаблона 1С Word! Да, это так просто! Однако на моей практике встречались случаи, когда в шаблоне необходимо было заполнить табличную часть, например, приложение к договору со спецификацией. Здесь необходим отдельный блок кода и особенный шаблон.  

3.      Заполнение таблиц в программе Word

В шаблоне создаем одну строку с нужным форматированием. Получаем таблицу или выборку со значениями строк для заполнения их в документе MS Word. Заполнение таблицы в программе Word происходит по номеру строки и колонки, то есть мы точно должны знать нумерацию колонок (но можно подумать и о другом заполнении). Итак, получаем таблицу word по номеру и заполняем значениями.

Рис. 6 Заполнение таблицы в Word

В итоге скажу, что работа с Microsoft Word может быть на очень высоком уровне, но для этого необходимо изучить документацию от Microsoft по Word. И тогда в ворде из 1С можно будет творить настоящие чудеса (как собственно и в Excel)!

Специалист компании «Кодерлайн»

Вадим Хоменко

В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.

Код 1C v 8.х

 
// "ПутьКФайлу" - строка. Полное имя файла в формате MSWord.
// "Ссылка" - ДокументСсылка (в моем случае - счет).
Процедура ВыполнитьОбработку() Экспорт

Попытка
Объект = ПолучитьCOMОбъект(ПутьКФайлу);
// Покажем документ. Для красоты.
Объект.Application.Visible = 1;
Word = Объект.Application;

Doc = Объект.Application.Documents(1);
Doc.Activate();

// Готовим переменную в которой будет содержимое нашего документа
// (текст, таблицы и проч).
Text = Word.S_election;

// Очистим документ
// Ctrl-A
Text.WholeStory();
// Del
Text.Delete(1, 1);
// Двигаемся на 3 строки ниже. Документ пустой, поэтому добавляем
// строки "Переводами коретки"

Text.TypeText(Символы.ВК);
Text.TypeText(Символы.ВК);
Text.TypeParagraph(); // другой вариант того же действия
// Выводим текст.
Text.TypeText("Обычный текст, набранный первую очередь");

// Курсор в конце строки
// Эмулируем нажатие Shift+Home - выделяем строку
Text.HomeKey(, 1);
// Форматирование выделенной строки
Text.Font.Bold = 9999998;
Text.Font.Size = 14;
Text.Font.Name = "Verdana";

// Сдвигаем курсор. Сдвинуть курсор по строкам возможно, только,
// если эти строки уже содержат текст, иначе ничего не произойдет.
Text.MoveUp(,2); // вверх на 2 строки
//Word.S_election.MoveDown(,числострок); // вниз
//Word.S_election.MoveLeft(,числострок); // влево
//Word.S_election.MoveRight(,числострок);// вправо

// Добавление текста. Текст выводится начиная с текщей позиции
// курсора.
Text.HomeKey(, 1);
Text.TypeText("Обычный текст, набранный во вторую очередь");

Text.MoveDown(,1); // вниз на 2 строки
Text.EndKey(); // в конец строки
Text.TypeParagraph(); // и в начало следующей строки

// Очищаем форматирование
Text.ClearFormatting();
// Добавляем таблицу.
// Получаем текущую позицию курсора
Position = Text.Range();

// Параметры: Позиция, число строк, число колонок,
// последние 2 параметра отвечают за автоподбор высоты и отображение
// границ таблицы
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;
// В качестве текста можно передать только значение "простого" формата
// все агрегатные объекты, переданные как текст, что нормально для платформы 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Объект(ПутьКФайлу);
Объект = ПолучитьCOMОбъект("C:UsersNKrylovDesktopТест.docx");
// Покажем документ.
Объект.Application.Visible = 1;
Word = Объект.Application;

ThisDocument = Word.Documents(1);
ThisDocument.Activate();

// Отключим проверку грамматики и вывод информации о грамматических ошибках.
ThisDocument.GrammarChecked=0;
ThisDocument.ShowGrammaticalErrors=0;

// Готовим переменную в которой будет содержимое документа (текст).
S_election = Word.S_election;

// Очистим документ
// Ctrl-A
S_election.WholeStory();
// Del
S_election.Delete(1, 1);

// Уменьшим междустрочный интервал.
S_election.ParagraphFormat.LineSpacingRule = 0; // 1 по умолчанию
S_election.ParagraphFormat.SpaceAfter = 0; // 10 по умолчанию

// Разметим документ. Это можно сделать и предварительно в макете
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();

// Так можно работать с текстом только в конкреной области документа - это и будет замена метода Find-Execute.
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;

// После вывода таблицы, появится "лишняя строка", удалим ее
// в результате курсор встанет в область закладки 4
S_election.MoveDown(, 1);
S_election.Delete(1, 1);

// Этот текст будет выведен не с последней позиции курсора, а в активной области.
// в данном случае - в области закладки 2
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();

// В области закладки 4 сформируем нумерованный список
ThisDocument.Bookmarks("Закладка4").Range.S_elect();
S_election = Word.S_election; // активная (выделенная) область будет начинаться
// от закладки 4)

// Добавим текст "для опытов"
// 1
S_election.TypeText("sdcsdcsdcsdc");
S_election.TypeParagraph();
// 2
S_election.TypeText("sdcsdcsdcsdc");
S_election.TypeParagraph();
// 3
S_election.TypeText("sdcsdcsdcsdc");
S_election.TypeParagraph();
// 4
S_election.TypeText("sdcsdcsdcsdc");
S_election.TypeParagraph();
// Выделяем введенный текст
S_election.MoveUp(,4,1);

// Настроим шаблон объекта галереи списков
// Галереи списков бывают несккольких типов, 2 - нумерованные списки
ListTemplate = Word.ListGalleries(2).ListTemplates(1).ListLevels(1);
// Формат нумератора списка - точка после символа нумерации
ListTemplate.NumberFormat = "%1.";
// стиль нумератора - арабские цифры
ListTemplate.NumberStyle = 0; // wdListNumberStyleArabic
// 4 - маленькие латинские буквы.
// 2 - маленькие римские цифры.
// 58- меленькие русские буквы.
// Font = Template.Font; // можно указать форматирование текста списка

// Применим шаблон к выделенному тексту
S_election.Range.ListFormat.ApplyListTemplateWithLevel( Word.ListGalleries(2).ListTemplates(1));

// Перейдем в конец текста
S_election.EndKey(6);

// Добавим картинку
// Параметры: путь к файлу, создавать ссылку на картинку, сохранять с файлом
Picture = S_election.InlineShapes.AddPicture("C:UsersNKrylovDesktopНовый.bmp", Ложь, Истина);
// Зададим размер
Picture.Height = 100;
Picture.Width = 150;

// Чтобы установить обтекание текста, конвертируем рисунок в фигуру
Shape = Picture.ConvertToShape();
Shape.WrapFormat.Type = 0; // по контуру...

ThisDocument.Save();
//Объект.Application.Quit();
Объект = Неопределено;
Исключение
ThisDocument.Save();
Сообщить(ОписаниеОшибки());
//Объект.Application.Quit();
Объект = Неопределено;
КонецПопытки;

КонецПроцедуры

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Птица в excel формулы
  • Прочитать pdf в excel
  • Пстр найти или excel
  • Прочитать html в word
  • Пстр в excel это пример

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии