Библиотека мс ворд где находится

Обновлено: 05.07.2024

Немного философии. В действительности, зачем нужно формировать из информационной базы текстовые файлы, и почему обязательно в формате Ворд?

Потому, что пользователь для работы с текстом использует текстовый процессор. Строго говоря, кроме Ворда всегда существовали альтернативные программы, не уступающие по функционалу. Сейчас 2021 год и пользователи давно привыкли к таким вещам как жесткий пробел, запрет висящих строк, абзац, начинающийся с новой страницы, межстрочный интервал, колонтитулы и абзацные отступы. Довольно часто можно столкнуться с заявлением "наша разработка может формировать документы в формате Ворд". При дальнейшем рассмотрении оказывается, что "шаблон" хранится непосредственно в информационной базе либо в виде текста, либо в виде форматированного текста, либо в виде набора абзацев и так далее. Как бы ни старались разработчики платформы и приложения, полученный файл это не тот "Ворд", которого ожидает пользователь. Этот эрзац всегда является компромиссом между полноценным файлом Ворда и возможностями системы автоматизации. Для того, чтобы формировать полноценный файл Ворда, со всеми возможностями форматирования, которыми пользователи привыкли пользоваться, требуется пересоздать Ворд внутри информационной системы, что практически недостижимо.

Потому, что никакие другие файлы кроме файлов Ворда не будут приняты партнерами пользователя. В этом смысле Ворд безальтернативен т.к. все пользуются именно Вордом. Можно сколько угодно рассуждать о преимуществах Лайбре Офиса, но, когда ежедневно нужно обмениваться документами с десятком новых людей, без Ворда не обойтись.

Что значит сформировать файл Ворд?

В связи с неоднозначностью сложившейся терминологии, считаю нужным пояснить. Под формированием файла Ворд по пользовательскому шаблону я подразумеваю следующий процесс. Пользователь передает разработчику файл с образцом документа, который хочет получать из информационной системы в автоматизированном режиме. Разработчик дорабатывает информационную систему таким образом, чтобы она позволяла формировать файлы, точно соответствующие первоначальному образцу. Точно, значит без явных указаний пользователя разработчик не меняет по своему усмотрению ни одного элемента форматирования, ни шрифт, ни размер, ни поля, ни колонтитулы. НИЧЕГО не меняет. Совершенно ничего. На выходе пользователь должен получить документ неотличимый от документа, созданного собственноручно.

Способы формирования файла Ворд

Работа программы по формированию файла сводится к модификации образца, предоставленного пользователем. К счастью, пользователи приложений, построенных на базе 1С-Предприятия, люди скучные. И их запросы к формированию файлов невелики. Им не требуются информационные буклеты или рекламные плакаты. Им нужны документы. Договоры, акты, письма, исковые заявления, и т.д. Потому обработка файла программой сводится к замене (вставке) текста на полученный из базы данных, удаление каких-то блоков текста и, быть может, вставке небольших картинок, например, логотипа или штрих-кода.

Существует два популярных способа работы с файлами Ворд:

1. Через СОМ-Объект Ворд.

2. Через непосредственную модификацию файлов docx

Главное отличие между ними заключается в том, что первый способ предоставляет разработчику инструмент - полнофункциональный API, позволяющий делать с документом все то же самое, что может делает пользователь, непосредственно работая в редакторе. Второй же способ предполагает собственную разработку инструмента, на основании документации по формату хранения файла. Если функциональность разработанного инструмента перестанет удовлетворять возникающим потребностям - придется разрабатывать (или искать) новый инструмент. В то время как модернизация кода основанного на API СОМ-объектов не представляет сложностей.

Первый способ предполагает, что на том компьютере, где будет исполняться код приложения и формироваться файл, установлен Майкрософт Офис. При установке, Офис регистрирует в Виндоус СОМ-объекты для каждого из приложений входящих в пакет. Таким образом, другие приложения, запущенные на компьютере, могут через интерфейс СОМ-объектов выполнять любые действия с документами офисных приложений, возможности предоставленного программного интерфейса, как минимум, не уступают возможностям пользователя, редактирующего документ непосредственно в приложении.

Главная проблема примеров из интернета по рассматриваемой теме - игнорируется тот факт, что за компьютером сидит живой пользователь. Видимо, предполагается, что после нажатия кнопки "сформировать файл", пользователь должен замереть, не дышать, не дотрагиваться до мыши и клавиатуры в течение всего времени создания файла. А ведь формирование каждого файла может занимать заметное время, в некоторых случаях - больше минуты. И ладно бы вопрос стоял "или так или никак". Но ведь на самом деле, нет. Можно работать с СОМ-Объектом параллельно с работой пользователя, код чувствительный действиям пользователя не имеет никаких преимуществ перед кодом, не мешающим пользователю. Единственная причина, по которой он используется - нежелание разработчика вникнуть в проблему и рассмотреть альтернативные варианты решения.

