Для скачивания актуальной версии программы редактора RusWord используйте одну из ссылок расположенных ниже.
Программа RusWord совместима с Windows 7 / 8 / 10
/downloads/RusWordSetup.exe
Версия: 2020.10.0, 12.1 Мб, 20.11.2020 |
||
/downloads/RusWordSetup.zip
В zip архиве 2020.10.0, 11.8 Мб, 20.11.2020 |
||
Программный продукт имеет цифровую подпись, подтвержденную Symantec. |
||
Как установить программу RusWord
Скачайте установщик программы и запустите его. Нажмите «Далее» — программа быстро установится на Ваш компьютер и сразу начнет работать.
Лицензионное соглашение
Официальная страница лицензионного соглашения на ПО RusWord
Политика по персональным данным пользователей
Официальная страница политики в отношении пользователей RusWord
Как удалить программу RusWord
В любое время Вы можете удалить Программное обеспечение RusWord со своего компьютера. Все элементы операционной системы, на которой было установлено Программное обеспечение RusWord, возвращаются в прежний вид. Исполняемые файлы программы RusWord также удаляются из операционной системы.
Удалить Программное обеспечение RusWord в операционной системе семейства Microsoft Windows возможно через меню «Программы и компоненты» выбрав в меню «RusWord», либо из установленной меню Программы выбрать «Деинсталлировать RusWord».
How to download english version of RusWord
Use the next link to download lastest version of RusWord
Последние обновления
21 Октября 2020
Версия 2020.10
Исправления.
18 Сентября 2020
Версия 2020.9
Исправления и дополнения.
29 Апреля 2020
Версия 2020.5
Интеллектуальная функция резервного копирования документов.
Исправления и дополнения.
11 Февраля 2020
Версия 2020.1
Долгожданное обновление до полноценной версии WindowsWord 2020
Обновление интерфейса до современного стиля, полноценная поддержка всех форматов от OpenOffice и Microsoft, пробуйте новую версию WindowsWord 2020
25 Октября 2019
Версия 1.4
Обновлены орфографические словари для русского и английского языков.
Поддержка Windows 10 November 2019 Update
Исправления и добавления.
24 декабря 2018
Версия 1.3
Обновлены орфографические словари для русского и английского языков.
Исправлены ошибки.
07 марта 2018
Версия 1.2
Исправлена работа с документами со старых версий MSWord.
Множество мелких исправлений и доработок.
Время на прочтение
14 мин
Количество просмотров 13K
VSTO расшифровывается как Visual Studio Tools for Office. Эти средства позволяют довольно легко скрещивать ужа с ежом — писать .NET приложения, исполняемые CLR в среде Microsoft Office. В частности, программисты обладают возможностью создавать подключаемые модули (плагины) и «кастомизированные» шаблоны для документов почти ко всему основному семейству продуктов Microsoft Office.
В статье приведена инфраструктура Windows Forms проекта, в котором Microsoft Word воспринимается приложением в качестве шелла. В статье раскрыты несколько интересных моментов использования Composite UI Application Block, в частности подключение инфраструктуры доменной модели Word в сервисам расширения каркаса, а так же приведены некоторые факты и особенности разработки с использованием средств VSTO.
Задача
Предположим, у нас есть несколько десятков людей, которые пишут документы и постоянно работают с их редакциями. Sharepoint и другие порталы по каким-то причинам не подходят, поэтому требуется реализация собственной бизнес-логики. Усложним задачу — люди работают в области, очень далекой от компьютерной тематики и хорошо знают только пакет Microsoft Office. Еще усложним — контора бедная, Microsoft Office у большинства народа версии 2003-ей. Кое где, у больших начальников и Главного босса стоит 2007ой. Парк машин разнородный — начиная от 2000-ой винды и до Windows Vista.
Решение
Одним из решений является плагин для Microsoft Office. Его можно написать на COM-е, через голый Office Interop, или же через такой же интероп, но по хитрому обернутый в средства VSTO. Эти средства и задействуем. Пользователь будет запускать Word, среда исполнения VSTO будет подцеплять сборки .NET и каким-то образом дополнять элементы управления Microsoft Word, позволяя пользователю выполнить нужную в задаче бизнес-логику.
А к чему все это?
(Это кому не терпиться узнать, чем все закончится). На выходе я выложу Visual Studio solution, который позволит в полпинка создать свое приложение, подключаемое в Microsoft Word. По ходу дела я объясню практически все, что и как в этом солюшене используется.
Что потребуется для работы
- Microsoft Word 2003 SP3
- VSTO 2005 SE
- VSTO 2005 SE Runtime
- CAB
- Visual Studio 2005 или 2008
Зачем CAB?
Для того, чтобы определить явное разделение функционала, связанного с Microsoft Word от простой Windows Forms логики. Проще говоря, наш плагин будет являться модулем CAB, и при желании, мы легко сможем подключить эту логику в другие приложения CAB. Еще проще говоря, использование CAB минимизирует количество glue-кода.
Есть еще две причины, по которым я включил CAB в решение. Первая состоит в том, что я уже давал описание этого каркаса здесь, а теперь хочу привести полноценный работающий пример. Вторая причина более банальная — мне нравится CAB, он делает мир и вещи в нем проще:)
Подробнее про VSTO
Вообще говоря, VSTO не только плагины для Word-а умеет создавать. Это мощная система, сейчас она уже есть в третьей версии. VSTO — это врата для разработчика в мир автоматизации и программирования Office-based решений. В двух словах — разработчик .NET получает доступ к доменной модели приложения Office и делает с ней что хочет.
Все эти решения можно разделить на два типа:
- Уровень документа (Document Level Customization)
- Уровень приложения (Application Level Customization)
Это независимые уровни. На первом создаются шаблоны документов для приложений Microsoft Office. Можно взять шаблон Excel, разнообразить его разными пользовательскими элементами управлениями (кнопками, гридами), и добавить всякую логику — например, чтобы по событию нажатия кнопки собранные пользователем данные отправлялись через веб-сервис на какой-то сервер и обрабатывались там. На этом уровне разработчику доступен Action Pane (в 2003-ей версии), куда можно подключать свои элементы управления, плюс еще очень много всего в 2007-ой версии.
Application Level Customization означает то, что в среду приложения Microsoft Office подключается модуль расширения (т.н. add-in). Собственно, про него я изначально и начал говорить. Этот модуль расширения является локомотивом бизнес-приложения и позволяет подключать в Microsoft Office все возможности платформы .NET. Я буду показывать именно решение второго уровня.
Если кто заинтересовался возможностями VSTO — очень много про них есть в msdn.
Псевдозадача
Создадим маленький пример, иллюстрирующий все вышесказанное. Пусть есть требование, согласно которому пользователь может выделять текст из документа Microsoft Word и получать этот выделенный текст в окошке пользовательского элемента (знаю, дурацкий пример, но более сложного делать не хочется, а менее сложный уже трудно придумать).
Более подробно. Пользователь запускает Microsoft Word. После запуска среди тулбаров пользователю будет доступен ТР — тулбар расширения (т.е., нашего расширения). На нем находится кнопка, по нажатию которой пользователю показывется окно с кнопкой «Получить текст» и элементом управления multiline textbox. Пользователь нажимает на кнопку «Получить текст», выделенный в документе текст копируется в textbox. Все счастливы.
Понятно, что для жизни пример малопригоден. Но создаваемая инфраструктура позволит довольно просто нарастить на него «мускулы», если это, конечно, кому-то потребуется.
Создание solution
После установки VSTO в студии при создании нового solution станут доступны Office проекты:
Будьте аккуратны с названием — оно одновременно будет являться названием root namespace и поменять его можно будет только ручками через выгрузку проекта.
На выходе получается солюшен с двумя проектами:
WordCAB — это, собственно, add-in. Второй — не менее важный, это deployment проект для модуля расширения. Почему он важен?
Дело в том, что установка модуля расширения на рабочие станции пользователей — весьма трудоемкая затея. Она заключается не только в том, чтобы просто скопировать библиотеки в нужную папку. Для успешного фукнционирования модуля требуется прописать кучу ключей в реестр. Если копнуть глубже, получается, что модуль расширения подключается к Microsoft Office как COM-библиотека, со всеми вытекающими. Кому интересно, все нужные ключи реестра можно поглядеть в deployment-проекте (Нажать правой кнопкой, View->Registry).
В классе ThisAddIn находится точка доступа в модуль:
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
new AddInApplication().Run();
}private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}#region VSTO generated code/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}#endregion
}* This source code was highlighted with Source Code Highlighter.
В ThisAddIn_Startup
будем писать код. Если быть точнее, будем запускать CAB-приложение.
Что такое CAB-приложение?
Это класс такой. В нем есть точка запуска — метод Run()
, и некоторая инфраструктура каркаса — в частности, имеются доступ к главному прецеденту «Приложение» (т.е., к основному, рутовому WorkItem) и возможности переопределить системные сервисы, добавляемые в приложения по-умолчанию. Этот класс уже реализован в базовом виде, а программисту требуется параметризировать его — указать тип рутового прецедента и тип главной формы:
internal sealed class AddInApplication : WindowsFormsApplication<AddInWorkItem, object>
{
protected override void Start()
{
}
}* This source code was highlighted with Source Code Highlighter.
В качестве типа главной формы (шелловой формы), указан object. Почему? Потому что приложение запускается в Microsoft Word, поэтому необходимости создавать главную форму нет. Форма Microsoft Word и есть главная форма, правда, без традиционных для нее возможностей.
По ходу пьесы мне пришло в голову немного прояснить модель приложения для модуля расширения в Microsoft Word.
Модель приложения Word Add-in
Итак, пользователь работает с документами. Более того, в единицу времени он может работать только с одним документом. Поэтому модуль расширения имеет четкий контекст — текущий открытый документ. (Кстати, в модели Microsoft Word VSTO этот документ обозначен как Globals.ThisAddIn.Application.ActiveDocument
). Отсюда (я сделал) вывод (или упрощение) — показывать пользовательские бизнес-элементы имеет смысл в модальном режиме, поскольку в ином случае нарушается контекст. Элементы управления, открытые для одного документа, должны существовать только во время активности этого документа.
Пример — пользователь открыл документ и открыл его карточку (не в модальном режиме). Переключился на другой документ, а карточка осталась для предыдущего — нарушение контекста и целостности восприятия. Разумеется, подобное поведение контролировать можно (и даже нужно, в некоторых случаях), но модальность элементов управления и жесткая их привязка к текущему активному документу делает жизнь проще.
Modal Workspace
Пользовательские элементы управления в каркасе CAB показываются в специальных так называемых рабочих зонах (Workspace). Согласно описанному выше поведению, нам требуется показывать элементы управления в модальном режиме. Поскольку родной CAB-овский WindowWorkspace оказался дубоват и выглядит некрасиво, я написал простенький свой — приводить код не буду, потому что его пара-тройка экранов. Насладиться творчеством можно скачав solution с кодом (ссылка на архив приведена в конце статьи).
Регистрация модальной рабочей зоны происходит в методе InitializeServices()
главного прецедента — AddInWorkitem
:
Workspaces.Add(( new SimpleModalWorkspace() ), WorkspaceNames.MainWorkspace);* This source code was highlighted with Source Code Highlighter.
Итого: под ключем-идентификатором WorkspaceNames.MainWorkspace
зарегистрировали модальную рабочую зону. Доступиться до нее теперь можно откуда угодно, где есть ссылка на главный прецедент: запрос интерфейса IWorkspace
из коллекции Workspaces
по указанному выше ключу. Все просто, как апельсин! (с) х/ф «Терминатор 2»
Фабрика элементов управления Microsoft Word
Речь пойдет о тулбаре Word и кнопках на нем. В VSTO это обертки над COM-объектами — CommandBar
и CommandBarButton
из пространства имен Microsoft.Office.Core
. Жутко глючные штуки, если честно, особенно их анимация. Понять все тонкости и детали удалось только после ударного троллинга на форумах VSTO.
В чем идея — идея состоит в том, чтобы избавить программиста и разработчиков бизнес-модулей от необходимости работать с COM-обертками. Для этого, мы (то есть, я) интегрируем модель Misrosoft Word в механизм так называемых мест расширения (UiExtensionSite) каркаса CAB.
Механизм мест расширения состоит из функциональных связок-добавлений. Проще говоря, в коде необходимо визуализировать отношения подчиненных элементов. В нашем случае, эти отношения такие:
- В массив тулбаров Microsoft Word вставляется тулбар
- В коллекцию кнопок на тулбаре вставляется кнопка
- В кнопку уже ничего не вставляется (не рассматриваем случае комбобоксов, хотя они присутствуют), поэтому это терминальный объект
Итого, у нас получились три подчиненные друг другу сущности:
IWordCommandBarContainer
— контейнер тулбаров Microsoft WordIWordCommandBar
— контейнер кнопок на тулбареIWordButton
— кнопка
К слову сказать, помимо определения элементов управления Word конкретные типы интерфейсов IWordCommandBar
и IWordButton
являются адаптерами к упомянутым выше CommandBar
и CommandBarButton
соответственно.
Для того, чтобы каркас понял, что, куда и, главное, каким образом вставлять, ему необходимо зарегистировать фабрику адаптеров для пользовательских элементов управления. В нашем случае, вставлять можно тулбары (в коллекцию тулбаров) и кнопки (в коллекцию кнопкок на тулбаре). Поэтому, регистрировать фабрику адаптеров нужно для IWordCommandBarContainer
и для IWordCommandBar
. Потом, когда пользователь будет получать место расширения, каркас будет искать инстансы классов добавления подчиненных элементов для этого места расширения, после чего использовать их по назначению — добавлять элементы. Ну а чтобы не заморачиваться, эти инстансы порождаются фабрикой:
public class CommandBarUIAdapterFactory : IUIElementAdapterFactory
{
public IUIElementAdapter GetAdapter(object uiElement)
{
if ( uiElement is IWordCommandBarContainer ) //тулбары
return new CommandBarUIAdapter(( IWordCommandBarContainer )uiElement);
if ( uiElement is IWordCommandBar ) //кнопки в тулбарах
return new CommandBarButtonUIAdapter(( IWordCommandBar )uiElement);throw new ArgumentException("uiElement");
}public bool Supports(object uiElement)
{
return ( uiElement is IWordCommandBarContainer ) || ( uiElement is IWordCommandBar );
}
}* This source code was highlighted with Source Code Highlighter.
А вот реализация коллекции тулбаров (с возможностью добавить новый!)
internal class BarCollection : IWordCommandBarContainer
{
#region IWordCommandBarContainer Memberspublic void AddBar(IWordCommandBar bar)
{
CommandBar commandBar = null;
//todo: сделать так, чтобы второй раз создать нельзя было
try
{
commandBar = Globals.ThisAddIn.Application.CommandBars[bar.Id];
}
catch ( ArgumentException ) { }if ( commandBar == null )
commandBar = Globals.ThisAddIn.Application.CommandBars.Add(bar.Id, ( object )MsoBarPosition.msoBarTop, _null, true);commandBar.Visible =
true;
}private object _null = System.Reflection.Missing.Value;#endregion
}* This source code was highlighted with Source Code Highlighter.
С кнопками на тулбарах аналогично. Гляньте код на досуге.
Пришлось, к слову, создавать фабрику самих кнопкок и тулбаров (см. IWordUIElementFactory
). Дело в том, что модули CAB работают с интерфейсами IWordCommandBar
и IWordButton
. Конкретные типы этих интерфейсов находятся в сборке VSTO Word-AddIn и завязаны на Microsoft.Office.Core
. Поэтому, чтобы в модулях (где отсутствует ссылка на Office) была возможность получать инстансы указанных элементов, создается фабрика. Она регистрируется в главном WorkItem.
Регистрация фабрик и места расширения под тулбары:
Services.AddNew<WordUIElementFactory, IWordUIElementFactory>();
IUIElementAdapterFactoryCatalog factoryService = base.Services.Get<IUIElementAdapterFactoryCatalog>();
factoryService.RegisterFactory(new CommandBarUIAdapterFactory());UIExtensionSites.RegisterSite(UIExtensionSiteNames.WordBarsSite,
new BarCollection());* This source code was highlighted with Source Code Highlighter.
Если вы запутались, извините:) Я сам понимаю, что тут без поллитры не разберешься. (Если подебажиться, то многое становится понятным.)
Модуль CAB
Это обычная сборка. В ней должен быть класс ModuleInit
. В этом классе есть ссылка на главный прецедент AddInWorkitem
и, как следствие, есть доступ ко всему добру, про которое я писал выше.
Задача модуля CAB такова — подгрузиться к главному преценденту, вставить тулбар, вставить кнопку на него, описать обработчик кнопки:
Voila:
UIExtensionSite site = _rootWorkItem.UIExtensionSites[UIExtensionSiteNames.WordBarsSite];
IWordCommandBar mainBar = site.Add<IWordCommandBar>(_factory.CreateBar("AddInToolbar"));IWordButton btn = _factory.CreateButton(mainBar, CommandNames.OpenForm, ToolStripItemDisplayStyle.ImageAndText,
"Открыть окно",
"Открыть форму просмотра Custom Control", Resources.OpenForm, false);mainBar.AddButton(btn);
btn.Click +=new EventHandler<WordButtonClickArgs>(ButtonClick);* This source code was highlighted with Source Code Highlighter.
Обработчик кнопки будет создавать пользовательское окно с кнопкой «получить текст» и текстовым полем, после чего показывать его (применив специальный модификатор показа WindowSmartPartInfo
) в ранее упомянутой рабочей зоне (которую, как мы помним, я зарегистрировал в прецеденте под ключем WorkspaceNames.MainWorkspace
):
private void ButtonClick(object sender, WordButtonClickArgs e)
{
object smartPart = _rootWorkItem.SmartParts.AddNew<SampleSmartPart>();
WindowSmartPartInfo info = new WindowSmartPartInfo();
info.FormStartPosition = FormStartPosition.CenterScreen;
info.MaximizeBox = false;
info.MinimizeBox = false;
info.Resizable = false;
info.Title = "Custom Control";
info.ShowInTaskbar = false;
_rootWorkItem.Workspaces[WorkspaceNames.MainWorkspace].Show(smartPart, info);
}* This source code was highlighted with Source Code Highlighter.
Подгрузка модуля
Здесь я сделал финт коленом. Обычно модули подгружаются в каркас через специальный декларативный формат подгрузки — так называемый ProfileCatalog. Обычно, это хороший способ подключить все, что нужно. Но, учитывая суровые советские реалии, имеется ненулевая вероятность того, что программисту потребуется недекларативная логика подключения модуля. Для этого мы будем переопределять специальный сервис перечисления подгружаемых модулей — IModuleEnumerator
. Я сделал его очень простым — он глядит в папку исполняемой сборки и ищет в ней модуль под названием CustomModule.dll. Находит, и подгружает. Ну, или не подгружает, если не находит:
public class CustomModuleEnumerator : IModuleEnumerator
{
#region Constants
private const string ModuleName = "CustomModule.dll";
#endregion#region IModuleEnumerator Memberspublic IModuleInfo[] EnumerateModules()
{
List<IModuleInfo> result = new List<IModuleInfo>();string path = GetModulePath(ModuleName);
if ( File.Exists(path) )
result.Add(new ModuleInfo(ModuleName));
return result.ToArray();
}#endregion#region Private Methods
private string GetModulePath(string assemblyFile)
{
if ( !Path.IsPathRooted(assemblyFile) )
assemblyFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, assemblyFile);return assemblyFile;
}
#endregion
}* This source code was highlighted with Source Code Highlighter.
Сейчас эта служба очень простая, но при желании, разумеется, в нее можно нагородить хоть черта лысого. Например, подгружать модули из базы данных:)
Перегрузить эту службу нужно в классе приложения CAB:
protected override void AddServices()
{
base.AddServices();RootWorkItem.Services.Remove<IModuleEnumerator>();
RootWorkItem.Services.AddOnDemand<CustomModuleEnumerator, IModuleEnumerator>();
}* This source code was highlighted with Source Code Highlighter.
Доктор, я устал. Что получилось?
Получилось то, что задумывалось в изначальном псевдопримере:
В тулбарах Microsoft находится наш тулбар, на нем висит кнопка с иконкой, по событию нажатия кнопки вылезает пользовательский элемент управления, в текстовое поле которого с помощью кнопки можно загнать выделенный в документе текст:) Тривиально, но обратите внимание, как ничтожна связность между объектами! Хочется подметить, что у каркаса, при должном обращении, идеальная code maintainability.
Внимание! Подводные камни!
Security
Когда скомпилируете и запустите пример, ничего не запустится. Более того, вывалится сообщение, которое скажет вам — дескать, не хватает прав на запуск стороннего модуля (в нашем случае, CustomModule.dll). Проблема в том, что по умолчанию приложение VSTO (в режиме разработки!) дает Full Trust права только на исполняемую сборку и на все сборки, от которых она зависит — т.е. на WordCAB.dll. Для того, чтобы разрешить использование кода сторонних библиотек, выполните следующее действие:
C:WindowsMicrosoft.NETFrameworkv2.0.50727>caspol -u -ag All_Code -url "D:ProjectsWordCABbinDebug*" FullTrust
Microsoft (R) .NET Framework CasPol 2.0.50727.3053
Copyright (c) Microsoft Corporation. All rights reserved.
The operation you are performing will alter security policy.
Are you sure you want to perform this operation? (yes/no)
yes
Added union code group with "-url" membership condition to the User level.
Success
Вместо "D:ProjectsWordCABbinDebug*"
нужно указать папку, из которой производится запуск Add-in. Не забудьте про звездочку.
Add-in перестал загружаться!
Иногда, когда в модуле возникает необработанный Exception, Word блокирует исполнение этого модуля при следующей загрузке. Зайдите Help->About->Disabled Items и посмотрите, нет ли в списке вашего расширения. Если есть, уберите его оттуда. При следующем Run-Debug он появится.
Как убрать
Удаление расширения не такое тривиальное. Вытащите кнопку COM-AddIns на тулбар Microsoft Word. Для этого надо зайти в Tools->Customize->Tools->(Drag’n’Drop)COM-AddIns. Кликните на нее и снимите галку с вашего расширения. Он выгрузится. Чтобы заново подгружать, наоборот, выставите галку обратно. Другой способ — зайти в панель управления и удалить из программ.
А что с Word 2007?
Add-in замечательно подгружается в Ribbon на последнюю вкладку.
Там еще кучка мелких подводных камней. Но я тут и так уже настолько много написал, что не уверен, что кто-нибудь до конца дочитает:)
Где взять код
github.com/head-thrash/VSTO-CAB
Выводы
В общем, можно взять VSTO, Microsoft Office 2003, .NET Framework 2.0 и сделать решение. Базовое решение, на которое можно нарастить функционал, я привел в этой статье. Кто хочет — пользуйтесь на здоровье. Буду рад ответить на вопросы и подправить неточности, если здесь такие будут. Спасибо огромное за внимание!
Выберите вариант загрузки:
- скачать с сервера SoftPortal
Word Viewer — бесплатная программа для просмотра Word-документов. Позволяет открывать, просматривать и печатать любой документ Microsoft Office Word (DOC, DOCX), Rtf файлы, а также TXT файлы. (полное описание…)
Рекомендуем популярное
DjvuReader 2.0.0.26
DjVuReader — программа для просмотра файлов в формате djvu (электронные книги). Поддерживает…
WinDjView 2.1
WinDjView — отличная утилита для просмотра DjVu файлов, предоставляющая пользователю все…
Doc Reader 2.0
Doc Reader — простая в использовании программа, которая позволяет открывать, просматривать и…
Печать книгой 3.4
Печать книгой — надстройка для Word 97-2010 позволяющая печатать любые документы в форме…
Используем сценарии 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)
Данная утилита поддерживает лишь несколько опций «Ворда». Однако зачастую только они и нужны. Поэтому вместо того, чтобы устанавливать дорогостоящий пакет Office от Майкрософт, можно скачать Microsoft Office Word Viewer бесплатно.
Конечно, в таком случае вы не сможете отредактировать «вордовский» документ. Нельзя будет его сохранить или открыть через него новый. Зато вы сможете открыть его, скопировать целиком или частично и сохранить в другой программе. Как правило, на любом ПК или планшете есть приложение для работы с текстовыми документами. Этот софт можно носить с собой на флешке, диске или карте памяти. Все, что требуется – это скачать Microsoft Office Word Viewer бесплатно и сохранить на компьютере или на нужном носителе. Среди форматов, которые можно открыть, если скачать Microsoft Office Word Viewer бесплатно, следующие: RTF, TXT, XML, web-страницы HTM, HTML, MHT, MHTML, WPD, DOC, WPD, WPS, WPS. Если же на компьютер загрузить пакет обеспечения совместимости Microsoft Office, то с помощью WordViewer будет доступен просмотр docx и docm.
Возможности:
- открывает файлы Ворд;
- позволяет копировать документ полностью или частями;
- быстрая отправка на печать;
- поддержка многих форматов.
Принцип работы:
Этот «просмотрщик» сравнивают, к примеру, с Adobe Reader, который разрешает открывать и проводить некоторые операции с PDF-файлами. Но даже «просмотрщики» бывают платными или же «тяжелыми». И если вам нужно просто открыть «вордовский» файл, распечатать его или отправить в другую программу, тогда данная утилита – оптимальный выбор.
Плюсы:
- простота в использовании;
- нет необходимости в инсталляции;
- не понадобятся приложения Microsoft Office.
Минусы:
- отсутствие функции редактирования;
- нет опции «Создать новый документ»;
- нельзя сохранить файл.
Эта программа может здорово выручить в случае, когда вы оказались за чужим компьютером, где не будет старого-доброго майкросотовского «Ворда». К тому же, возможно, вам, будет достаточно просто прочитать документ, скопировать его или распечатать. Все эти функции и предоставляет просмотрщик (так называемый бесплатный Word). Кроме того, в отличие от Майкрософт Ворд, мы предлагаем скачать Word Viewer бесплатно.
Word Viewer — бесплатный просмотрщик документов Word со стандартным набором функций открытия, копирования и распечатывания файлов. Отправляет документы по электронной почте.
В данной программе отсутствует редактирование, но, зачастую, именно открытия и копирования достаточно для быстрой печати документа или сохранения в другую программу. К тому же, нет необходимости устанавливать платный лицензионный «офис» Майкрософта, а скачать бесплатно Word Viewer на компьютер довольно просто.
Осуществляет прочтение документов форматов: DOCX, DOCM, RTF, TXT, форматы веб-страниц (HTM, HTML, MHT, MHTML), WPD, WPS, XML (.xml).
Рассматриваемый нами просмотрщик очень удобен в ситуациях, когда на ПК отсутствует Word, а документ нужно срочно распечатать или перенести на иной источник. Тогда возможность хранения софта на различных носителях будет кстати. К тому же, возможно масштабировать, зеркально отображать и поворачивать текст.
Похожие программы для компьютера
Оцените программу
(348 оценок, среднее: 4,33 из 5)
Загрузка…