Большинству операций, выполняемых программным способом, есть эквиваленты в пользовательском интерфейсе (UI), доступные как команды в меню и на панелях инструментов. Также существует нижележащая архитектура, обеспечивающая поддержку команд, выбираемых из UI. Всякий раз, когда вы создаете новый документ Word, он базируется на каком-либо шаблоне; расширение файлов шаблонов «.dot», а файлы документов – «.doc». Шаблон Word может содержать текст, код, стили, панели инструментов, элементы автотекста, комбинации клавиш для быстрого доступа к командам. Новый документ связывается с шаблоном и получает полный доступ к его элементам. Если вы не указываете конкретный шаблон, новый документ создается на основе стандартного шаблона «Normal.dot», который устанавливается при установке Word).
Шаблон Normal.dot является глобальным, он доступен любому документу, который вы создаете. Вы могли бы при желании поместить весь свой код в Normal.dot и создавать все документы в своей среде на основе собственного шаблона Normal (Обычный). Но тогда его файл мог бы стать чрезмерно большим, поэтому более эффективное решение для многих разработчиков — создание собственных шаблонов для конкретных приложений. В документах, создаваемых на основе вашего шаблона, код из стандартного шаблона Normal по-прежнему будет доступен. При необходимости можно связывать документ с несколькими шаблонами в дополнение к шаблону Normal.
Для работы с приложением Microsoft Word в .NET, используется объект Application, который является предком всех остальных объектов. Получив на него ссылку, вы можете работать с его методами и свойствами. Этот объект предоставляет большой набор методов и свойств, позволяющих программным путем управлять Microsoft Word. Код инициализации нового объекта Application, представлен ниже.
Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application();
Чтобы открыть существующий документ или создать новый, необходимо создать новый объект Document.
object missing = System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);
Выполняя какую-либо операцию в пользовательском интерфейсе Word (например, добавляя верхний колонтитул), вы выделяете соответствующую секцию, используя объект «Selection», определяющий текущую позицию «невидимого» курсора и применяете к ней новый параметр форматирования с использованием объекта «Range». Данный объект представляет область в документе и может включать в себя все что угодно — от пары символов, до таблиц, закладок и много другого. Вы не ограничены одним объектом «Range» — в одном документе можно определить сразу несколько таких объектов.
//Добавление верхнего колонтитула foreach (Microsoft.Office.Interop.Word.Section section in document.Sections) { Microsoft.Office.Interop.Word.Range headerRange = section.Headers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; headerRange.Fields.Add(headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage); headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue; headerRange.Font.Size = 10; headerRange.Text = "Верхний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление нижнего колонтитула foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections) { Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed; footerRange.Font.Size = 10; footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; footerRange.Text = "Нижний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; }
Чтобы добавить текст в документ, необходимо указать позицию для вставки и сам текст.
//Добавление текста в документ document.Content.SetRange(0, 0); document.Content.Text = "www.CSharpCoderR.com" + Environment.NewLine;
Так же вы можете применить к тексту определенный стиль.
//Добавление текста со стилем Заголовок 1 Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing); object styleHeading1 = "Заголовок 1"; para1.Range.set_Style(styleHeading1); para1.Range.Text = "Исходники по языку программирования CSharp"; para1.Range.InsertParagraphAfter();
В классе Microsoft.Office.Interop.Word.Document, присутствует коллекция «Tables», которая позволяет добавить таблицу в документ с использованием метода Add.
//Создание таблицы 5х5 Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing); firstTable.Borders.Enable = 1; foreach (Row row in firstTable.Rows) { foreach (Cell cell in row.Cells) { //Заголовок таблицы if (cell.RowIndex == 1) { cell.Range.Text = "Колонка " + cell.ColumnIndex.ToString(); cell.Range.Font.Bold = 1; //Задаем шрифт и размер текста cell.Range.Font.Name = "verdana"; cell.Range.Font.Size = 10; cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25; //Выравнивание текста в заголовках столбцов по центру cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; } //Значения ячеек else { cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString(); } } }
Для функционирования описанного выше кода, необходимо добавить к текущему проекту объектную библиотеку MS Word. Перейдите в меню «Проект» и выберете команду «Добавить ссылку» или в обозревателе решений, найдите пункт «Ссылки» и сделайте клик правой клавишей мыши по нему, из появившегося контекстного меню выберете соответствующий пункт.
В открывшемся окне «Добавить ссылку», перейдите на вкладку «COM» и выберете «Microsoft Word 14.0 Object Library» из предложенного списка библиотек.
В обозревателе решений у вас появится ссылка на данную библиотеку.
Перейдите в конструктор главной формы и добавьте из панели элементов, командную кнопку «Button». Данный элемент необходим для запуска процесса создания документа и вызов MS Word для отображения.
Сделайте двойной клик левой клавишей мыши по элементу «Button» и вы перейдете в автоматически созданный метод события «button1_Click». Добавьте в него приведенный ниже код.
try { Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application(); winword.Visible = false; //Заголовок документа winword.Documents.Application.Caption = "www.CSharpCoderR.com"; object missing = System.Reflection.Missing.Value; //Создание нового документа Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing); //добавление новой страницы //winword.Selection.InsertNewPage(); //Добавление верхнего колонтитула foreach (Microsoft.Office.Interop.Word.Section section in document.Sections) { Microsoft.Office.Interop.Word.Range headerRange = section.Headers[ Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; headerRange.Fields.Add( headerRange, Microsoft.Office.Interop.Word.WdFieldType.wdFieldPage); headerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; headerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdBlue; headerRange.Font.Size = 10; headerRange.Text = "Верхний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление нижнего колонтитула foreach (Microsoft.Office.Interop.Word.Section wordSection in document.Sections) { // Microsoft.Office.Interop.Word.Range footerRange = wordSection.Footers[Microsoft.Office.Interop.Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range; //Установка цвета текста footerRange.Font.ColorIndex = Microsoft.Office.Interop.Word.WdColorIndex.wdDarkRed; //Размер footerRange.Font.Size = 10; //Установка расположения по центру footerRange.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter; //Установка текста для вывода в нижнем колонтитуле footerRange.Text = "Нижний колонтитул" + Environment.NewLine + "www.CSharpCoderR.com"; } //Добавление текста в документ document.Content.SetRange(0, 0); document.Content.Text = "www.CSharpCoderR.com" + Environment.NewLine; //Добавление текста со стилем Заголовок 1 Microsoft.Office.Interop.Word.Paragraph para1 = document.Content.Paragraphs.Add(ref missing); object styleHeading1 = "Заголовок 1"; para1.Range.set_Style(styleHeading1); para1.Range.Text = "Исходники по языку программирования CSharp"; para1.Range.InsertParagraphAfter(); //Создание таблицы 5х5 Table firstTable = document.Tables.Add(para1.Range, 5, 5, ref missing, ref missing); firstTable.Borders.Enable = 1; foreach (Row row in firstTable.Rows) { foreach (Cell cell in row.Cells) { //Заголовок таблицы if (cell.RowIndex == 1) { cell.Range.Text = "Колонка " + cell.ColumnIndex.ToString(); cell.Range.Font.Bold = 1; //Задаем шрифт и размер текста cell.Range.Font.Name = "verdana"; cell.Range.Font.Size = 10; cell.Shading.BackgroundPatternColor = WdColor.wdColorGray25; //Выравнивание текста в заголовках столбцов по центру cell.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; cell.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; } //Значения ячеек else { cell.Range.Text = (cell.RowIndex - 2 + cell.ColumnIndex).ToString(); } } } winword.Visible = true; } catch (Exception ex) { MessageBox.Show(ex.Message); }
Запустите ваш проект, нажав на клавиатуре, клавишу «F5». Нажмите на единственную кнопку, расположенную на главной форме вашего проекта. У вас автоматически откроется документ Microsoft Word с заполненным верхним и нижним колонтитулом, обычным и с применением стиля текстом, а так же заполненной таблицей.
Для сохранения документа в определенной директории, добавьте приведенный ниже код, после строки «winword.Visible = true;».
//Сохранение документа object filename = @"d:temp1.docx"; document.SaveAs(ref filename); //Закрытие текущего документа document.Close(ref missing, ref missing, ref missing); document = null; //Закрытие приложения Word winword.Quit(ref missing, ref missing, ref missing); winword = null;
При работе с приложением Word в памяти компьютера создается отдельный процесс, если его не закрыть или не вывести созданный документ на экран, то он будет работать до выключения компьютера. Так же при постоянной работе с такими документами, их процессы будут накапливаться незаметно для пользователя, что может привести к зависанию компьютера или другим последствиям.
Правка Источника данных как документа
Если
возникает необходимость ввести
недостающее поле слияния или удалить
ненужные поля слияния из Источника
данных, надо нажать кнопку Правка
Источника данных на
панели Слияние.
В диалоговом окне Форма
данных
нажать кнопку Источник.
Будет показана таблица, с которой можно
работать как с обычной таблицей в Word,
появится панель инструментов Базы
данных
с кнопками:
-
добавить
запись -
удалить
запись -
сортировка
-
вставить
базу данных (импорт из существующей
базы данных) -
найти
запись -
поле
базы данных (поля можно добавить в конец
списка), переименовать, удалить, но
нельзя их переставить.
II. Управление Процессом слияния
В
Основной
документ
включены также поля, позволяющие
организовать диалог в процессе слияния
и управлять процессом слияния. С помощью
специальных инструкций (кодов полей)
пользователь может влиять на процесс
слияния и вносить в ходе слияния в
документ дополнительные сведения.
Специальные инструкции вставляются
при помощи кнопки Добавить
поле Word
на панели Слияния
или командой Вставка/Поле/Категории/Слияние.
Чтобы увидеть вставленное поле, надо
нажать клавишу Shift+F9.
Для
каждого из описанных ниже Полей
Word выполнить
следующие действия.
-
Прочитать
описание Поля
Word -
Выполнить
вставку в ваш основной документ
описанного Поля
Word. -
Выполнить
слияние. -
Удалить
из основного документа вставленное
Поле
Word
Поля Word, используемые при работе Ассистента слияния.
Поле
FILLIN
С
помощью этого поля можно в определенных
местах документа вставить дополнительный
текст.
Текст
вставляется в документ вместо этого
поля. Чтобы вставить поле, необходимо
выполнить ряд действий
-
Щелкнуть
на кнопке
Поле Word на
панели
Слияние. -
выбрать
FILLIN. -
В
поле Сообщение
ввести запрос — приглашение для
пользователя (необязательно) .
-
В
поле Стандартный
ответ
ввести значение, которое будет принято,
если пользователь не дает ответа на
запрос.
Флажок
Только
один раз
определяет, будет ли запрос появляться
для каждой записи или только один раз.
Пример
Основной
<Текст
{FILLIN |
Созданные <Текст Секретарь. ——————————————— <Текст Зам. |
Поле
ASK
Определяет
закладку, значение которой будет
задаваться при слиянии. Это значение
можно использовать в любом месте
документа, любое число раз, при помощи
поля REF
Чтобы
вставить поле, необходимо выполнить
следующие действия:
-
Щелкнуть
на кнопке
Поле Word на
панели
Слияние -
выбрать
ASK -
В
поле Закладка
—
ввести имя закладки (любые буквы и
цифры, максимальная длина- 40 символов) -
В
поле Сообщение
ввести запрос — приглашение для
пользователя (необязательно) -
В
поле Стандартный
ответ
ввести значение, которое будет принято,
если пользователь не дает ответа на
запрос -
Флажок
Только
один раз
определяет, будет ли запрос появляться
для каждой записи или только один раз
Поле
REF
При
помощи этого поля можно вставить текст
или рисунок, помеченный закладкой.
Например, текст закладки, созданной
при помощи поля ASK
вставляется в документ при помощи поля
REF.
Пример
Основной
{ASK
{REF
<Текст секретарь
{REF |
Созданные Деканат <Текст Секретарь.
Деканат ————————————————— Деканат <Текст Секретарь..
Деканат |
Поле
IF… THEN… ELSE
При
помощи этого поля можно анализировать
указанные условия и в зависимости от
результата вставлять тот или иной текст
Чтобы
вставить поле, надо:
-
Щелкнуть
на кнопке
Добавить Поле Word на
панели
Слияние -
выбрать
IF…
THEN… ELSE
-
В
поле Поле
— выбрать имя поля слияния -
В
поле Оператор
выбрать нужную команду- -
В
поле Значение
ввести значение, которое должно иметь
поле слияния -
В
поле Вставить
следующий текст
ввести текст, который будет вставлен,
если условие выполняется -
В
поле В
противном случае вставить следующий
текст
ввести текст, который будет вставлен,
если условие не выполняется -
Выполнить
слияние описанным выше способом.
Пример
Основной Уважаемый <Текст { |
Созданные Уважаемый <Текст Не ————————————————— Уважаемый <Текст Благодарим |
Поле
MERGESEC
Вставляет
в документ номер записи данных. При этом
подсчитываются только записи, участвующие
в слиянии
Лабораторная
работа №2
ВОЗМОЖНОСТИ
WORD
В ОБЛАСТИ УСКОРЕНИЯ
СОЗДАНИЯ
ДОКУМЕНТОВ
Автотекст
Для
ускорения ввода текстов документов или
справок к полям формы в редакторе Word
существует библиотека часто используемых
символов —
Автотекст.
В библиотеку можно поместить стандартные
фразы и выражения, используемые при
составлении документов, постоянно
употребляемые названия организаций,
товаров или видов услуг и т.д.
Создание
нового элемента Автотекста
-
Набрать
на экране текст элемента автотекста -
Выделить
текст элемента автотекста -
Дать
команду Вставка/Автотекст
и выбрать Создать -
В
поле Имя
Элемента ввести
подходящее имя (32 любых символа, включая
пробелы) -
Нажать
кнопку ОК
Быстрая
вставка элемента Автотекста
-
Поместить
курсор в нужную текстовую позицию -
Ввести
с клавиатуры имя элемента автотекста -
Нажать
клавишу F3
Выбор
элемента автотекста из списка
-
Поместить
курсор в нужную позицию -
Дать
команду Вставка/Автотекст
и выбрать элемент Автотекст -
Выбрать
имя элемента автотекста. Содержимое
элемента выводится в окне Образец -
Нажать
Вставить
Стили.
Для
ускорения форматирования документа
можно использовать стили.
Стиль
полностью определяет формат абзаца или
символа (размер шрифта, начертание,
отступы, интервалы и т.д.). Каждый стиль
имеет имя. Имя используемого в данной
позиции символа приводится в специальном
поле панели инструментов Форматирование.
Стили можно создавать и удалять. Стиль
Обычный
удалить
нельзя. Каждый стиль должен быть основан
на каком-либо уже существующем стиле,
который называется базовым для данного
стиля. При создании нового стиля обычно
в качестве базового выбирают стиль,
наиболее близкий к требуемому, а затем
вносят в него необходимые изменения.
Если
в документе после абзаца, выполненного
стилем А, всегда следует абзац, выполненный
стилем В, создавать стили для данного
документа надо в таком порядке:
-
стиль
В, -
стиль
А.
Стили
хранятся в шаблоне документа.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Продолжаем серию заметок по теме автоматизации документов.
Сегодня я расскажу, как добавить к вашим документам специальную форму, с помощью которой можно легко и просто вводить данные в документ. Введенные в форму данные адресата по нажатию кнопки на форме будут автоматически внесены в документ.
Предполагается, что у вас есть готовый шаблон документа, например, письма. В качестве образца можно использовать подготовленный мною шаблон официального письма вымышленной организации.
Использование шаблона необходимо, ведь на его основе вы в дальнейшем будете создавать свои документы.
Распакуйте файл из архива и поместите его в папку с шаблонами редактора Word. Как правило, эта папка находится по адресу: C:Documents and SettingsИМЯ_ПОЛЬЗОВАТЕЛЯApplication DataMicrosoftШаблоны.
Итак, шаблон документа у нас есть, открыт и готов к изменению. В первую очередь нам необходимо добавить закладки в те позиции в документе, куда вы собираетесь вставлять данные из формы. Как правило, письмо должно содержать фамилию, имя и отчество адресата, наименование организации адресата, полный почтовый адрес и приветствие.
Исходя из этого мы добавим в документ следующие закладки:
- name
- company
- address
- date
- salutation
Обратите внимание, реквизитов адресата, которые должно содержать письмо, на самом деле может быть много, а закладок мы определили всего пять. Это логично, так как в дальнейшем мы будем подставлять несколько реквизитов к одной закладке (например, адрес, который будет состоять из индекса, названия города, области, улицы).
После добавления закладок (и если у вас включен режим отображения меток закладок), наш документ будет выглядеть примерно как на рисунке ниже (щелкните по картинке для ее увеличения):
Эти метки закладок после нажатия кнопки «Внести данные» будут заменены на конкретные тексты.
Не забывайте сохранять сделанные вами изменения в шаблоне на всякий «пожарный» случай.
На втором шаге мы создадим специальную форму с текстовыми полями, которая будет открываться при создании каждого нового документа на основе вашего шаблона письма. Кратко расскажу, как добавить в шаблон форму.
- Откройте редактор Visual Basic с помощью сочетания клавиш «Alt»+«F11». Убедитесь, что в окне проектов выделен ваш шаблон:
- В меню Insert выберите команду UserForm. В окне проектов будет создан новый объект Forms с пустой формой или просто добавлен в проект модуль userForm.
- Разместите на форме необходимые элементы. Например, как на рисунке ниже:
Текстовые поля (со стандартными именами TextBox1) были мною переименованы с учетом их назначения. Обратите внимание в нижеприведенном коде, как они теперь называются.
Третий шаг — написание кода для элементов нашей формы.
- В меню Insert выберите команду Module. В окне проектов будет создан новый модуль Module1. Дважды щелкните по модулю и перейдите в окно редактирования кода. Вставьте следующий код:
- Перейдите на модуль UserForm1. Переименуйте его в MyForm.
- Нажмите клавишу «F7» и в окне редактора кода вставьте следующий код (содержит процедуры для действий с элементами формы):
- Ниже этого кода вставьте следующий код:
- Сохраните проект и попробуйте создать на основе вашего шаблона новый документ. Введите необходимые данные в поля формы и нажмите кнопку «Внести данные».
Sub AutoNew() Dim oF As MyForm Set oF = New MyForm oF.Show Set oF = Nothing End Sub
Этот код запускает форму каждый раз при создании нового документа на основе вашего шаблона.
Private Sub CommandButton1_Click() 'Действия формы по нажатию кнопки "Ввести данные" Dim bm As Bookmarks Dim rng As Word.Range Dim addr As String Dim sText As String Dim sResult1 As String Dim sResult2 As String Dim arName() As String Set bm = ActiveDocument.Bookmarks sText = Me.tbName.Text 'присваиваем переменной текст из текстового поля "Имя адресата" arName = Split(sText) 'создаем массив из отдельных слов, вместе составляющих ФИО адресата 'Действия с полем "Дата" With Me.tbDate If Not IsDate(.Text) Then 'если данные введены не в формате даты, то MsgBox "В поле ""Дата"" неверно введены данные." 'выводим сообщение .Text = Format(Now, "dd MMMM yyyy") 'автоматически заполняем поле текущей датой .SetFocus 'фокус на поле "Дата" .SelStart = 0 ' .SelLength = Len(.Text) 'выделяем весь текст в поле, начиная с левого края Exit Sub Else Set rng = bm("date").Range 'присваиваем переменной rng ссылку на закладку "date" rng.Text = .Text & " г." 'определяем новый текст закладки bm.Add "date", rng 'заменяем закладку End If End With Set rng = bm("name").Range 'присваиваем переменной rng ссылку на закладку "name" sResult1 = arName(0) & " " 'присваиваем переменной значение первого слова из поля "Имя адресата" и добавляем пробел sResult1 = sResult1 & Left(arName(1), 1) & ". " 'добавляем к первому слову первую букву Имени и точку sResult1 = sResult1 & Left(arName(2), 1) & "." 'добавляем первую букву Отчества и точку rng.Text = sResult1 'определяем новый текст закладки bm.Add "name", rng 'заменяем закладку Set rng = bm("company").Range 'присваиваем переменной rng ссылку на закладку "company" rng.Text = Me.tbCompany 'определяем новый текст закладки bm.Add "company", rng 'заменяем закладку If Len(sText) > 0 Then 'если в поле "Имя адресата" есть какие-то символы, то sText = sResult1 & vbCr 'присваиваем переменной текст закладки "name" и переводим строку End If If Len(Me.tbCompany.Text) > 0 Then 'если в поле "Организация" есть какие-то символы, то Me.tbCompany.Text = Me.tbCompany.Text & vbCr 'присваиваем переменной текст из поля и переводим строку End If If Len(Me.tbAddress.Text) > 0 Then 'если в поле "Адрес" есть какие-то символы, то Me.tbAddress.Text = Me.tbAddress.Text 'присваиваем переменной текст из поля End If If Len(Me.tbIndex.Text) > 0 Then 'если в поле "Индекс" есть какие-то символы, то Me.tbIndex.Text = Me.tbIndex.Text & "," 'присваиваем переменной текст из поля и добавляем запятую End If If Len(Me.tbCity.Text) > 0 Then 'если в поле "Город" есть какие-то символы, то Me.tbCity.Text = Me.tbCity.Text & "," 'присваиваем переменной текст из поля и добавляем запятую End If If Len(Me.tbOblast.Text) > 0 Then 'если в поле "Область" есть какие-то символы, то Me.tbOblast.Text = Me.tbOblast.Text & "," 'присваиваем переменной текст из поля и добавляем запятую End If 'присваиваем переменной фрагментов текста из полей "Индекс", "Город", "Область" и "Адрес" addr = Me.tbIndex.Text & " " & Me.tbCity.Text & " " & Me.tbOblast.Text & " " & Me.tbAddress.Text Set rng = bm("address").Range 'присваиваем переменной rng ссылку на закладку "address" rng.Text = addr 'определяем новый текст закладки из переменной addr bm.Add "address", rng 'заменяем закладку Set rng = bm("salutation").Range 'присваиваем переменной rng ссылку на закладку "salutation" rng.Text = Me.tbSalutation.Text 'определяем новый текст закладки bm.Add "salutation", rng 'заменяем закладку Unload Me 'Закрываем форму ActiveDocument.Range.Fields.Update 'Обновляем все поля в документе End Sub
Private Sub CommandButton2_Click() 'Выход из формы и закрытие окна документа при нажатии кнопки "Отменить" On Error GoTo ErrLabel Unload Me 'Закрываем форму ActiveDocument.Close 'Закрываем текущий документ ErrLabel: End Sub Private Sub tbIndex_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'Устанавливаем правила заполнения поля "Индекс" With Me.tbIndex If Not IsNumeric(.Text) Or Len(.Text) <> 6 Then 'если в поле "Индекс" данные не цифры и меньше 6, то MsgBox "Ошибка!" & " " & "Введите 6 цифр индекса города или района." 'выводим сообщение Cancel = True 'возвращаемся к полю .Text = "" 'очищаем поле .SetFocus End If End With End Sub Private Sub tbName_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'При выходе из поля "Имя адресата" его имя подставляется в поле "Приветствие" sText = Me.tbName.Text arName = Split(sText) sResult2 = arName(1) & " " sResult2 = sResult2 & arName(2) Me.tbSalutation = "Уважаемый " & sResult2 & "!" End Sub Private Sub UserForm_Initialize() Me.tbDate = Format(Now, "dd MMMM yyyy") With Me.tbName .Text = "Фамилия Имя Отчество" .SetFocus .SelStart = 0 .SelLength = Len(.Text) End With End Sub
Вы можете скачать уже готовый шаблон письма и подредактировать его под свои нужды.
В этом шаблоне есть небольшой недостаток: в текстовые поля нужно вводить информацию в правильном формате и регистре, иначе в итоговом письме придется вручную править недочеты.
Образцом для шапки шаблона послужила картинка из шаблона городского письма редактора Word 2007.
Образцом кода для данного макроса и формы послужила заметка Gregory Maxey Address a Letter Using as UserForm.
Время на прочтение
11 мин
Количество просмотров 124K
– А ларчик просто открывался.
И.А. Крылов
О чём эта статья
В настоящей работе описываются способы автоматической организации нумерованных объектов при написании статей, рефератов, докладов, диссертаций и пр. При написании подобного рода материалов неизбежно возникает необходимость нумеровать те или иные объекты, например, формулы или пункты в списке используемой литературы. При этом многие авторы пользуются при написании текстовым редактором Microsoft Word.
В случае тривиальной «ручной» организации, при которой каждый номер прописывается непосредственно руками (обычно, в самом конце, когда текст полностью готов), автор работы может ошибиться в каком-либо номере, и все дальнейшие номера окажутся неверными. Более того, после рецензии те или иные части работы могут быть вставлены в текст или убраны из него. Последнее, зачастую, требует полной перенумерации объектов в документе. Таким образом, цель настоящей статьи состоит в доведении до читателя способов автоматической организации нумерации объектов, позволяющих избежать вышеописанные ситуации.
Предупреждение: в данную статью вошли лишь те приёмы, с которыми автор столкнулся при написании кандидатской диссертации. Описываемые способы организации нумерованных объектов не претендуют на единственность, полноту и оптимальность. Имеются другие интересные способы, например, в TeX. Несомненно, читатель сможет найти и иные способы достижения сформулированной цели. В любом случае, ознакомиться с подходами автора (хотя бы на досуге) следует любому заинтересованному читателю.
Основы работы с полями MS Word
В данном разделе описываются основные поля текстового редактора MS Word, необходимые для организации списков и ссылок на них, а также методы работы с ними.
Поле MS Word – это объект, принимающий то или иное значение в зависимости от ключевых слов и параметров этого поля. Для вставки поля в текст необходимо нажать сочетание клавиш Ctrl + F9 или выбрать соответствующее меню на ленте.
После вставки поля в тексте появятся серые фигурные скобки.
Отличить поля в тексте очень легко – достаточно выделить нужный блок текста. Все поля в выделенном фрагменте будут подсвечены серым цветом.
После того, как поле вставлено в текст, необходимо задать значение этого поля. Для задания значения тому или иному полю необходимо написать определённые ключевые слова, рассмотренные в разделе 2, внутри поля. После задания полю значения необходимо выделить блок текста, содержащий это поле, и нажать F9. Если в выделенном фрагменте окажутся несколько полей, то все они будут обновлены. Для обновления полей во всём документе необходимо выделить всё (Ctrl + a) и нажать F9. Обновить поле можно также с помощью нажатия на соответствующий пункт контекстного меню.
NB! Бывает, что все поля необходимо обновить два раза: первое обновление переупорядочит списки, а второе – расставит нужные значения ссылок.
Значение того или иного поля может быть изменено в любой момент. Для этого необходимо лишь выделить поле (или фрагмент текста, содержащий поля) и выбрать пункт «Коды/значения полей» контекстного меню.
Основные поля MS Word, необходимые для автоматической организации нумерованных объектов
В данном разделе описываются основные поля и ключи, используемые с этими полями. Данные поля позволяют организовать автоматическую нумерацию, списки и ссылки.
Для организации автоматической нумерации необходимо использовать следующие поля:
SEQ
Поле SEQ используется для создания нумерованных списков. Каждое поле SEQ увеличивает на единицу уникальную переменную, указанную в данном поле. Если такая переменная ни разу не использовалась, то её значение становится равным 1. Если поле с данной переменной вставить в ту или иную часть текста и полностью обновить документ, то нумерация всех полей, идущих после вставленного, автоматически увеличится на единицу.
Пример задания поля SEQ
{ SEQ pic_chap1 }
NB! Желательно использовать осмысленные имена переменных, например: pic_chap1 – рисунки первой главы, fn_intro – формулы во введении и т.п. Авторы могут использовать любые имена переменных, но именно осмысленные имена позволят быстро сориентироваться в тексте и исправить его.
Важные ключи поля SEQ. Ключ «с» используется для вывода текущего значения переменной. В частности, с помощью закладки (SET) со значением поля с ключом «c» можно организовать автоматический вывод количества таблиц, рисунков, формул и других объектов, что будет показано ниже. Ключ «h» увеличивает значение переменной в том месте, где задано поле, не отображая само поле. Использование ключей «h» и «c» совместно, очевидно, допустимо, но не имеет смысла. Автор рекомендует воздержаться от подобного.
Примеры использования ключей поля SEQ
{ SEQ pic h }, { SEQ tables c }
SET
Поле SET устанавливает закладку в данном месте документа.
Пример использования поля SET
{ SET lit_Z2009 “1” }
Здесь lit_Z2009 – имя закладки, а «1» – текст закладки. Наиболее существенным является возможность использования вложенных полей, т.е. полей внутри полей. В частности, их можно использовать в качестве текста закладки. Для этого надо вставить поле вышеописанным способом, находясь внутри поля.
Пример
{ SET lit_Z2009 “{SEQ lit c}” }
REF
Поле REF используется для создания ссылок и гиперссылок на закладки. Если закладка была определена где-либо в тексте, то сослаться на неё можно, например, так:
После обновления данного поля на его место будет вставлен текст закладки. Ключ «h» используется для задания гиперссылки на закладку. При нажатии на гиперссылку пользователь будет перемещён в место, заданное ссылкой. Ключ «* MERGEFORMAT» сбрасывает формат текста исходной ссылки, преобразуя его в формат текущей части текста.
PAGEREF
Поле PAGEREF работает так же, как и поле REF, за тем исключением, что текстом ссылки является номер страницы, на котором находится соответствующий объект, а не номер объекта.
Организация автоматической нумерации в документах
Перед тем, как начать описание способов автоматической нумерации объектов в документах, необходимо предупредить читателя об очевидном минусе предлагаемого подхода: для каждого типа объектов и для каждого элемента списков со ссылками придётся создавать свой уникальный идентификатор. В данном случае автор рекомендует заранее продумать систему уникальных имён и записать её где-нибудь, дабы она всё время была перед глазами. Огромным плюсом будет являться то, что при переносах, вставках, добавлении и удалении объектов и ссылок все объекты гарантированно будут иметь верные номера, а ссылки гарантированно будут указывать на нужные объекты.
Нумерация в названиях глав и разделов
Для названия глав и разделов можно воспользоваться стилями MS Word, после чего вставить автооглавление. Тем не менее, если вторая глава вдруг станет третьей или раздел 2.2 станет разделом 2.3, то перенумерация большого числа формул, таблиц и рисунков окажется хлопотным делом. Особые трудности вызовет перенумерация списка литературы, организованного в порядке появления. Чтобы избежать вышеописанного, рекомендуется задать каждой главе уникальное имя (исходя, вероятно, из её смысла). Кроме того, для глав необходимо определить уникальную переменную – имя поля SEQ. Например, именем настоящей главы может быть CHAP_USING_FIELDS, а переменная-счётчик глав – CHAP.
После определения того, как именовать и нумеровать главы, в заголовке пишется следующая (одна из следующих) строка:
- { SEQ CHAP }. Организация автоматической нумерации в документах
- { SEQ CHAP h }{ SET CHAP_USING_FIELDS “{ SEQ CHAP c }”}{ SEQ CHAP c }. Организация автоматической нумерации в документах
Разберём эти строки подробнее. Первая строка приводит к тому, что значение переменной CHAP увеличивается на единицу. После обновления поля, на его месте появится текущий номер главы. Такой способ нумерации подходит для объектов, ссылка на которые не планируется в тексте (например, для промежуточных формул). Если же требуется ссылка на объект, то необходимо использовать вторую конструкцию. В ней первое поле увеличивает значение переменной CHAP без вывода на экран, второе поле устанавливает закладку с именем CHAP_USING_FIELDS, задавая ей текст третьего поля – текущего значения (уже увеличенной на 1) переменной CHAP, а четвёртое поле выводит в данном месте текущее значение (уже увеличенной на 1) переменной CHAP. Следует обратить внимание на то, что третье поле вложено во второе поле. Такая конструкция используется потому, что нет чёткого понимания, какое поле обновится раньше и в каком случае – вложенное или идущее после, если бы только у одного из них был ключ «c». Опыт показал, что увеличение переменной в фоновом режиме и использование текущего значения приводит к желаемому результату. На этом приёме и построены все дальнейшие рассуждения.
Для нумерации разделов внутри главы необходимо задать переменную (уникальную для каждой главы, иначе в следующей главе разделы начнутся с номера n+1), а для каждого раздела необходимо определить уникальное имя.
В качестве примера можно привести следующие строки
{ SEQ CHAP h } { SET CHAP_USING_FIELDS “{ SEQ CHAP c }”}{ SEQ CHAP c }. Организация автоматической нумерации в документах
{ SEQ SUBCHAP_FIELDS h }{ SET SUBCHAP_USING_REF “{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }”}{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }. Использование REF
После обновления ссылок этот фрагмент текста превратится в
3. Организация автоматической нумерации в документах
3.1. Использование REF
В данном примере используется второй приём, описанный в нумерации глав, только теперь вложенными и идущими после оказываются два поля. Первое поле { SEQ SUBCHAP_FIELDS h } в фоновом режиме обновляет соответствующую переменную, определённую под разделы данной главы, поля 2-4 { SET SUBCHAP_USING_REF “{ SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c }”} задают ссылку со значением «ТЕКУЩАЯ ГЛАВА.ТЕКУЩИЙ РАЗДЕЛ», а поля 5-6 { SEQ CHAP c }.{ SEQ SUBCHAP_FIELDS c } вставляют в данное место документа значение «ТЕКУЩАЯ ГЛАВА.ТЕКУЩИЙ РАЗДЕЛ».
Следует ещё раз повторить, что для каждой главы и раздела (подглавы, параграфа) необходимо определить свои уникальные имена для задания ссылок на них, если это необходимо.
Автосодержание
Средства MS Word позволяют организовать автосодержание, однако рекомендуется использовать поля REF для задания ссылок на номера глав и поля PAGEREF для ссылок на страницы. Располагать их лучше в таблицах со скрытыми границами размера Nx3, где N — число элементов в автосодержании: разделы, подразделы и пр. В первом столбце будут содержаться номера пунктов, получаемые из полей REF. Во втором столбце будут содержаться имена элементов. (Увы и ах! Их придётся записать руками). В третьем столбце будут содержаться номера страниц, на которых находится соответствующее поле SET. Получение значений производится через PAGEREF.
Нумерация формул
Для нумерации формул нужно использовать те же конструкции, что и для нумерации глав и подразделов. Автор рекомендует размещать формулы в таблицах Nx2, где N – число формул, следующих подряд, скрывая границы таблиц и выставляя нужное выравнивание.
Пример показан здесь
x = a + b (3.5)
Здесь (3.5) – это значение поля, которое в исходных кодах записывается следующим образом:
({ SEQ FN_CHAP_FIELDS h }{ SET FN_AX2_BX_C “{ SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c }”}{ SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c })
Здесь FN_CHAP_FIELDS – имя переменной для нумерации формул текущей главы, { SEQ CHAP c }.{ SEQ FN_CHAP_FIELDS c } – номер соответствующей формулы.
NB! При конвертации документа в pdf формулы часто отображаются неверно. В финальной версии диссертации автор заменил все формулы соответствующими рисунками через старый-добрый PrintScreen – MS Paint.
Нумерация таблиц и рисунков
Нумерация таблиц и рисунков делается так же, как и нумерация формул. Разница лишь в том, что соответствующим объектам лучше давать иные имена и придумывать для них другие переменные-счётчики, например, PIC_CHAP2, TABLE_BETTER_NPV и т.д.
Приведём пару примеров.
Пример 1, таблицы
Таблица { SEQ TAB_CH2 h }{ SET TAB_CH2_SHOPS “{ SEQ CHAP c }.{ SEQ TAB_CH2 c }”}{ SEQ CHAP c }.{ SEQ TAB_CH2 c }. Сравнение склад/рынок по магазинам.
Магазин 1 Магазин 2
Склад 100 180
Рынок 16 29
Здесь TAB_CH2 – переменная-счётчик таблиц второй главы, TAB_CH2_SHOPS – выбранное автором имя для данной таблицы. Пусть данная глава имеет номер 3, и в ней уже было 3 таблицы. Тогда данная формула, как несложно показать, будет преобразована в следующий текст:
Таблица 3.4. Сравнение склад/рынок по магазинам.
Магазин 1 Магазин 2
Склад 100 180
Рынок 16 29
Абсолютно аналогичным образом строится работа с изображениями. Необходимо задать свои переменные-счётчики, имена и пр. В целом, с точки зрения автонумерации, нет никакой разницы между таблицей и рисунком. Вся разница заключается лишь в форматировании частей текста: иные названия, подписи снизу/сверху и пр.
Пример 2, изображения
Рисунок { SEQ PIC_CH2 h }{ SET PIC_CH2_EXPONENT “{ SEQ CHAP c }.{ SEQ PIC_CH2 c }”}{ SEQ CHAP c }.{ SEQ PIC_CH2 c }. Экспонента, косинус и синус.
Аналогично таблицам, здесь PIC_CH2 – переменная-счётчик рисунков второй главы. Опять же, очевидно, что в результате будет получено нечто подобное:
Рисунок 3.10. Экспонента, косинус и синус.
Организация списка используемой литературы
Работа со списком литературы в целом похожа на работу с формулами, таблицами и рисунками, но всё же имеет одно существенное отличие. Из-за этого организация списка литературы была вынесена в отдельный раздел. В данном разделе детально описано построение списка используемой литературы в алфавитном порядке. Построение списка литературы в порядке появления в тексте описано не столь подробно, но может легко быть сделано по аналогии.
Оформление списка используемой литературы в алфавитном порядке в конце документа
Итак, в тексте возникла необходимость сделать ссылку на книгу, статью, журнал и т.п. Если они должны идти единым списком, оформление следует делать подряд по алфавиту. Если они должны идти по типам источников, то нужно записывать сперва книги по алфавиту, потом статьи по алфавиту и т.д. В смысле автонумерации это не имеет значения. Важен лишь порядок, в котором эти источники будут записаны, после чего им будут присвоены номера.
NB! Каждому источнику надо задать уникальное имя, которое будет использоваться для задания ссылок в тексте. Автор при написании диссертации пользовался форматом «lit_ИНИЦИАЛЫ_АВТОРОВ_ГОД» или «lit_ИНИЦИАЛЫ_АВТОРОВ_ПОСТФИКС_ГОД». Постфикс нужен для того, чтобы разделить те или иные работы, которые автор(ы) мог выпустить в течение одного года. Храните этот список уникальных имён перед глазами, т.к. к нему придётся часто обращаться.
При добавлении новых источников достаточно лишь вставить их в нужное место списка используемой литературы, сохраняя порядок, и дважды обновить документ. Обновление дважды требуется для обновления вложенных полей и внешних полей. Двойное обновление документа гарантирует как обновление списка литературы, так и обновление ссылок на него.
Пример части списка с развёрнутыми формулами указан ниже
{ SEQ LIT h }{ SET lit_CHR2011 “{ SEQ LIT c }”}{ SEQ LIT c }. Christofides N. Graph Theory: An Algorithmic Approach. Academic Press Inc., London, 1975. – 400 p.
{ SEQ LIT h }{ SET lit_CHVATAL1983 “{ SEQ LIT c }”}{ SEQ LIT c }. Chvatal V. Linear Programming. W. H. Freeman and Company, 1983. – 425 p.
{ SEQ LIT h }{ SET lit_ERL1978 “{ SEQ LIT c }”}{ SEQ LIT c }. Erlenkotter D. A Dual-Based Procedure for Uncapacitated Facility Location. J. Operations Research, 26, 1978. – pp. 992-1009.
Нетрудно показать, что данный список преобразуется в
15. Christofides N. Graph Theory: An Algorithmic Approach. Academic Press Inc., London, 1975. – 400 p.
16. Chvatal V. Linear Programming. W. H. Freeman and Company, 1983. – 425 p.
17. Erlenkotter D. A Dual-Based Procedure for Uncapacitated Facility Location. J. Operations Research, 26, 1978. – pp. 992-1009.
Если между авторами Chvatal [16] и Erlenkotter [17] нужно вставить какую-либо работу, то всё, что требуется сделать, это добавить пустую строку, скопировать в неё уже имеющийся пункт литературы (например, Chvatal [16]), заменить уникальное имя работы, заменить текстовое описание работы и дважды обновить весь документ.
Оформление ссылок на элементы списка используемой литературы в тексте
Теперь, пожалуй, очевидно, как сделать ссылки на литературу в тексте.
Зная уникальные имена, достаточно использовать поле REF
Из решения классической задачи транспортного типа [{ REF lit_MEELIT1972 h }] следует, что любой базис такой задачи содержит ровно m+s-1 элементов. Из теоремы Данцига [{ REF lit_CHVATAL1983 h }] следует, что все элементы базиса в сформулированной задаче будут являться либо нулями, либо натуральными числами.
После двукратного обновления документа, данный фрагмент текста примет следующий вид:
Из решения классической задачи транспортного типа [26] следует, что любой базис такой задачи содержит ровно m+s-1 элементов. Из теоремы Данцига [16] следует, что все элементы базиса в сформулированной задаче будут являться либо нулями, либо натуральными числами.
Оформление списка используемой литературы в порядке появления в тексте
Если предыдущий метод оказался понятен, то оформление списка литературы в порядке появления также не составит особого труда. Ссылки, задававшиеся в конце, теперь надо размещать непосредственно в тексте. Если данный источник встретился впервые, то указать конструкцию вида [{ SEQ LIT h }{ SET lit_ERL1978 “{ SEQ LIT c }”}{ SEQ LIT c }, стр. 18]. Если данный источник уже встречался ранее, то указать конструкцию вида [{ REF lit_ERL1978 h }, стр. 95]. В сам список, разумеется, нужно помещать поля { REF lit_ERL1978 h } – ссылки на появления источников в тексте. Вся трудность заключается в ручной расстановке полных названий источников. Однако если где-то в тексте произойдут изменения в порядке появления ссылок, то (после двукратного обновления) это сразу отразится на порядке в списке литературы, что может быть быстро исправлено вырезанием и вставкой. Дополнительный плюс: проверка порядка следования источников в данном случае является «контрольной суммой». Ошибки в порядке следования либо отсутствуют, либо, если таковые будут иметь место, очевидны.
Выгрузка документа в формат pdf с сохранением ссылок
Ну вот, пожалуй, и финал данной истории. Документ готов. Можно заняться его распространением, но не хочется отдавать оригинал. Имеются два способа. Первый состоит в замене ссылок их значениями средствами MS Office. Достигается это нажатием Ctrl+Shift+F9, однако автор крайне не рекомендует так делать.
Куда более интересной является выгрузка документа в формат pdf. При выгрузке можно заменить поля значениями, разбив тем самым ссылки на объекты, или оставить их. Преимущество второго случая (зачем всё это вообще делалось) состоит в том, что при чтении текста читатель может нажать на ту или иную ссылку для перемещения к нужной формуле, таблице, рисунку или элементу списка литературы. Включить или выключить данную опцию можно при сохранении в pdf: Create bookmarks using: Word bookmarks.
Столкнулся с тем, что все инструкции связаны со сложной автоматизацией с использованием кучи каких-то файлов, экселя и его таблиц, связей документов и так далее. Всё можно сделать гораздо проще!
Автозаполнение документа или договора Word Без Excel – как это сделать?
Сколько же я намучался, забивая запросы типа “как сделать автозаполнение word без экселя” или “заполнение документа значением поля” или “word значение поля в текст автоматически“. На самом деле всё оказалось не так сложно, как я изначально предполагал.
Да, можно делать очень полезные связки документов, когда мы заполняем эксель, а потом у нас шаблон ворда из него берет информацию. Но объяснить какому-нибудь муниципальному сотруднику как это делать – задача практически невозможная.
Так вот, всё что нам потребуется – это Microsoft Word Документ. В нем мы создадим поля, настроим страницы и всё будет автоматически наполняться.
Инструкция как сделать автозаполнение документа Word из полей
Для примера возьму документ договора, где есть заказчик, исполнитель, дата документа и сумма договора, которые мы хотим подставлять из полей.
Пример документа с автозаполнением из полей делаю в microsoft office word 2019 (автоматизация заполнения документов word без эксель).
- Формат документа DOCM.
Создаем новый документ и сохраняем его в формате docm (Документ Word с поддержкой макросов). - Вкладка “Разработчик”.
Файл – Параметры – Настроить ленту. В выпадающем списке выбираем “Основные команды”, затем выделяем ниже строчку “Разработчик”, и по середине жмем “Добавить”. Справа появляется “разработчик” с плюсиком, жмем Ок, и видим, что теперь вверху есть вкладка “Разработчик”.
- Делаем страницу с полями для ввода данных документа (договора).
Кликаю в начале договора, жму вставка – разрыв страницы, и в итоге у меня пустая первая страница.
На ней создаю табличку, это не обязательно, и начинаю там создавать поля. Делаем страницу с полями для ввода данных - Создаём поля для ввода текста для автозаполнения документа.
Кликаем в любое место документа, где нам нужно поле.
Переходим во вкладку Разработчик. Вставляем не просто текстовое поле, а именно СТАРОЕ текстовое поле.
То есть выбираем там уже иконку “Инструменты из предыдущих версий”, затем “Поле (элемент управления формы)”.
И вставляем куда нам нужно.
- Настраиваем поля Word для автозаполнения.
Когда поле есть на странице, жмем по нему правой кнопкой и во всплывающем меню выбираем “Свойства” (поля).
Настраиваем обязательно следующие параметры поля:
— Текст по-умолчанию: тут свой текст.
— Закладка: на английском, уникальный идентификатор поля. Придумайте что-нибудь понятное, это нам пригодится далее.
— Ставим галочки (чек-боксы) “разрешить изменения” и “вычислить при выходе”.
В данном примере я создал текстовое поле, в котором будет Дата договора (по сути это любой текст). Мне главное, чтобы я в одном месте ввел данные, а в других местах документа текст из поля автоматически заполнился. И в данном случае это будет то, что я назвал датой. - Настраиваем подстановку текста из поля в документ.
ЕСТЬ ДВА СПОСОБА: ВРУЧНУЮ СОВСЕМ, И ЧЕРЕЗ СВОЙСТВА ПОЛЕЙ.
Разберем первый способ: вставка текста из поля в документ через закладку ctrl+f9.
Для этого выбираем место, где у нас должно подставиться значение поля. Мы помним, что в нашем случае уникальный идентификатор (название закладки) в примере: POLEDATE.
В этом месте кликаем мышкой левой кнопкой (просто чтобы там курсор мигал), затем на клавиатуре нажимаем сочетание клавиш Ctrl+F9 (контрол плюс эф девять).
Видим, что появились фигурные скобки с серым фоном, и мы можем внутри печатать.
Печатаем внутри следующее: REF POLEDATE.
Поясняю: внутри фигурных скобочек, должно быть три буквы заглавных REF, затем пробел, затем то как мы назвали закладку (идентификатор поля). В нашем случае это POLEDATE, а может быть что угодно.
Больше ничего жать не нужно, можно убрать оттуда курсор.
Вот как это выглядит в итоге:
Второй способ: вставка значения поля из другого поля автоматически через закладку REF.
Это практически тоже самое, только не нужно нажимать ничего на клавиатуре. По мне так, дольше, но вдруг вам там понятнее.
Так же создаем поле, в этом примере возьму сумму договора. При создании поля (см. п. 5) я ввел название закладки поля (уникальный идентификатор) pole_stoimost.
Только теперь, когда мы нажали в место документа, куда хотим подставить данные автоматически (курсор там мигает), мы вставляем поле.
Выбираем вкладку “Вставка”, затем “Экспресс-блоки”, затем “Поле” (как на скриншоте ниже):
Это поле нужно настроить так, чтобы в него подставлялось значение другого поля автоматически.
При вставке поля из экспресс-блоков, или когда вы потом можете нажать правой кнопкой Свойства поля, настраиваем так.
Слева выбираем тип поля “Ref”, и дальше выбираем название нашей закладки, т.е. идентификатор поля, откуда надо подставить текст. В нашем случае это pole_stoimost:
(вот кстати выше видно на скриншоте еще ошибку “Ошибка! Источник ссылки не найден.” – это происходит, когда вы ввели REF Несуществующая закладка, например. То есть не найдено поле (закладка) с тем идентификатором уникальным. И надо просто проверить свойства полей.).
Короче, так или иначе, подытожу:
— Создали поле через Разработчика.
— У него в свойствах прописали уникальный идентификатор (название закладки).
— Вставили через CTRL+F9 или экспресс блоки – поле (место) куда будет подстваляться текст из первого поля, указав такой же идентификатор. - Автозаполнения документа значением из полей через F9 или печать документа.
Ну.. тут уже все понятно должно быть – насоздавали полей сколько нужно, поставляли в места куда нужно.
По-умолчанию, Word будет автозаполнять документ автоматически, если весь документ выделить (ctrl+a например) и нажать кнопку F9.
Места с REF и полями преобразуются в то, что есть в оригинальном поле-закладке.
Но есть трудность – сложно объяснить людям как это работает, что выделять и как обновлять эти поля.
Я выбрал способ попроще – чтобы поля автоматически обновлялись при печати (печатать почти все умеют как).
Лезем в настройки (файл – параметры), там выбираем “Экран” и отмечаем галочку “Обновлять поля перед печатью”.
Теперь, каждый раз когда через Файл – Печать или Ctrl+P будет печататься документ – поля будут обновляться (текст автоматически подставляться), т.е. тоже самое что через выделение документа и нажатие F9. - Наводим красоту: запрет редактирования, номера страниц.
Ну и еще два момента. Во-первых, документы пронумерованы обычно. И основная проблема – что страница с полями тоже печатается, а в официальном документе её быть не должно.
Соответственно, способа убрать страницу word из печати автоматически я не нашел. Поэтому, выкрутился по-другому.
Через настройки колонтитула (несколько кликов по нижней части документа (или где там у вас номера страниц)), переходим в свойства, номера страниц, и там выбираем начать с “0″, с нуля короче.
Таким образом, страница с полями становится как бы нулевой, и договор печатается как надо, первая страница договора остается первой.
И второе, защита от редактирования, чтобы только вводили данные в поля.
Сделал просто – Рецензирование – Ограничить редактирование – Да, включить защиту, ну и пароль 1.
Отключается так же, только не все видят – там внизу кнопка становится “отключить защиту”.
Считаю обязательным выложить для вас сам документ, который использовал в этой инструкции. Если сильно запутались, можете просто из него скопировать оригинальные поля (которые в таблице) которые заполняются, и поля которые принимают автоматически значения из других полей.
Скачать пример автоматическое заполнение Word из полей: Автозаполнение документов Word Без Excel через текстовые поля docm (пароль на отключение защиты: 1 (просто единичка)).
P.S. Почему формат docm? На самом деле потому, что если формат doc или docx – то не работает вкладка “разработчик” где поля (ну не вставляются они). При этом – само автозаполнение прекрасно работает. Совет – делайте всё в docm, а итоговый результат, уже с защитой от редактирования – сохраните в обычный формат doc/docx и отдавайте, всё там прекрасно работает и печатается.
P.P.S. Заказать можно тут: https://vk.com/autoworddocs! обязательно оставьте отзыв!
Мои контакты →
© 2006 — 2023, Александр Сергеев