Код языка 1С для работы с СОМ-Объектами на сервере и на клиенте ничем не отличается. Единственное, за сервером не работает реальный пользователь, поэтому проблема неудачного кода не выплывает с такой остротой. Повторюсь, преимуществ у такого кода все равно нет. Тем более, что код нужно отлаживать, часто это удобнее делать на клиенте, вот и появился пользователь. А еще, может потребоваться перенос работающего кода с сервера на клиент, например, в рамках рефакторинга и изменения архитектуры приложения. А еще, код может работать в файловой базе, где "сервер" очень условен - программный слой, запускаемый на машине каждого пользователя. Таким образом, лучше всего исходить из того, что пользователь за компьютером есть всегда.

Объектная модель Ворд

Ворд, запущенный в качестве СОМ-Объекта, предоставляет доступ к множеству объектов приложения. Понятие "объект" такое же как везде - программная абстракция, имеющая методы и свойства. Методы могут быть как процедурами, так и функциями, при этом функции можно вызывать как процедуры, игнорируя возвращаемое значение. Свойства могут быть либо объектами, либо обычными (скалярными, примитивными) данными, такими как число, строка, логический тип.

Среди объектов особо выделяются специальные объекты-контейнеры, называемые коллекциями. Каждая коллекция предназначена для хранения ссылок на группу однотипных объектов. Например, коллекция Documents хранит ссылки на объекты Document, коллекция Tables хранит ссылки на объекты Table и т.д. Все коллекции именованы во множественном числе, а обычные объекты в единственном. Нумерация объектов в коллекции начинается с единицы. Коллекции Ворд можно перебирать циклом "Для каждого" языка программирования 1С.

Полный список объектов можно, и нужно, смотреть в справочной системе Ворд (раздел справки по Вижуал Бейсику (VBA)). Для старых версий справка откроется локально на компьютере пользователя. Новые версии отправят на сайт Майкрософт: en-us /office/vba/api/overview/word/object-model

Многие методы объектов Ворда в качестве параметров принимают числовые значения. Для того, чтобы не путаться в числовых значениях, в Вижуал Бейсике предусмотрены именованные константы. Например, константа wdFormatRTF соответствует числу 6. В Вижуал Бейсике можно писать код так:

Вне VBA именованные константы недоступны, поэтому код 1С будет таким:

Или, без “магических” чисел, таким:

Я предпочитают последний вариант, терпеть не могу непонятных чисел в коде.

Запуск Ворд, открытие файла

Традиционно, первые три строчки работы СОМ-Объектом Ворд выглядят так:

… и это уже неправильно! Третья строчка сразу говорит о том, что перед вами бездумная копипаста. Справедливости ради, бывают и толковые примеры, начинающиеся именно так, но, это лишь подтверждает, что даже в толковых примерах присутствует копипаста, не осмысленная автором. Что неправильно с третьей командой будет объяснено ниже, сначала разберем первые две строки.

Запускает приложение Ворд и возвращает на него ссылку. Теперь по ссылке Word мы можем обращаться к СОМ-объекту. Возникает закономерный вопрос, влияет ли как-то окружение, в момент выполнения команды, на результат её работы? Из окружения нас интересует в первую очередь интерактивная работа пользователя с Вордом. Возможны два варианта:

- в момент выполнения Ворд запущен (имеются открытые пользователем файлы)

- в момент вызова Ворд не запущен

Так вот, нет, не влияет. Ворд запускается как новый экземпляр приложения, коллекция Documents запущенного приложения не содержит ни одной ссылки, т.е. доступа к ранее открытым документам через ссылку Word не получить.
Но, после запуска СОМ-Объекта, новые, открываемые пользователем, файлы могут открыться именно в этом экземпляре Ворда. Для пользователя разницы нет, но нам это следует, на всякий случай, учитывать.

Скрывает Ворд. Т.е. пользователь не будет видеть обрабатываемый файл в отдельном окне. Никакой особой пользы скрытие окна Ворд не несет. Если программа написана корректно, то пользователь не будет мешать программе, а программа не будет мешать пользователю, вне зависимости от того, видимо ли окно обрабатываемого файла. Естественно, при условии, что пользователь не начнет редактировать открытый документ.

Свойству Visible желательно присвоить одно из значений. В противном случае, СОМ-Объект Ворд откроется в скрытом режиме. Но если пользователь откроет какой-нибудь файл, то наш редактируемый файл может неожиданно стать видимым. С другой стороны, если пользователь успеет открыть свой файл после запуска СОМ-Объекта, но перед тем, как будет выполнено присвоение свойству значения Ложь , то открытый файл станет невидимым и недоступным для редактирования пользователем.

В общем, лично я предпочитаю оставлять редактируемый документ в видимом окне.

Перейдем к неправильной части примера

Открывает файл, в терминологии Ворд открытый файл называется "документ". Далее нужно получить ссылку на открытый документ, чтобы потом по этой ссылке можно было с ним работать. Вы можете найти такие примеры:

Ну что ж, разумно. Предполагаем, что открыт только наш документ, соответственно в коллекции Documents есть единственный элемент, значит этот элемент имеет индекс равный единице. Это работает, вероятность того, что пользователь успеет открыть файл в промежуток времени, между запуском СОМ-Объекта и этим присваиванием, ничтожно мала.

