Аннотация: Примеры работы с текстовыми документами: работа с буфером, трансляция символов, работа с текстовыми базами данных.
Программная работа с документами Word
Текстовый документ — один из основных видов документов, наиболее привычный для обычного пользователя. Стандартные возможности Word при работе с такими документами многогранны, тем не менее, в каждой конкретной ситуации возникает необходимость выполнять специфические операции над тем или иным документом. Программная работа с документами Word хотя и проста, но требует некоторых навыков. Приведу фразу из письма одного из читателей, обратившегося на днях ко мне с просьбой помочь ему в решении задачи, возникшей перед ним при работе с документом Word. Он пишет:
Ни по одной книжке по VBA я даже близко не могу понять, как писать макросы для обработки текстовых документов
Конечно, опытные программисты не примут эту фразу всерьез.
Примеры работы с текстовыми документами
Чтобы эффективно работать с текстовыми документами, необходимо хорошо знать объекты Word, описанные в предыдущей лекции. Без знания основных коллекций, задающих структуру документа, — абзацев, предложений, слов, символов, без знания объектов Range и Selection, не обойтись. С другой стороны необходимо владение встроенными функциями VBA для работы со строковыми переменными. Умение работы с объектами Word и функциями VBA позволяет достаточно просто решать самые разнообразные задачи, возникающие в ходе работы с текстовыми документами. В предыдущей лекции, где я рассматривал объекты Word, я приводил большое число примеров, иллюстрирующих работу с теми или иными объектами. Но там рассмотрение шло от «объектов», теперь же я хочу идти от «задач», которые могут возникать при работе с текстовыми документами. Давайте перейдем к рассмотрению некоторых примеров.
Вариации на тему «буфера»
Я начну с самой простой задачи — написания собственных макросов, реализующих известные функции Word «Copy» и «Paste». Пожалуй, при создании любого из документов Word кнопки, реализующие эти функции, нажимаются чаще всего. Всегда полезно понимать, как реализованы стандартные функции, а, кроме того, иногда желательно иметь собственную реализацию, отличающуюся от стандартной. В разумности такого подхода можно будет убедиться даже на этом простом примере.
Копирование текста
Вначале рассмотрим совсем простой случай и напишем два макроса, первый из которых запоминает выделенный текст в буфере, а второй — вставляет текст из буфера в точку вставки, заданную курсором. Для решения задачи необходимо понимать три вещи:
- как представить буфер,
- как запомнить в буфере выделенный текст,
- как текст из буфера переносится в точку вставки.
Каждая из этих задач решается в одну строчку. Поэтому давайте взглянем на программный текст, а затем я приведу краткий комментарий:
'Текстовый буфер задается обычной строкой Public TextBuffer As String Public Sub CopyText() 'Этот макрос копирует выделенный текст в буфер TextBuffer = Selection.Text End Sub Public Sub PasteText() 'Этот макрос выполняет операцию, обратную копированию 'Текст из буфера вставляется в точку, заданную курсором Selection.Text = TextBuffer End Sub
Листинг
2.1.
Как видите, буфер задается обычной текстовой переменной VBA. Выделенный текст задается свойством Text объекта Selection. Точка вставки, заданная курсором, также представляется объектом Selection.
Несмотря на простоту этих макросов, я часто использую их наряду со стандартными реализациями Copy — Paste. Дело в том, что при вставке скопированного текста в новое местоположение всегда возникает вопрос, как должен быть отформатирован вставляемый текст (шрифт, размер, курсив и другие свойства), — должно ли использоваться форматирование копируемого текста или форматирование, определяемое контекстом точки вставки. В стандартной реализации при вставке используется форматирование копируемого текста, но во многих случаях предпочтительным является контекст точки вставки. В тех ситуациях, когда необходимо вставлять только текст, сохраняя особенности стиля точки вставки, наши простые макросы предпочтительнее стандартной реализации.
Копирование текста и шрифта
Я рассмотрю сейчас, как можно копировать в буфер не только текст, но и его шрифт. Макросы, которые будут построены, вряд ли стоит использовать на практике, но с учебной точки зрения их рассмотрение представляется полезным. Если необходимо сохранить в буфере не только текст, но и характеристики шрифта, которым этот текст записан, то буфер уже не может быть представлен простой строковой переменной. В подобных случаях, когда необходимо запоминать разнообразные характеристики выделенной области текстового документа, зачастую полезно определить пользовательский тип, задающий требуемые характеристики. Эти общим приемом я и воспользуюсь в данной достаточно простой ситуации. Вот как выглядит теперь определение буфера:
'Буфер, сохраняющий текст и шрифт Public Type TextAndFont BufText As String BufFont As Font End Type Public TaFBuffer As TextAndFont
Листинг
2.2.
Как видите, вначале дано определение пользовательского типа, содержащего два поля для хранения текста и объекта класса Font. Сам буфер описывается переменной введенного типа TextAndFont.
Чуть усложняются и тексты макросов, решающие задачу копирования и вставки:
Public Sub CopyTextAndFont() 'Этот макрос копирует выделенный текст и шрифт в буфер Set TaFBuffer.BufFont = Selection.Font TaFBuffer.BufText = Selection.Text End Sub Public Sub PasteTextAndFont() 'Этот макрос выполняет операцию, обратную копированию 'К сожалению, такое присваивание свойства Font 'для объекта Selection не проходит?! 'Selection.Font = TaFBuffer.BufFont 'Но можно присвоить свойства объекту Font Selection.Font.Name = TaFBuffer.BufFont.Name Selection.Font.Bold = TaFBuffer.BufFont.Bold Selection.Font.Italic = TaFBuffer.BufFont.Italic Selection.Font.Size = TaFBuffer.BufFont.Size 'Текст из буфера с указанными параметрами шрифта 'вставляется в точку, заданную курсором. Selection.Text = TaFBuffer.BufText End Sub
Листинг
2.3.
Первый из этих макросов не нуждается в особых комментариях. Объект Selection имеет наряду со свойством Text и свойство Font, возвращающее объект данного класса. Эти свойства и передаются в поля переменной, определяющей наш буфер. Казалось бы, что второй макрос должен быть симметричным, поскольку необходимо выполнить такое же присваивание, но в другую сторону. Однако объекты Range и Selection обладают одной особенностью, — их свойству Font нельзя присвоить объект класса Font. Можно, однако, задать характеристики этого объекта, чем я и воспользовался.
Повторяю, этот пример интересен скорее, как программистский прием. Практического значения он не имеет, так как стандартная реализация Copy — Paste решает эту же задачу, обладая при этом дополнительными преимуществами. Заметьте, что эта пара макросов неявно предполагает, что выделенный текст записан одним шрифтом, параметры которого постоянны для всего текста. Если же это не так, то будут использованы параметры конечного участка текста. В то же время стандартная реализация при вставке текста будет сохранять все изменения шрифта выделенного участка текста, что, конечно, представляется более разумным.
Копирование объекта
До сих пор я говорил о копировании выделенного текста. И делал я это потому, что копирование текста это наиболее типичная задача, возникающая при работе с документом Word. Однако понятно, что реально в документе Word выделяется не текст, а некоторая область документа, — объект Range, если говорить в терминах объектов. Я напомню, что объект Range может быть устроен столь же сложно, как и сам документ, и, наряду с текстом, содержать самые разные компоненты, например, рисунки. Стандартная реализация Copy — Paste фактически работает именно с объектом Range. Давайте напишем и мы такую же реализацию. Вот как задается буфер и макросы в подобной реализации:
'Буфер, позволяющий сохранять объект Public ObjectBuffer As Range Public Sub CopyObject() 'Этот макрос копирует выделенный объект в буфер Set ObjectBuffer = Selection.Range End Sub Public Sub PasteObject() 'Этот макрос выполняет операцию, обратную копированию. 'Объект из буфера вставляется в точку, заданную курсором. 'Поскольку объект может быть сложным и содержать, например, 'рисунки, то используется техника копирования через стандартный буфер! ObjectBuffer.Copy Selection.PasteSpecial End Sub
Листинг
2.4.
Реализация макросов в этом случае даже более проста, чем в предыдущем случае. Однако, заметьте, она построена на использовании возможностей стандартного буфера и таких мощных методов работы с ним, как методы Copy и PasteSpecial. Стоит обратить внимание на то, что побочным эффектом этой реализации является изменение содержимого буфера. Конечно, можно было бы запоминать и восстанавливать его содержимое, но вряд ли стоит этим заниматься, поскольку данная реализация вряд ли имеет преимущества по сравнению со стандартной реализацией. Так что из трех пар приведенных макросов, практическую пользу может иметь самая первая и самая простая пара макросов, работающих с простым текстом.
Набор возможностей текстового редактора Microsoft Word действительно очень широк. С помощью этой программы можно решать множество задач, которые возникают при работе с текстовыми документами любой направленности, что и делает этот продукт таким популярным. В Word реализована даже небольшая среда для программирования, с помощью которой можно значительно облегчить себе работу. В самом редакторе это называется макрокомандой или, как называют чаще, макросом. К сожалению, многие пользователи избегают знакомства с эти инструментом, ошибочно полагая, что это что-то сложное и не особо нужное. В этой статье подробно рассмотрим, как создать макрос в Word, что это вообще такое и почему вы делали неправильно, не пользуясь макрокомандами. Давайте разбираться. Поехали!
Что это такое
Макрокоманда — это, по сути, небольшая программа, которая позволяет автоматизировать и облегчить работу с текстом. В большинстве продуктов Microsoft реализована функция, сохраняющая историю действий пользователя, наиболее часто используемые инструменты и прочее. Всё это можно перевести в формат команд, и вместо того, чтобы каждый раз делать одно и то же, вы просто нажмёте клавишу на клавиатуре, и Word всё сделает за вас. Удобно? Ещё бы! На самом деле, это совсем не сложно. Далее в статье по порядку о том, как создать макрос.
Макросы позволяют выполнять несколько основных функций. Они предназначены для реализации следующих задач:
- Ускоряют часто выполняемые процедуры и операции внутри текстового редактора Word. Это относится к редактированию, форматированию и не только.
- Объединяют несколько команд в цельное действие «от и до». Как пример, используя макрос, можно простыми движениями моментально вставить таблицу, которая будет иметь определённые заданные размеры, а также получит нужное число столбцов и строк.
- Упрощают получение доступа к некоторым функциям и инструментам для работы с текстом, графиков и пр. При этом они могут располагаться в разных окнах и разделах программы.
- Автоматизируют сложные последовательные операции и действия.
Последовательность используемых макросов может быть создана буквально с нуля. Для этого потребуется ввести соответствующий код в редактор Visual Basic.
Создание макроса
Алгоритм действий при создании команды следующий:
- Определить порядок действий.
- Выполнить.
- Записать действия в макрос.
Например, вам нужно выделить жирным шрифтом часть текста в таблице. Для записи команды придётся использовать горячие клавиши — комбинации для каждого инструмента вы можете подсмотреть, наведя курсор на нужный инструмент.
Допустим, нужная вторая колонка. Перемещение между столбцами таблицы осуществляется при помощи клавиши «Tab». Вы нажимаете «Tab» необходимое количество раз, пока не дойдёте до нужной колонки. Затем, если вам нужно выделить часть содержимого ячейки, снимаете выделение, нажав стрелку влево. Далее выделим два слова из ячейки. Выполните комбинацию Ctrl+Shift и нажмите стрелку вправо дважды (либо столько раз, сколько слов необходимо выделить). И последний шаг — сделать выделенную область полужирной с помощью комбинации Ctrl+B.
Теперь, определившись с порядком действий, запишите макрокоманду. Для этого, перейдите на вкладку «Вид» и отыщите в панели инструментов кнопку «Макросы». Кликнув по ней, вы увидите маленькое меню, в котором нужно выбрать пункт «Записать макрос». В появившемся окне введите название для команды и нажмите на кнопку «Записать». Сразу после этого, возле курсора появится иконка с кассетой, свидетельствующая о том, что началась запись. Выполните чётко по порядку все необходимые действия (в этом примере для выделения полужирным шрифтом нескольких слов из ячейки таблицы). После того как вы всё сделали, нажмите на значок «Стоп» (квадратик) в нижней части окна программы. Всё, макрос готов.
Как записать макрос
Если следовать пошаговой инструкции, с самостоятельной записью макросов даже у начинающего пользователя проблем возникнуть не должно.
Алгоритм действий можно представить в таком виде:
- В зависимости от того, какая версия текстового редактора Word используется, откройте вкладку «Разработчик» или «Вид», где располагается кнопка «Макросы». Нужно просто кликнуть по пункту «Запись макроса».
- У каждого макроса должно быть своё имя. Его можно задать сугубо на собственное усмотрение. Это на его функциональность никак влиять не будет.
- Если дать макросу точно такое же имя, как и у стандартных макросов в программе Word, он будет выполнять его функции вместо основного. Поэтому не поленитесь заглянуть в меню «Макросы» и открыть раздел «Команды Word». Здесь прописаны все стандартные названия.
- В строке, которая называется «Макрос доступен для» нужно выбрать, для чего именно он будет доступен.
- В графу с описанием нужно ввести собственное описание создаваемого макроса.
- Далее можно кликнуть на «Начните запись», либо же «Создайте кнопку». В первом случае запись макроса начнётся без его привязки к кнопке на панели управления или клавиатуре. Во втором макросу будет задана соответствующая клавиша или кнопка.
- Добавьте один или несколько документов, куда следует добавить новый макрос. Это делается через «Параметры Word» во вкладке «Панель быстрого доступа».
- В левом окне выберите нужный макрос для записи и кликните по кнопке «Добавить».
- Для изменения настроек этой кнопки всегда есть возможность кликнуть на «Изменить».
- Далее выбирайте символ, который хотите использовать для кнопки.
- Укажите имя. Именно оно будет затем отображаться в соответствующем поле.
- Дважды кликните ОК, чтобы начать запись макроса.
- Когда потребуется остановить запись, жмите соответствующую клавишу в меню «Макросы».
Записанный макрос в дальнейшем можно будет использовать на своё усмотрение.
Использование макросов
Как же всё это использовать? А очень просто: в панели инструментов нажмите кнопку «Макросы» и одноимённый пункт в появившемся меню — перед вами откроется список всех макросов. Выберите сохранённый вами и нажмите «Выполнить». Существует более удобный вариант — создать специальную кнопку в панели инструментов. Делается это следующим образом: перейдите в меню «Файл», затем «Параметры» и кликните по пункту «Панель быстрого доступа». В разделе «Выбрать команды из:» укажите «Макросы» и выберите из них требуемый. После этого кликните по кнопке «Добавить». Также вы можете назначить иконку, которая будет отображаться для этой кнопки. Готово. В ленте инструментов появится соответствующая иконка, нажатием на которую вы запустите записанный вами алгоритм действий.
Создать макрокоманду можно практически для чего угодно. Можно изменять абзацный отступ, межстрочные интервалы, выровнять области текста, выполнить расчёт заданных значений, или настроить автоматическое заполнение таблицы. Нажмите «Записать макрос» и кликайте мышкой, вызывая соответствующие меню и задавая необходимые значения. Только не выделяйте текст мышкой, для этого лучше использовать горячие клавиши или специальный инструмент программы. Как только всё будет сделано, остановите запись.
Подобные команды могут содержать любое количество шагов и быть любого уровня сложности. Процесс создания макрокоманд одинаковый и для Word 2007, и для Word 2010, и для версии Word 2013.
Как видите, процесс достаточно простой, а инструмент очень эффективный. Главное, чётко определить алгоритм выполняемых действий. Научившись использовать макросы, вы значительно облегчите себе работу и сможете эффективнее и быстрее решать многие задачи, работая с текстовыми документами. Пишите в комментариях, помогла ли вам эта статья и задавайте любые интересующие вопросы по рассмотренной теме.
Используем сценарии VBScript
Создавать текстовые файлы, используя сценарии, достаточно легко, так как среда Windows в целом и окружение Windows Script Host (WSH) в частности предоставляют специальные средства для работы с текстовыми файлами. Однако, хотя текстовые файлы идеальны для хранения простой неструктурированной информации, их недостаточно в случае более сложных требований. Если необходимо представить иерархическую информацию, можно воспользоваться средствами XML и создавать текст с метками, содержащий (или не содержащий) обращение к схеме. Однако часто приходится создавать документы, которые представляют информацию, использующую сложную разметку. Файлы HTML являются альтернативой связывания данных и сложной разметки страницы. Однако документы HTML представляют собой открытый текст и в принципе являются легкой добычей для злоумышленников. К тому же документы HTML редко бывают самодостаточными и часто содержат ссылки на внешние ресурсы, такие как изображения, управляющие элементы ActiveX и апплеты.
В отличие от рассмотренных выше решений, пакет Microsoft Word фактически является стандартом в документообороте реального мира. Создавать такие документы в интерактивном режиме легко, но можно ли автоматизировать этот процесс, создавая программно и используя документы, основанные на шаблонах? Да, и сейчас я объясню почему. Я не буду вдаваться в детали той стороны процесса, которая касается работы в пакете Word. Вместо этого я уделю внимание программному созданию и управлению документами, предположив, что читатели знакомы с основами работы с шаблонами и закладками Word.
Использование шаблонов Word
Иногда мне бывает нужно подготовить счета, потом распечатать их для рассылки писем или распространить с помощью электронной почты. Обычно я открываю Word, выбираю свой шаблон счета, ввожу необходимую информацию и сохраняю файл как новый документ. Потом я посылаю счет клиенту по обычной почте либо в качестве документа, прикрепленного к электронному сообщению.
В большинстве случаев счета и другие формы являются простыми документами, использующими одинаковые шаблоны, но содержат различную информацию, такую как дата, номер счета, описание и сумма счета. Шаблон, на котором основан документ, обычно содержит одно или несколько пустых полей, в которые пользователи могут добавлять данные, характерные для конкретной формы.
В пакете Word можно создавать формы для стандартных документов, таких как счета, настраивая файл-шаблон с расширением .dot. Когда требуется подготовить новый документ на основе шаблона, следует щелкнуть на пункте меню File, New. После выбора нужного шаблона в окне New и нажатия кнопки OK Word создает и отображает новую форму, основанную на этом шаблоне. В соответствующие поля пустой формы вводится различная информация.
При использовании Word в интерактивном режиме пользователь может видеть, куда необходимо ввести информацию. Но как заставить вводить различную информацию в нужные поля сценария WSH? Прежде чем я отвечу на этот вопрос, давайте рассмотрим объектную модель Word — инфраструктуру на основе COM, которая помогает программно управлять поведением пакета Word.
Объектная модель Word
Объектная модель Word содержит богатую и сложную иерархию объектов. Эта объектная модель программно раскрывает интерактивные функции Word для ориентированных на COM клиентов (т. е. сценариев WSH и Visual Basic(VB)). Корневым элементом объектной модели Word является объект Word.Application. Для создания экземпляра этого объекта необходимо использовать следующий код:
Dim word Set word = CreateObject _ (Word.Application)
Объектная модель Word работает с исполняемым файлом Word (winword.exe), а не с отдельной библиотекой DLL. Таким образом, каждый экземпляр объекта Word.Application эквивалентен запуску и работе экземпляра приложения Word. Однако эти экземпляры невидимы. А поскольку мы не можем их видеть, есть риск появления множества экземпляров, которые существуют бесцельно, понапрасну расходуя системные ресурсы. Чтобы избежать распространения бесполезных экземпляров Word, необходимо сделать так, чтобы сценарии всегда освобождали объект после завершения работы с ним с помощью метода Quit:
word.Quit
Хотя заново создаваемые экземпляры Word по умолчанию невидимы, можно сделать их видимыми, задав свойству Visible значение True:
word.Visible = True
Когда экземпляр виден, можно закрыть приложение вручную. Установка свойства Visible в True может очень пригодиться при отладке приложений Word на основе сценариев.
Работа с элементами объектной модели Word полностью совпадает с работой приложения в интерактивном режиме. После инициализации приложения мы создаем новый документ или открываем существующий. Для создания нового пустого документа на основе определенного шаблона следует вызвать метод Add из коллекции Documents и указать файл .dot, где хранится нужный шаблон. Приведенный ниже код создает документ, который содержит возможности, встроенные в шаблон, названный Invoice:
Set doc = _ word.Documents.Add(invoice.dot)
Для открытия существующего документа следует использовать коллекцию Documents, содержащую объекты Document. Код, приведенный в листинге 1, открывает документы invoice.doc и expenses.doc. Этот фрагмент кода сначала открывает файл invoice.doc, потом — expenses.doc. Здесь статус программно созданного документа в точности соответствует статусу документа-шаблона, который вы открыли интерактивно с помощью пункта Open меню File, работая в приложении Word. Если вы сделали экземпляр видимым, на экране появятся окна документов из файлов invoice.doc и expenses.doc.
Переменные doc1 и doc2, используемые в листинге, ссылаются на объекты, представляющие вновь открытые документы Word. Также можно использовать индекс к коллекции Documents для обращения к открытым файлам. Например, следующий код возвращает ссылку на первый открытый документ:
Set doc1 = word.Documents(0)
Этот фрагмент кода эквивалентен присвоению переменной doc1 результата вызова метода Documents.Add, как показано во второй строке листинга 1.
Программный интерфейс объекта Document содержит все функции, доступные в меню File и Edit пакета Word. Для печати документа следует использовать метод PrintOut объекта Document; для записи документа в другое место — метод SaveAs. Когда Word применяется интерактивно, оба метода представляют диалоговое окно, позволяющее выбрать принтер и путь. При использовании метода PrintOut или SaveAs можно указать принтер или путь к файлу в качестве аргумента, как показано ниже:
doc.SaveAs _ C:data ewinvoice.doc
Когда путь указывается в качестве аргумента, диалоговое окно не отображается.
Метод SaveAs также позволяет вводить дополнительный аргумент, для указания выходного формата (например, документ Word, формат Rich Text Format (RTF) — Word 6.0, неформатированный текст). Приведенный ниже фрагмент кода показывает, как сохранить документ в формате RTF:
Const wdFormatRTF = 6 docn.SaveAs _ C:data ewinvoice.doc, _ wdFormatRTF
За дополнительной информацией о константах, обозначающих различные форматы файла, следует обратиться к документации пакета Word.
Чтобы закрыть документ, нужно использовать метод Close:
doc1.Close
При закрытии документа все документы, открытые после него, автоматически перемещаются на одну позицию вверх. Так что, если использовать код:
Set doc1 = word.Documents(0) Set doc2 = word.Documents(1)
и впоследствии закрыть ссылку на переменную doc1, на позиции переменной doc2 в массиве окажется Documents(0).
Когда работа с документами Word ведется программно, можно связывать форматы и стили с абзацами, словами и символами в документе, так же как при интерактивном использовании Word. Кроме того, можно добавлять комментарии и закладки к элементам документа. При программном создании документов Word на основе шаблона можно использовать закладки для ввода пользовательских данных в нужные места документа.
Использование закладок в пакете Word
Под закладкой понимается связь между именем и определенным местом в документе Word. Закладки — особенность пакета Word, которую можно использовать для пометки выбранного текста, графики, таблиц или любого другого элемента документа. Word хранит закладки в документе. Для добавления закладки в интерактивном режиме следует выбрать текст или элемент, который требуется пометить, потом выбрать пункт Bookmark в меню Insert. В окне Bookmark нужно ввести имя создаваемой закладки.
Например, предположим, у нас есть шаблон Word (файл .dot) и нам нужно просмотреть текущие данные в определенной позиции. Откроем шаблон и выберем область, отведенную под данные. Чтобы упростить правку шаблона в будущем, можно ввести текст указателя места заполнения, описывающий данную область (например: данные о счете размещать здесь). После ввода текста указателя места заполнения следует выбрать текст, выбрать в меню Insert пункт Bookmark, ввести имя закладки (например, InvoiceDate), после чего сохранить шаблон.
После того как будет программно создан на основе шаблона новый документ, нужно использовать коллекцию Bookmarks документа для распознавания закладок и изменения их текста. Например, чтобы ввести данные в закладку InvoiceDate, необходимо использовать код, подобный следующему:
Set dateBookMark = _ doc.Bookmarks(InvoiceDate) dateBookMark.Range.Text = _ 7/1/2002
Как показывает данный фрагмент кода, обращение к закладке осуществляется через ее имя. Имя закладки указывает на нужный помеченный объект в коллекции Bookmarks документа. Свойство Range является объектом класса TextRange. Это свойство определяет настройки области текста закладки. Свойство Text объекта TextRange позволяет читать и переписывать текущее значение закладки. Приведенный выше фрагмент кода задает для даты счета значение 7/1/2002.
Создание счета
После программного создания документа на основе шаблона следует использовать закладки для заполнения формы счета свежими данными и сохранить документ в новый файл. Теперь можно распечатать документ, отправить его кому-нибудь по электронной почте и т. д.
В листинге 2 показан сценарий CreateInvoice.vbs, который собирает определенную информацию и составляет счет. Код открывает шаблон TestInvoice.dot, расположенный в той же папке, что и сценарий, когда создает новый документ на его основе (можно скачать файл TestInvoice.dot с нашего сайта в разделе Download). На рис. 1 показан шаблон TestInvoice.dot.
Рисунок. Шаблон TestInvoice.dot |
Сценарий CreateInvoice.vbs запрашивает у пользователя номер счета, дату и имя адресата. Код фрагмента A в листинге 2 использует закладки для внедрения этой информации в основной документ. Затем код фрагмента B использует метод SaveAs для сохранения документа в текущей папке. Сценарий CreateInvoice.vbs создает имя готового документа, соединяя номер счета с префиксом inv_. Способ именования и папка назначения заданы условно. В конце сценарий CreateInvoice.vbs закрывает документ и приложение.
Отправка документа по электронной почте
Объектная модель Word содержит метод объекта Document, который позволяет послать документ по электронной почте:
doc.SendMail
Как можно заметить, метод SendMail не имеет аргументов. Он вызывает зарегистрированный клиент интерфейса Messaging API (MAPI) — обычно Microsoft Outlook или Outlook Express. Появляется окно электронного письма с присоединенным к нему документом Word. Пользователь просто заполняет поле To и нажимает кнопку Send. В папке Sent Items почтового клиента автоматически регистрируется отправка сообщения. Если пользовать не имеет постоянного соединения, почтовый клиент помещает сообщение в папку Outbox для отправки при следующем подключении.
При использовании метода SendMail необходимо убедиться, что сценарий не закрывает приложение Word до появления окна электронной почты. Метод SendMail работает асинхронно относительно основного сценария, поэтому сценарий не имеет возможности убедиться в том, что метод закончил отправку сообщения. Если сценарий попытается закрыть Word до завершения работы метода SendMail, система выдаст сообщение, что невозможно закрыть Word, пока не завершится выполнение команды. Если окно с таким сообщением появляется, пользователь должен закрывать его вручную. Чтобы избежать подобной ситуации, можно добавить вызов процедуры Sleep, как я сделал во фрагменте B листинга 2, чтобы временно остановить выполнение сценария и дать методу SendMail время на завершение. Кроме того, можно добавить собственное окно подтверждения в свой сценарий, тогда пользователь сможет подтверждать отправку письма. Приведенный ниже код отображает окно подтверждения Done непосредственно перед тем, как сценарий закрывает Word:
doc.SendMail MsgBox Done
Большинство форм сегодня представляют собой простые документы Word. После интерактивного создания шаблона в пакете Word можно без труда написать сценарий, подобный приведенному в статье, для заполнения формы пользовательской информацией, после чего позвольте окружению WSH и объектной модели Word завершить начатое.
Оценив это простое и эффективное решение, многие захотят использовать его для других распространенных форм, например для отчетов о расходах и запросов на подписку. Также с его помощью можно повысить функциональность сценариев. Например, можно совместить автоматическое создание счетов с доступом к базе данных, так что сценарий станет автоматически возвращать следующий сводный номер счета. Или можно сделать так, чтобы сценарий добавлял запись в базу данных для слежения за счетом. Для этого можно расширить сценарий CreateInvoice.vbs кодом на основе ADO, который запрашивает базу данных о последнем номере счета и выполняет запрос INSERT для добавления новой записи.
Дино Эспозито — Работает в Риме преподавателем и консультантом. С ним можно связаться по адресу: dinoe@wintellect.com
Листинг 1. Код, открывающий существующий документ
Dim doc1, doc2 Set doc1 = _ word.Documents.Add(invoice.doc) Set doc2 = _ word.Documents.Add(expenses.doc)
“
Продолжаем работу над приложением и сегодня изучим способы его взаимодействия с Word. Разберем основные методы программной работы с документами такого типа и попробуем применить их на практике.
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
DB (Database), БД. Организованная структура, предназначенная для хранения, изменения и обработки взаимосвязанной информации, преимущественно больших объемов
Windows Presentation Foundation. Аналог WinForms, система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), использующая язык XAML
Демонстрация работы с документами Word в WPF
На данном занятии будет реализована возможность экспорта данных из приложения для визуализации расходов пользователей в документ Word. Расходы каждого пользователя будут экспортироваться на отдельную страницу, названием которой будет ФИО пользователя. Расходы будут просуммированы по категориям и представлены в виде таблицы. Под таблицей будет размещена информация о максимальном и минимальном платежах данного пользователя. Основные шаги построения приложения:
- Подготовительный этап
- Реализация экспорта в документ Word
- Завершение оформления документа Word
1. Подключаем библиотеку для работы с Word
Важно
Для экспорта данных в Word используется библиотека InteropWord (Object Library), расположенная во вкладке COM
2. Добавляем кнопку экспорта
Важно
Экспорт данных в Word будет осуществляться с помощью кнопки «Экспорт в Word»
3. Подключаем пространство имен для работы с Word
Важно
Требуемое пространство имен подключается с помощью директивы using
Реализация экспорта в документ Word
1. Получаем список пользователей и категорий
Важно
Список пользователей и категорий выгружается из базы данных
2. Создаем новый документ Word
Важно
После создания экземпляра Word в приложение добавляется новый документ, с которым далее происходит работа
3. Создаем параграф для хранения названий страниц
Важно
Основной структурной единицей текста является параграф, представленный объектом Paragraph. Все абзацы объединяются в коллекцию Paragraphs, причем новые параграфы добавляются с помощью метода Add. Доступ к тексту предоставляет объект Range, являющийся свойством Paragraph, а текстовое содержание абзаца доступно через Range.Text. В данном случае для хранения ФИО каждого пользователя создается новый параграф
4. Добавляем названия страниц
Важно
В качестве названия выбирается имя пользователя, к которому применяется стиль «Title», после чего добавляется новый параграф для таблицы с платежами
5. Добавляем и форматируем таблицу для хранения информации о платежах
Важно
После создания параграфа для таблицы и получения его Range, добавляется таблица с указанием числа строк (по количеству категорий + 1) и столбцов. Последние две строчки касаются указания границ (внутренних и внешних) и выравнивания ячеек (по центру и по вертикали)
6. Добавляем названия колонок и их форматирование
Важно
Таблица состоит из трех колонок с названиями «Иконка», «Категория» и «Сумма расходов». Названия колонок выделяются жирным шрифтом и выравниваются по центру
7. Заполняем первую колонку таблицы
Важно
Положение ячейки заносится в переменную cellRange. Метод AddPicture() класса InlineShape позволяет добавить изображение в ячейку. Иконки категорий размещаются в новой папке Assets, основные шаги создания которой изображены на скриншоте
8. Форматируем первую колонку таблицы
Важно
Для первой колонки устанавливаются длина, ширина, а также горизонтальное выравнивание по центру
9. Заполняем вторую и третью колонки
Важно
Сумма платежей приводится к нужному формату с указанием единиц измерения (руб.) непосредственно в коде
Завершение оформления документа Word
1. Добавляем максимальную величину платежа
Важно
Для поиска максимального платежа сначала платежи сортируются по стоимости. В случае, если такой платеж найден, добавляется новый параграф. Получается диапазон и выводится текст с информацией о наименовании платежа, его стоимости и дате совершения. В заключение устанавливается стиль и цвет текста (красный)
2. Добавляем минимальную величину платежа
Важно
Аналогично среди всех платежей данного пользователя определяется наименьший платеж и отображается шрифтом зеленого цвета
3. Делаем заключительные шаги
Важно
По завершении работы с данными пользователя добавляется разрыв страницы. Далее, разрешается отображение таблицы по завершении экспорта. Наконец, документ сохраняется в формате .docx и .pdf
“
Вы познакомились с основными программными методами работы с документами Word в WPF. Теперь давайте перейдем от теории к практике!
Для закрепления полученных знаний пройдите тест
Выберите неверное утверждение относительно работы с документами Word:
Paragraph содержит все абзацы документа
Range предоставляет доступ к тексту абзаца
Обращение к ячейке начинается с указания номера строки
Range.Text и Paragraphs являются:
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Содержание
- Что такое включенные макросы в Ворд?
- Что такое макросы в Ворде и как с ними работать?
- Что такое макрос в ворде 2007? Формула из Excel таблицы
Приветствую на Fast-Wolker.ru!! В сегодняшнем выпуске продолжим знакомство с созданием макросов уже в приложении Microsoft Office Word. Все знакомы с ним; многим приходится набирать документы в этой программе.
Документы чаще всего имеют одну и ту же структуру — мы берем шаблон правим его так как нам надо в одних и тех же местах — меняем даты, имена, форматируем текст.
То есть мы каждый раз делаем одни и те же операции с текстом, и чтобы их не делать каждый раз — можно заставить компьютер совершать их автоматически. Для этого в МS Word можно применять макрокоманды (или макросы) которые вы самостоятельно записываете в виде программы на языке VBA, который встроен в Word.
Что такое включенные макросы в Ворд?
А сейчас разберемся подробно, что за «макросы», как их включать. Начнем изучение на примере Office Word 2007, так как для многих он по прежнему остается самым привычным пакетом. Включать макросы нужно через меню «Файл» -«Параметры Word».
Дело в том, что настройки макросов в программе по умолчанию выключены, либо заданы такие настройки безопасности, что работать с полноценно с макрокомандами Вы не сможете. Когда Вы создаете макросы, Вы по сути становитесь программистом.
Можно не только самому их писать, но и находить уже готовые. Среда VBA позволяет работать не только в пределах MS OFFICE. Можно создавать полноценные программы, которые получают доступ системным файлам на компьютере, можно нанести вред. Этим пользуются злоумышленники.
Включаем первую настройку на ленте. Она сделает видимой вкладку «Разработчик» и позволит работать с макрокомандами и запускать редактор VBA:
Следующая настройка отвечает за безопасность. Здесь же, переходим в «Центр управления безопасностью»..
…»Парамеры центра» отвечает за запуск наших будущих программ. Вы можете настроить так как нужно вам. Настройка «Доверять доступ к объектной модели VBA» позволит пользоваться уже готовыми проектами VBA, например скачанными из Интернет.
Сторонние макрокоманды и проекты VBA перед запуском всегда проверяйте на вирусы!
Стабильный MS Office 2007 морально устарел и поддержка его прекращена. Нужно уметь включать режим разработчика и в поздних версиях. Они более функциональны и для серьезной работы лучше использовать их. В Word 2016 включаем вкладку «Разработчик». Для этого так же в меню «Файл» переходим в «Параметры» и затем «Настройки Ленты»:
Не забываем сделать настройки безопасности так как делали до этого. Теперь, когда все настройки сделаны можно работать далее.
Что такое макросы в Ворде и как с ними работать?
По факту вы просто включаете запись ваших действий с текстом. Все выполняемые Вами действия записываются. В нужный момент вы останавливаете запись и сохраняете макрос, а когда это необходимо — снова запускаете. Таким образом, вам на первых этапах не нужно знать язык программирования, чтобы справится с простой задачей.
Но Вы получаете возможность изучать язык, если вас это дело увлечет. Создание макросов — это введение в программирование. VBA позволяет создавать для себя мощные инструменты при работе с текстовыми и табличными документами для решения многих задач в привычном виде .
Тем, кто после прочтения статьи заинтересуется и захочет начать изучать язык VBA самостоятельно в помощь книга.
В качестве примера расскажу об одной такой полезной программе для Word. Иногда появляется желание распечатать полезную книгу на принтере, потому что не все любят читать с экрана. Это может быть большая инструкция, или же полноценное художественное произведение в виде документа Ворд.
Чтобы понравившийся документ после распечатывания стал полноценной привычной брошюрой — нужен макрос. А точнее написанный в VBA программный код, он вам и позволит распечатать ваш документ в виде брошюры, в которой будет правильное расположение текста и нумерация страниц.
Эту программу для ознакомления качаем тут. Вам останется распечатать и сшить брошюру и вот у вас книга готова 🙂
Но чаще всего мы используем макросы на работе при составлении документов. Нужно форматировать текст, менять его размер, менять даты, имена на другие. Это ответственно и занимает время. И здесь наши знания могут очень пригодится.
Для начала покажу демонстрационный пример — как работает макрос. У нас есть шаблон договора, который нужно подготовить для заполнения. Задача: открыть документ, убрать ненужные нам элементы из текста автоматически:
Согласитесь, убирать вручную каждый раз пустые поля (выделено желтым) на нескольких страницах утомительно, поэтому мы для примера прибегнем к помощи макроса. Итак, запускаю Ворд 2016, начинаю записывать макрос:
Указываем имя нашего макроса (без пробелов), доступ делаю из шаблона Normal.doth. Такой выбор позволит запускать выполнение нашей макрокоманды из любого документа Word.
Назначать макрос можно кнопке на панели инструментов или вызвать нажатием сочетания определенный клавиш, но мы этого делать пока не будем. Просто нажмем на «OK» и начнется запись наших действий. Предлагаю посмотреть на видео, что получилось, это будет нагляднее.
Мы сделали самую простую операцию — замену текста во всем документе. Но, поизучав язык можно пойти и далее — отформатировать текст, сделать форму, в которой указываются все необходимые данные договора (даты, номер, ФИО директора, должности, наименование организации, реквизиты и т .д.).
При выполнении макроса все эти данные заполнялись бы автоматически после указания в форме в нужных местах. По опыту знаю ошибок будет меньше при таком заполнении и времени уходит меньше.
Что такое макрос в ворде 2007? Формула из Excel таблицы
Многие интересуются — как вставить формулы Excel в таблицу Word? Excel хорош при вычислениях но не удобен для работы с текстом, а таблицы Word не так привычны после работы с Excel.
Туда нельзя вставить формулы как в Excel, но можно вставлять таблицу Excel путем копирования или создания таблицы прямо в документе Word. Для этого переходим в меню «Вставка»:
Далее, «рисуем» таблицу так, как мы делаем это в Excel:
Создавать Excel таблицу в Word с помощью макроса вышеописанным способом не получится — нужны дополнительные усилия. А что касается обычной Word таблицы — можно записывать макросы в случае создания сложных макетов таблиц.
Можно попробовать записать создание таблицы в макрос любым из этих способов и посмотреть что получится. Лично я таблицы копирую прямо из Excel, а макросы записываю в Office 2016 — там мне удобнее работать со стилями и оформлением. Удачи в освоении программы!