Ну что ж, разумно. Последний открытый в Ворде документ становится активным, можно получить на него ссылку и так. Это работает, вероятность того, что пользователь успеет открыть еще один документ после открытия нашего и до получения ссылки на него ничтожно мала.

Примеры чуточку безумные:

WTF? Хотя, безусловно, работает. С теми же оговорками, что и выше.

Как программировать неправильно, выяснили, теперь о том, как открывать документы правильно.

Для открытия документа можно использовать два метода коллекции Documents . Первый - Open() приведен выше, второй - Add() .

Метод Open() открывает файл для редактирования в Ворде, документ остается связанным с этим файлом - в заголовке окна Ворд указывается имя файла. Открыть можно любой файл, поддерживаемый Вордом, формат файла при редактировании не меняется. Например, открыли файл .rtf, отредактировали, сохранили, файл остался .rtf. Открывать непосредственно шаблон из папки, в которой хранятся шаблоны таким способом не стоит. Если что-то произойдет не так, например, сработает автосохранение в Ворде, шаблон будет испорчен. Сначала файл шаблона следует скопировать (при работе в клиент-серверном варианте это само собой разумеющиеся действие), а потом можно открывать.

Метод Add() создает новый документ на основании указанного шаблона. Шаблоном может быть любой файл, не обязательно родные для Ворда .doc или .docx или .dot. Открытый документ с файлом-шаблоном не связывается, в заголовке окна Ворд будет надпись "Документ1 - Word". При этом информация о формате исходного файла не сохраняется. Открывается просто документ Ворд, содержащий в себе всю информацию из указанного файла. При сохранении без явного указания типа файла он будет сохранен как .docx. Единственное исключение - документ, открытый на основе файла .doc, такие документы по умолчанию сохраняются в файлы .doc. Метод Add() можно использовать для создания документов на основании оригинала шаблона, шаблон повредить невозможно даже случайно.

Методы Open() и Add() являются функциями, т.е. возвращают значение. Причем возвращают они ссылку на новый документ. И ловить потом этот документ в коллекции Documents нам не нужно, ссылку можно сразу сохранить в переменной для дальнейшего использования. Таким образом, для открытия используются следующие команды:

Когда шаблон заполнен требуемым образом его необходимо сохранить. Самый простой вариант, если файл открыли методом Open() , для сохранения достаточно вызвать метод Save() :

Если же документ еще не связан с файлом, нужно вызвать метод SaveAs() :

Если формат по умолчанию нас не устраивает, вторым параметром метода можно явно задать тип файла:

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

Имеется в виду, что не будет ошибки времени выполнения. Однако, приведенный выше пример идеологически неверен. Допустим, через некоторое время шаблон был заменен и файл шаблона получил расширение .docx. Для внесения изменений в программу нам потребуется две правки, первая в методе Add() , вторая в методе SaveAs() . В этом и проблема, код дублируется, одно изменение должно вносится в одном месте программы, а не в разных. Если расширение файла не будет указано, при сохранении будет добавлено расширение, соответствующее типу сохраняемого файла. Если же расширение будет указано неверно, т.е. не будет соответствовать типу файла, то. либо получаем ошибку времени исполнения, либо файл сохранится в формате, не соответствующем расширению (в зависимости от комбинации тип/расширение возможно и то и другое). Обе ситуации ненормальны. Ошибка времени выполнения, конечно, будет отловлена на этапе тестирования. А ошибка несоответствия расширения фактическому типу данных выйдет потом боком пользователю.

Завершение работы с СОМ-Объектом рекомендуют (неправильно) делать так:

На первый взгляд, можно и не заметить нолик в параметре метода Quit() . А он важен. Это просто константа wdDoNotSaveChanges :-). Закрыться-то Ворд закроется, вместе со всеми файлами, которые пользователь, возможно, открыл и редактирует.

Если мы исходим из предположения, а мы из него исходим, что пользователь может работать интерактивно со своими собственными файлами, которые могут быть открыты в том же экземпляре Ворда, что и наш СОМ-Объект, то торопиться принудительно выгонять пользователей и закрывать экземпляр приложения не стоит. Можно проверить, есть ли еще открытые документы, кроме нашего. Если есть, не закрывать экземпляр Ворда, пусть пользователь спокойно работает, если других документов нет - закрыть:

Не очень популярный, но иногда встречающийся способ.

Сначала в документ добавляются пользовательские свойства. Для Ворда 2016 это делается так:

Надстройки - это подключаемые модули, которые расширяют возможности приложения, в данном случае Microsoft Word. Существуют разные виды надстроек, остановимся пока на надстройках, основанных на шаблонах. Что такое шаблон в Word? Шаблон - это специальный файл, в котором содержатся различные сведения о стилях, структуре, параметрах страниц, содержащихся макросах и так далее, на основе которого можно создавать новые документы.

Существует два вида шаблонов - общие и шаблоны конкретных документов. Файлы шаблонов имеют расширение ".dot" или ".dotm". Общие шаблоны, в том числе и шаблон Normal.dot, в который по умолчанию сохраняются макросы записываемые макрорекордером, содержат настройки, доступные всем документам MS Word. Шаблон конкретного документа содержит настройки, доступные только для документов, основанных на этом шаблоне. В Word имеется ряд встроенных шаблонов документов, например шаблоны писем, контрактов, резюме и прочее. Выбрать нужный шаблон можно при создании нового документа.

выбор шаблона в Word

Кроме этого пользователи могут сами создавать шаблоны для своих документов. Один и тот же шаблон может использоваться и как общий шаблон и как шаблон документа. Теперь рассмотрим сам процесс загрузки и подключения шаблонов. Чтобы не возникало путаницы, условно разделим шаблоны на "загруженные" и "подключенные". Загруженными будем считать шаблоны, ставшие доступными приложению MS Word, а подключенными будем считать шаблоны, которые не только загружены, но и сделаны активными (в списке шаблонов и надстроек перед ними проставлены флажки). Глобальный шаблон Normal.dot по умолчанию всегда и загружен и подключен. Обратите внимание на скриншот ниже, загружено три шаблона, а подключен из них один (не считая шаблона Normal).

Список надстроек Word

В зависимости от того насколько часто шаблон будет использоваться, расположить его можно в разных папках. Для того, чтобы шаблон автоматически загружался и также автоматически подключался при каждом запуске MS Word, расположить его нужно в папке по адресу Documents and Settings/Ваше имя/Application Data/Microsoft/Word/Startup.

Если шаблон разместить в папке Documents and Settings/Ваше имя/Application Data/Microsoft/Шаблоны, то загружать и подключать его нужно будет вручную (об этом чуть позже), кроме того при каждом следующем запуске приложения Word, этот шаблон будет в списке загруженных шаблонов и надстроек, но снова будет выключенным. В этом списке отображаются не только общие шаблоны из папки "Шаблоны", но и шаблоны, автоматически загружаемые при запуске MS Word.

Еще один типичный случай, когда шаблон расположен в совершенно произвольной папке. Подключение рассмотрим в разных версиях в отдельности.

Microsoft Word 2003

Запускаем приложение, заходим в меню Сервис/Шаблоны и надстройки.

Меню шаблоны в Word 2003

В появившемся диалоговом окне "Шаблоны и надстройки" нажимаем кнопку "Добавить. "

Список надстроек в Word 2003

Через открывшееся окно проводника находим папку с нужным шаблоном. После добавления этот шаблон появится в списке шаблонов и надстроек, слева от него будет установлена галочка. Шаблон (надстройка) загружен и подключен.

Microsoft Word 2007

В запущенном приложении нажимаем кнопку Office и переходим в "Параметры Word". В диалоговом окне "Параметры Word" выбираем раздел "Надстройки". В поле "Управление" выбираем пункт "Надстройки Word" либо "Шаблоны" без разницы, после чего нажимаем кнопку "Перейти. ".

Меню шаблоны в Word 2007

Появляется диалоговое окно "Шаблоны и надстройки", в нем нажимаем кнопку "Добавить. " и добавляем нужный шаблон.

Список надстроек в Word 2007

Это же диалоговое окно можно вызывать нажатием кнопки "Шаблон документа" на вкладке "Разработчик".

Шаблон в Word 2007

Если такая вкладка в Вашем приложении отсутствует, ее необходимо предварительно отобразить, это упростит и ускорит доступ к окну управления шаблонами и надстройками.

Microsoft Word 2010

В запущенном приложении переходим на вкладку "Файл", окрашенную в синий цвет, после чего переходим в "Параметры Word". В диалоговом окне "Параметры Word" выбираем раздел "Надстройки". В поле "Управление" выбираем пункт "Надстройки Word" либо "Шаблоны" без разницы, после чего нажимаем кнопку "Перейти. ".

Меню шаблоны в Word 2010

В появившемся диалоговом окне "Шаблоны и надстройки" нажимаем кнопку "Добавить. " и выбираем шаблон, который собираемся установить.

Список надстроек в Word 2010

Тоже самое можно проделать еще быстрее, просто нажать кнопку "Шаблон документа" на вкладке "Разработчик".

Шаблон в Word 2010

Но есть один нюанс, вкладка "Разработчик" по умолчанию в приложении отсутствует, ее необходимо предварительно отобразить, на вкладке собраны инструменты для работы с макросами и надстройками и отображение этой вкладки упростит и ускорит доступ к окну управления шаблонами и надстройками.

Microsoft Word 2013

Также как и в Word 2010, в Word 2013 надстройки (шаблоны) можно установить двумя способами:

1. Через вкладку "Файл"/Параметры/Надстройки, в поле "Управление" из выпадающего списка выбрать пункт "Надстройки Word" либо "Шаблоны" и кликнуть по кнопке "Перейти". В появившемся окне менеджера надстроек "Шаблоны и надстройки" при помощи кнопки "Добавить" выбрать файл устанавливаемой надстройки и нажать "ОК".

2. Отобразить на ленте вкладку "Разработчик" и кликнуть по кнопке "Надстройки" в группе кнопок "Надстройки" либо по кнопке "Шаблон документа" в группе кнопок "Шаблоны".

Шаблон в Word 2013

После этого в появившемся окне "Шаблоны и надстройки" кликнуть по кнопке "Добавить" и выбрать файл надстройки, которую необходимо установить.

Процесс установки надстроек (шаблонов) для Word, на примере Word 2013 записан на видео и выложен в youtube (смотреть видео по установке надстроек ).

Microsoft Word 2016

В Word 2016 установить надстройку/шаблон можно также, как и в предыдущих версиях, либо через вкладку "Файл"/Параметры/Надстройки с выбором пункта "Надстройки для Word" в поле "Управление", либо отобразить на ленте вкладку "Разработчик", кликнуть по кнопке "Надстройки" либо "Шаблон документа" и при помощи кнопки "Добавить" выбрать файл надстройки, которые требуется установить.

Немного философии. В действительности, зачем нужно формировать из информационной базы текстовые файлы, и почему обязательно в формате Ворд?

Потому, что пользователь для работы с текстом использует текстовый процессор. Строго говоря, кроме Ворда всегда существовали альтернативные программы, не уступающие по функционалу. Сейчас 2021 год и пользователи давно привыкли к таким вещам как жесткий пробел, запрет висящих строк, абзац, начинающийся с новой страницы, межстрочный интервал, колонтитулы и абзацные отступы. Довольно часто можно столкнуться с заявлением "наша разработка может формировать документы в формате Ворд". При дальнейшем рассмотрении оказывается, что "шаблон" хранится непосредственно в информационной базе либо в виде текста, либо в виде форматированного текста, либо в виде набора абзацев и так далее. Как бы ни старались разработчики платформы и приложения, полученный файл это не тот "Ворд", которого ожидает пользователь. Этот эрзац всегда является компромиссом между полноценным файлом Ворда и возможностями системы автоматизации. Для того, чтобы формировать полноценный файл Ворда, со всеми возможностями форматирования, которыми пользователи привыкли пользоваться, требуется пересоздать Ворд внутри информационной системы, что практически недостижимо.

Потому, что никакие другие файлы кроме файлов Ворда не будут приняты партнерами пользователя. В этом смысле Ворд безальтернативен т.к. все пользуются именно Вордом. Можно сколько угодно рассуждать о преимуществах Лайбре Офиса, но, когда ежедневно нужно обмениваться документами с десятком новых людей, без Ворда не обойтись.

Что значит сформировать файл Ворд?

В связи с неоднозначностью сложившейся терминологии, считаю нужным пояснить. Под формированием файла Ворд по пользовательскому шаблону я подразумеваю следующий процесс. Пользователь передает разработчику файл с образцом документа, который хочет получать из информационной системы в автоматизированном режиме. Разработчик дорабатывает информационную систему таким образом, чтобы она позволяла формировать файлы, точно соответствующие первоначальному образцу. Точно, значит без явных указаний пользователя разработчик не меняет по своему усмотрению ни одного элемента форматирования, ни шрифт, ни размер, ни поля, ни колонтитулы. НИЧЕГО не меняет. Совершенно ничего. На выходе пользователь должен получить документ неотличимый от документа, созданного собственноручно.

Способы формирования файла Ворд

Работа программы по формированию файла сводится к модификации образца, предоставленного пользователем. К счастью, пользователи приложений, построенных на базе 1С-Предприятия, люди скучные. И их запросы к формированию файлов невелики. Им не требуются информационные буклеты или рекламные плакаты. Им нужны документы. Договоры, акты, письма, исковые заявления, и т.д. Потому обработка файла программой сводится к замене (вставке) текста на полученный из базы данных, удаление каких-то блоков текста и, быть может, вставке небольших картинок, например, логотипа или штрих-кода.

Существует два популярных способа работы с файлами Ворд:

1. Через СОМ-Объект Ворд.

2. Через непосредственную модификацию файлов docx

Главное отличие между ними заключается в том, что первый способ предоставляет разработчику инструмент - полнофункциональный API, позволяющий делать с документом все то же самое, что может делает пользователь, непосредственно работая в редакторе. Второй же способ предполагает собственную разработку инструмента, на основании документации по формату хранения файла. Если функциональность разработанного инструмента перестанет удовлетворять возникающим потребностям - придется разрабатывать (или искать) новый инструмент. В то время как модернизация кода основанного на API СОМ-объектов не представляет сложностей.

Первый способ предполагает, что на том компьютере, где будет исполняться код приложения и формироваться файл, установлен Майкрософт Офис. При установке, Офис регистрирует в Виндоус СОМ-объекты для каждого из приложений входящих в пакет. Таким образом, другие приложения, запущенные на компьютере, могут через интерфейс СОМ-объектов выполнять любые действия с документами офисных приложений, возможности предоставленного программного интерфейса, как минимум, не уступают возможностям пользователя, редактирующего документ непосредственно в приложении.

Главная проблема примеров из интернета по рассматриваемой теме - игнорируется тот факт, что за компьютером сидит живой пользователь. Видимо, предполагается, что после нажатия кнопки "сформировать файл", пользователь должен замереть, не дышать, не дотрагиваться до мыши и клавиатуры в течение всего времени создания файла. А ведь формирование каждого файла может занимать заметное время, в некоторых случаях - больше минуты. И ладно бы вопрос стоял "или так или никак". Но ведь на самом деле, нет. Можно работать с СОМ-Объектом параллельно с работой пользователя, код чувствительный действиям пользователя не имеет никаких преимуществ перед кодом, не мешающим пользователю. Единственная причина, по которой он используется - нежелание разработчика вникнуть в проблему и рассмотреть альтернативные варианты решения.

Код языка 1С для работы с СОМ-Объектами на сервере и на клиенте ничем не отличается. Единственное, за сервером не работает реальный пользователь, поэтому проблема неудачного кода не выплывает с такой остротой. Повторюсь, преимуществ у такого кода все равно нет. Тем более, что код нужно отлаживать, часто это удобнее делать на клиенте, вот и появился пользователь. А еще, может потребоваться перенос работающего кода с сервера на клиент, например, в рамках рефакторинга и изменения архитектуры приложения. А еще, код может работать в файловой базе, где "сервер" очень условен - программный слой, запускаемый на машине каждого пользователя. Таким образом, лучше всего исходить из того, что пользователь за компьютером есть всегда.

Объектная модель Ворд

Ворд, запущенный в качестве СОМ-Объекта, предоставляет доступ к множеству объектов приложения. Понятие "объект" такое же как везде - программная абстракция, имеющая методы и свойства. Методы могут быть как процедурами, так и функциями, при этом функции можно вызывать как процедуры, игнорируя возвращаемое значение. Свойства могут быть либо объектами, либо обычными (скалярными, примитивными) данными, такими как число, строка, логический тип.

Среди объектов особо выделяются специальные объекты-контейнеры, называемые коллекциями. Каждая коллекция предназначена для хранения ссылок на группу однотипных объектов. Например, коллекция Documents хранит ссылки на объекты Document, коллекция Tables хранит ссылки на объекты Table и т.д. Все коллекции именованы во множественном числе, а обычные объекты в единственном. Нумерация объектов в коллекции начинается с единицы. Коллекции Ворд можно перебирать циклом "Для каждого" языка программирования 1С.

Полный список объектов можно, и нужно, смотреть в справочной системе Ворд (раздел справки по Вижуал Бейсику (VBA)). Для старых версий справка откроется локально на компьютере пользователя. Новые версии отправят на сайт Майкрософт: en-us /office/vba/api/overview/word/object-model

Многие методы объектов Ворда в качестве параметров принимают числовые значения. Для того, чтобы не путаться в числовых значениях, в Вижуал Бейсике предусмотрены именованные константы. Например, константа wdFormatRTF соответствует числу 6. В Вижуал Бейсике можно писать код так:

Вне VBA именованные константы недоступны, поэтому код 1С будет таким:

Или, без “магических” чисел, таким:

Я предпочитают последний вариант, терпеть не могу непонятных чисел в коде.

Запуск Ворд, открытие файла

Традиционно, первые три строчки работы СОМ-Объектом Ворд выглядят так:

… и это уже неправильно! Третья строчка сразу говорит о том, что перед вами бездумная копипаста. Справедливости ради, бывают и толковые примеры, начинающиеся именно так, но, это лишь подтверждает, что даже в толковых примерах присутствует копипаста, не осмысленная автором. Что неправильно с третьей командой будет объяснено ниже, сначала разберем первые две строки.

Запускает приложение Ворд и возвращает на него ссылку. Теперь по ссылке Word мы можем обращаться к СОМ-объекту. Возникает закономерный вопрос, влияет ли как-то окружение, в момент выполнения команды, на результат её работы? Из окружения нас интересует в первую очередь интерактивная работа пользователя с Вордом. Возможны два варианта:

- в момент выполнения Ворд запущен (имеются открытые пользователем файлы)

- в момент вызова Ворд не запущен

Так вот, нет, не влияет. Ворд запускается как новый экземпляр приложения, коллекция Documents запущенного приложения не содержит ни одной ссылки, т.е. доступа к ранее открытым документам через ссылку Word не получить.
Но, после запуска СОМ-Объекта, новые, открываемые пользователем, файлы могут открыться именно в этом экземпляре Ворда. Для пользователя разницы нет, но нам это следует, на всякий случай, учитывать.

Скрывает Ворд. Т.е. пользователь не будет видеть обрабатываемый файл в отдельном окне. Никакой особой пользы скрытие окна Ворд не несет. Если программа написана корректно, то пользователь не будет мешать программе, а программа не будет мешать пользователю, вне зависимости от того, видимо ли окно обрабатываемого файла. Естественно, при условии, что пользователь не начнет редактировать открытый документ.

Свойству Visible желательно присвоить одно из значений. В противном случае, СОМ-Объект Ворд откроется в скрытом режиме. Но если пользователь откроет какой-нибудь файл, то наш редактируемый файл может неожиданно стать видимым. С другой стороны, если пользователь успеет открыть свой файл после запуска СОМ-Объекта, но перед тем, как будет выполнено присвоение свойству значения Ложь , то открытый файл станет невидимым и недоступным для редактирования пользователем.

В общем, лично я предпочитаю оставлять редактируемый документ в видимом окне.

Перейдем к неправильной части примера

Открывает файл, в терминологии Ворд открытый файл называется "документ". Далее нужно получить ссылку на открытый документ, чтобы потом по этой ссылке можно было с ним работать. Вы можете найти такие примеры:

Ну что ж, разумно. Предполагаем, что открыт только наш документ, соответственно в коллекции Documents есть единственный элемент, значит этот элемент имеет индекс равный единице. Это работает, вероятность того, что пользователь успеет открыть файл в промежуток времени, между запуском СОМ-Объекта и этим присваиванием, ничтожно мала.

Ну что ж, разумно. Последний открытый в Ворде документ становится активным, можно получить на него ссылку и так. Это работает, вероятность того, что пользователь успеет открыть еще один документ после открытия нашего и до получения ссылки на него ничтожно мала.

Примеры чуточку безумные:

WTF? Хотя, безусловно, работает. С теми же оговорками, что и выше.

Как программировать неправильно, выяснили, теперь о том, как открывать документы правильно.

Для открытия документа можно использовать два метода коллекции Documents . Первый - Open() приведен выше, второй - Add() .

Метод Open() открывает файл для редактирования в Ворде, документ остается связанным с этим файлом - в заголовке окна Ворд указывается имя файла. Открыть можно любой файл, поддерживаемый Вордом, формат файла при редактировании не меняется. Например, открыли файл .rtf, отредактировали, сохранили, файл остался .rtf. Открывать непосредственно шаблон из папки, в которой хранятся шаблоны таким способом не стоит. Если что-то произойдет не так, например, сработает автосохранение в Ворде, шаблон будет испорчен. Сначала файл шаблона следует скопировать (при работе в клиент-серверном варианте это само собой разумеющиеся действие), а потом можно открывать.

Метод Add() создает новый документ на основании указанного шаблона. Шаблоном может быть любой файл, не обязательно родные для Ворда .doc или .docx или .dot. Открытый документ с файлом-шаблоном не связывается, в заголовке окна Ворд будет надпись "Документ1 - Word". При этом информация о формате исходного файла не сохраняется. Открывается просто документ Ворд, содержащий в себе всю информацию из указанного файла. При сохранении без явного указания типа файла он будет сохранен как .docx. Единственное исключение - документ, открытый на основе файла .doc, такие документы по умолчанию сохраняются в файлы .doc. Метод Add() можно использовать для создания документов на основании оригинала шаблона, шаблон повредить невозможно даже случайно.

Методы Open() и Add() являются функциями, т.е. возвращают значение. Причем возвращают они ссылку на новый документ. И ловить потом этот документ в коллекции Documents нам не нужно, ссылку можно сразу сохранить в переменной для дальнейшего использования. Таким образом, для открытия используются следующие команды:

Когда шаблон заполнен требуемым образом его необходимо сохранить. Самый простой вариант, если файл открыли методом Open() , для сохранения достаточно вызвать метод Save() :

Если же документ еще не связан с файлом, нужно вызвать метод SaveAs() :

Если формат по умолчанию нас не устраивает, вторым параметром метода можно явно задать тип файла:

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

Имеется в виду, что не будет ошибки времени выполнения. Однако, приведенный выше пример идеологически неверен. Допустим, через некоторое время шаблон был заменен и файл шаблона получил расширение .docx. Для внесения изменений в программу нам потребуется две правки, первая в методе Add() , вторая в методе SaveAs() . В этом и проблема, код дублируется, одно изменение должно вносится в одном месте программы, а не в разных. Если расширение файла не будет указано, при сохранении будет добавлено расширение, соответствующее типу сохраняемого файла. Если же расширение будет указано неверно, т.е. не будет соответствовать типу файла, то. либо получаем ошибку времени исполнения, либо файл сохранится в формате, не соответствующем расширению (в зависимости от комбинации тип/расширение возможно и то и другое). Обе ситуации ненормальны. Ошибка времени выполнения, конечно, будет отловлена на этапе тестирования. А ошибка несоответствия расширения фактическому типу данных выйдет потом боком пользователю.

Завершение работы с СОМ-Объектом рекомендуют (неправильно) делать так:

На первый взгляд, можно и не заметить нолик в параметре метода Quit() . А он важен. Это просто константа wdDoNotSaveChanges :-). Закрыться-то Ворд закроется, вместе со всеми файлами, которые пользователь, возможно, открыл и редактирует.

Если мы исходим из предположения, а мы из него исходим, что пользователь может работать интерактивно со своими собственными файлами, которые могут быть открыты в том же экземпляре Ворда, что и наш СОМ-Объект, то торопиться принудительно выгонять пользователей и закрывать экземпляр приложения не стоит. Можно проверить, есть ли еще открытые документы, кроме нашего. Если есть, не закрывать экземпляр Ворда, пусть пользователь спокойно работает, если других документов нет - закрыть:

Не очень популярный, но иногда встречающийся способ.

Сначала в документ добавляются пользовательские свойства. Для Ворда 2016 это делается так:

kak-v-vorde-sdelat-mnogourovnevyiy-spisok

Выбор стиля для списка со встроенной коллекции

1. Кликните в том месте документа, где должен начинаться многоуровневый список.

mesto-dlya-mnogourovnevogo-spiska-v-word

2. Кликните по кнопке “Многоуровневый список”, расположенной в группе “Абзац” (вкладка “Главная”).

knopka-mnogourovnevyiy-spisok-v-word

3. Выберите понравившийся стиль многоуровневого списка из тех, что представлены в коллекции.

vyibor-stilya-dlya-spiska-v-word

4. Введите элементы списка. Для изменения уровней иерархии элементов, представленных в списке, нажмите “TAB” (более глубокий уровень) или “SHIFT+TAB” (возвращение к предыдущему уровню.

primer-mnogourovnevogo-spiska-v-word

Создание нового стиля

Вполне возможно, что в числе многоуровневых списков, представленных в коллекции Microsoft Word, вы не найдете того, который бы вас устроил. Именно для таких случаев в этой программе предусмотрена возможность создания и определения новых стилей многоуровневых списков.

Новый стиль многоуровневого списка может быть применен при создании каждого последующего списка в документе. Кроме того, новый стиль, созданный пользователем, автоматически добавляется в доступную в программе коллекцию стилей.

1. Кликните по кнопке “Многоуровневый список”, расположенной в группе “Абзац” (вкладка “Главная”).

knopka-mnogourovnevyiy-spisok-v-word

2. Выберите “Определить новый многоуровневый список”.

opredelit-novyiy-stil-v-word

3. Начиная с уровня 1, введите желаемый формат номера, задайте шрифт, расположение элементов.

opredelenie-novogo-mnogourovnevogo-spiska-v-word

vyibor-stilya-dlya-urovnya-1-v-word

4. Повторите аналогичные действия для следующих уровней многоуровневого списка, определив его иерархию и вид элементов.

opredelenie-stilya-uroven-2-v-word

Примечание: Определяя новый стиль многоуровневого списка, в этом же списке вы можете использовать и маркеры и номера. К примеру, в разделе “Нумерация для этого уровня” вы можете пролистать перечень стилей многоуровневого списка, выбрав подходящий стиль маркера, который и будет применен к конкретному уровню иерархии.

opredelenie-urovnya-v-word

5. Нажмите “ОК” для принятия изменения и закрытия диалогового окна.

zakryitie-okna-opredeleniya-stilya-v-word

Примечание: Стиль многоуровневого списка, который был создан пользователем, будет автоматически установлен в качестве стиля, используемого по умолчанию.

Для перемещения элементов многоуровневого списка на другой уровень, воспользуйтесь нашей инструкцией:

1. Выберите элемент списка, который нужно переместить.

vyibor-elementa-spiska-v-word

2. Кликните по стрелке, расположенной около кнопки “Маркеры” или “Нумерация” (группа “Абзац”).

knopka-numeratsii-v-word

3. В выпадающем меню выберите параметр “Изменить уровень списка”.

vyibor-urovnya-dlya-spiska-v-word

4. Кликните по тому уровню иерархии, на который нужно переместить выбранный вами элемент многоуровневого списка.

izmenennyiy-uroven-spiska-v-word

Определение новых стилей

На данном этапе необходимо пояснить, в чем заключается разница между пунктами “Определить новый стиль списка” и “Определить новый многоуровневый список”. Первую команду уместно использовать в ситуациях, когда необходимо изменить стиль, созданный пользователем. Новый стиль, созданный с помощью этой команды, обнулит все его вхождения в документе.

Параметр “Определить новый многоуровневый список” крайне удобно использовать в случаях, когда нужно создать и сохранить новый стиль списка, который в дальнейшем не будет изменяться или же будет использоваться только в одном документе.

Ручная нумерация элементов списка

1. Кликните правой кнопкой мышки по тому номеру в списке, который нужно изменить.

nomer-v-spiske-v-word

2. Выберите параметр “Задать начальное значение”, а затем выполните необходимое действие:

zadat-nachalnoe-znachenie-v-word

    Активируйте параметр “Начать новый список”, измените значение элемента в поле “Начальное значение”.

nachat-novyiy-spisok-v-word

prodolzhit-predyidushhiy-spisok-v-word

3. Порядок нумерации списка будет изменен согласно заданным вами значениям.

izmenit-spisok-v-word

Вот, собственно, и все, теперь вы знаете, как создавать многоуровневые списки в Ворде. Инструкция, описанная в данной статье, применима ко всем версиям программы, будь то Word 2007, 2010 или его более новые версии.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Читайте также: