C заполнение шаблона word
Как показала практика работы с ERP системами — корпоративные приложения на 30% состоят из отчетов. Типичная ситуация для таких приложений — построить отчет по некоторым данным.
Для построения отчетов можно использовать ReportBuilder или любые другие системы построения отчетов. В этой статье я хочу рассмотреть построение отчетов в MS Word 2003 (и более поздние версии) посредством Aspose.Words, так как легко вносить правки, удобно разрабатывать, не требует особых навыков по работе с гигантами систем отчетов и т.д.
По однотипному набору данных требуется создавать шаблоны отчетов, которые представляют из себя обычный документ Word 2003 с набором ключевых полей.
Потом можно настроить шаблон как угодно, то есть привести его к тому виду в котором он должен выглядеть в конечном варианте. То есть создаем шаблон печатных форм для выбранного набора данных.
Плюсом такого решения является то, что человек, занимающийся разработкой самой печатной формы, может не иметь никаких знаний о SQL или источниках данных. Он должен лишь уметь работать с MS Office Word. Казалось бы, все просто, но в нашем случае предполагается, что:
- создание шаблона отчета и самого отчета может происходить на компьютере, где не установлен MS Office. Это отсекает возможность использовать COM;
- шаблоны отчетов имеют формат doc, а не docx, что было бы довольно удобно;
Постановка задачи
- На сервере где крутится продукт — не должен быть установлен Ms Word и иже с ним
- Это должен быть именно Word 2003, спасибо что не 95
- Удобное, а главное быстрое решение задачи
- Шаблоны отчетов должны быть настолько просты, что их мог бы создавать конечный бизнес-пользователь
Итак, задача ясна, приступаем.
Основными элементами печатных форм являются обычные поля с данными и таблицы данных. Для удобства работы разделим создание набора полей в шаблоне и создание таблицы в отдельные методы.
Обратите внимание на строку
Здесь в таблицу добавляется ключевое поле TableStart с внешним символом «TableEnd с символом «>». Эти поля должны быть в одной строке таблицы. Поля, заключенные между ними, относятся к текущей таблице и будут повторяться для набора данных. То есть, если надо расположить данные на нескольких строках, получите ошибку.
Но есть хитрость: можно добавить таблицу из трех колонок открывающий символ в первую колонку, закрывающий символ в последнюю колонку, а в средней ячейке вставить еще одну таблицу, данные в которой могут быть оформлены как угодно. Вставленная таблица и будет повторяться для каждого набора данных. По умолчанию это не добавлено, так как требуется редко (по крайней мере в тех целях где сейчас применяется).
Этих двух методов вполне достаточно для создания шаблона. Далее этот шаблон настраивается (шрифты, разметка и прочее) — нас это не сильно интересует. Осталось только заполнить данными готовый шаблон, сохранив при этом разметку. Для заполнения полей, не находящихся в таблице, все просто:
Теперь мы подошли к заполнению таблиц. В Aspose к этому вопросу подошли весьма капитально, в чем Вы скоро убедитесь.
Тут все довольно просто, но давайте глянем:
Вот и все, необходимый минимум есть. Изменения в разметке не происходят, пустые поля (для которых нет данных) просто исчезают в печатной форме. При заполнении полей значениями надо передавать object, но здесь везде передается string. В принципе можно передать любые типы данных, а потом, имплементировав IFieldMergingCallback, обработать и отформатировать данные.
В этом пошаговом руководстве показано, как создать настройку на уровне документа, использующую элементы управления содержимым, для создания структурированного и повторно используемого содержимого в шаблоне Microsoft Office Word.
Применимость. Информация в этой статье относится к проектам уровня документа для Word.- Дополнительные сведения см. в разделе доступность функций по типам приложений Office и проектов.
Word позволяет создать коллекцию многократно используемых частей документа, именуемых стандартными блоками. В этом пошаговом руководстве демонстрируется создание двух таблиц в качестве стандартных блоков. Каждая из них содержит несколько элементов управления, которые могут включать разные типы содержимого, например обычный текст или даты. Одна из таблиц содержит информацию о сотруднике, а другая таблица содержит отзывы.
После создания документа на основе шаблона можно добавить любую из таблиц в документ, используя несколько объектов BuildingBlockGalleryContentControl, отображающих доступные стандартные блоки в шаблоне.
В этом пошаговом руководстве описаны следующие задачи:
создание таблиц с элементами управления содержимым в шаблоне Word во время разработки;
заполнение элемента управления содержимым «Поле со списком» и элемента управления содержимым «Раскрывающийся список»;
запрет редактирования указанной таблицы пользователями;
добавление таблиц в коллекцию стандартных блоков шаблона;
создание элемента управления содержимым, отображающего доступные стандартные блоки в шаблоне.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Предварительные требования
Для выполнения этого пошагового руководства требуются следующие компоненты:
Выпуск Visual Studio, включающий инструменты разработчика Microsoft Office. Дополнительные сведения см. в статье Настройка компьютера для разработки решений Office.
Создание нового проекта шаблона Word
Создайте шаблон Word, чтобы пользователи могли легко создавать собственные копии.
Создание проекта шаблона Word
Создайте проект шаблона Word с именем мибуилдингблокктемплате. В мастере создайте документ в решении. дополнительные сведения см. в разделе инструкции. создание проектов Office в Visual Studio.
Visual Studio открывает новый шаблон Word в конструкторе и добавляет проект мибуилдингблокктемплате в Обозреватель решений.
Создание таблицы Employee
Создайте таблицу, содержащую четыре различных типа элементов управления содержимым, в которой пользователь может ввести сведения о сотруднике.
Создание таблицы сотрудников
В шаблоне Word, размещенном в Visual Studio конструкторе, на ленте щелкните вкладку Вставка .
В группе таблицы щелкните Таблица и вставьте таблицу с двумя столбцами и четырьмя строками.
Введите текст в первый столбец, как показано в следующем столбце:
Щелкните первую ячейку во втором столбце (рядом с именем сотрудника).
На ленте перейдите на вкладку Разработчик .
Если вкладка Разработчик не отображается, сделайте ее видимой. Дополнительные сведения см. в разделе инструкции. Отображение вкладки разработчика на ленте.
В группе элементы управления нажмите кнопку Text ( текст ), чтобы добавить в PlainTextContentControl первую ячейку.
Щелкните вторую ячейку во втором столбце (рядом с полем Дата найма).
В группе элементы управления нажмите кнопку выбора даты , чтобы добавить DatePickerContentControl к второй ячейке.
Щелкните третью ячейку во втором столбце (рядом с заголовком).
В группе элементы управления нажмите кнопку с полем со списком , чтобы добавить в ComboBoxContentControl третью ячейку.
Щелкните последнюю ячейку во втором столбце (рядом с изображением).
В группе элементы управления нажмите кнопку с изображением элемента управления содержимым , чтобы добавить PictureContentControl к последней ячейке.
Создание таблицы отзывов клиентов
Создайте таблицу, содержащую три различных типа элементов управления содержимым, в которой пользователь может ввести отзывы клиентов.
Создание таблицы отзывов клиентов
В шаблоне Word щелкните строку после добавленной ранее таблицы Employee и нажмите клавишу Ввод , чтобы добавить новый абзац.
На ленте щелкните вкладку Вставка .
В группе таблицы щелкните Таблица и вставьте таблицу с двумя столбцами и тремя строками.
Введите текст в первый столбец, как показано в следующем столбце:
Щелкните первую ячейку второго столбца (рядом с полем имя клиента).
На ленте перейдите на вкладку Разработчик .
В группе элементы управления нажмите кнопку Text ( текст ), чтобы добавить в PlainTextContentControl первую ячейку.
Щелкните во второй ячейке второго столбца (рядом с рейтингом удовлетворенности).
В группе элементы управления нажмите кнопку раскрывающегося списка , чтобы добавить DropDownListContentControl к второй ячейке.
Щелкните последнюю ячейку второго столбца (рядом с комментариями).
В группе элементы управления нажмите кнопку форматированный текст , чтобы добавить RichTextContentControl к последней ячейке.
Заполнение поля со списком и раскрывающегося списка программным способом
Элементы управления содержимым можно инициализировать во время разработки с помощью окна Свойства в среде Visual Studio . Также их можно инициализировать во время выполнения, что позволяет динамически задавать их начальное состояние. В этом пошаговом руководстве используется код для заполнения записей в ComboBoxContentControl и DropDownListContentControl во время выполнения, чтобы можно было увидеть, как работают эти объекты.
Изменение пользовательского интерфейса элементов управления содержимым программным способом
В Обозреватель решений щелкните правой кнопкой мыши ThisDocument. CS или ThisDocument. vb и выберите пункт Просмотреть код.
Добавьте в класс ThisDocument приведенный далее код. В этом коде объявляются несколько объектов, которые вы будете использовать позже в этом пошаговом руководстве.
Добавьте в метод ThisDocument_Startup класса ThisDocument следующий код. Этот код добавляет записи в таблицы ComboBoxContentControl и DropDownListContentControl и задает замещающий текст, отображаемый в каждом из этих элементов управления, прежде чем пользователь изменяет их.
Запретить пользователям изменять таблицу сотрудников
Используйте объект GroupContentControl, объявленный ранее, для защиты таблицы сотрудников. После применения защиты пользователи по-прежнему смогут редактировать элементы управления содержимым в таблице. Однако они не смогут изменять текст в первом столбце или изменять таблицу иным способом, например добавляя или удаляя строки и столбцы. Дополнительные сведения об использовании GroupContentControl для защиты части документа см. в разделе элементы управления содержимым.
Запрет редактирования указанной таблицы пользователями
Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument после кода, добавленного на предыдущем шаге. Этот код предотвращает изменение таблицы сотрудников, помещая таблицу внутри объекта GroupContentControl, объявленного ранее.
Добавление таблиц в коллекцию стандартных блоков
Добавьте таблицы в коллекцию стандартных блоков документа в шаблоне, чтобы пользователи могли вставлять таблицы, созданные вами в документе. Дополнительные сведения о стандартных блоках документов см. в разделе элементы управления содержимым.
Добавление таблиц в стандартные блоки в шаблоне
Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument после кода, добавленного на предыдущем шаге. Этот код добавляет новые стандартные блоки, содержащие таблицы, в корпорацию Майкрософт. Office. Коллекция Interop. Word. Буилдингблоккентриес, которая содержит все многократно используемые стандартные блоки в шаблоне. Новые стандартные блоки определяются в новой категории с именем Employee и Customer , и им назначается тип стандартного блока Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1 .
Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument после кода, добавленного на предыдущем шаге. Этот код удаляет таблицы из шаблона. Таблицы более не нужны, поскольку вы добавили их в коллекцию повторно используемых стандартных блоков в шаблоне. Код сначала переводит документ в режим конструктора, чтобы можно было удалить защищенную таблицу сотрудников.
Создание элемента управления содержимым, отображающего стандартные блоки
Создайте элемент управления содержимым, предоставляющий доступ к стандартным блокам (таблицам), созданным ранее. Пользователи могут щелкнуть этот элемент управления, чтобы добавить таблицы в документ.
Создание элемента управления содержимым, отображающего доступные стандартные блоки
Добавьте следующий код в метод ThisDocument_Startup класса ThisDocument после кода, добавленного на предыдущем шаге. Этот код инициализирует объект BuildingBlockGalleryContentControl, объявленный ранее. Компонент BuildingBlockGalleryContentControl отображает все стандартные блоки, определенные в категории Employee и Customer , с типом стандартного блока Microsoft.Office.Interop.Word.WdBuildingBlockTypes.wdTypeCustom1 .
Тестирование проекта
Пользователи могут щелкнуть элементы управления коллекции стандартных блоков в документе, чтобы вставить таблицу сотрудников или отзывов. Пользователи могут ввести или выбрать ответы в элементах управления содержимым в обеих таблицах. Пользователи могут изменять другие части таблицы отзывов, но они не смогут менять другие части таблицы сотрудников.
Проверка таблицы сотрудников
Нажмите клавишу F5 , чтобы запустить проект.
Щелкните выбрать первый стандартный блок , чтобы отобразить первый элемент управления содержимым коллекции стандартных блоков.
Щелкните стрелку раскрывающегося списка рядом с заголовком настраиваемой коллекции 1 в элементе управления и выберите таблица сотрудников.
Щелкните ячейку справа от ячейки имя сотрудника и введите имя.
Убедитесь, что в эту ячейку можно добавить только текст. PlainTextContentControl позволяет пользователям добавлять только текст, но не другие типы содержимого, такие как изображения или таблицы.
Щелкните ячейку справа от ячейки Дата найма и выберите дату в элементе выбора даты.
Щелкните ячейку справа от ячейки Title (заголовок ) и выберите один из названий заданий в поле со списком.
При необходимости введите имя должности, которого нет в списке. Это возможно, поскольку ComboBoxContentControl позволяет пользователям выбрать из списка записей или ввести собственную запись.
Щелкните значок в ячейке справа от ячейки изображения и перейдите к изображению, чтобы отобразить его.
Попробуйте добавить строки или столбцы в таблицу и попытайтесь удалить строки и столбцы из нее. Убедитесь, что изменить таблицу нельзя. GroupContentControl не позволяет вносить какие-либо изменения.
Проверка таблицы отзывов клиентов
Щелкните выбрать второй Стандартный блок , чтобы отобразить второй элемент управления содержимым коллекции стандартных блоков.
Щелкните стрелку раскрывающегося списка рядом с заголовком настраиваемой коллекции 1 в элементе управления и выберите таблица Customer.
Щелкните ячейку справа от ячейки имя клиента и введите имя.
Щелкните ячейку справа от ячейки рейтинг удовлетворенности и выберите один из доступных вариантов.
Убедитесь, что нельзя вводить записи. DropDownListContentControl позволяет пользователям только выбирать варианты из списка элементов.
Щелкните ячейку справа от ячейки Примечания и введите несколько комментариев.
При необходимости добавьте содержимое, отличное от текста, например изображение или вложенную таблицу. Это возможно, поскольку RichTextContentControl позволяет пользователям добавлять содержимое, отличное от текста.
Убедитесь, что вы можете добавить строки или столбцы в таблицу и удалить строки и столбцы из нее. Это возможно, поскольку вы не защитили таблицу, поместив ее в GroupContentControl.
Дальнейшие действия
Дополнительные сведения об использовании элементов управления содержимым см. в следующем разделе:
Версия данной статьи для Microsoft Visual Basic 6.0: 313193.
Аннотация
В этой статье подробно рассматривается создание документов Word с помощью возможностей автоматизации Visual Basic.
Пример кода
Следующий пример кода показывает, как это сделать:
Вставка абзацев с определенными параметрами форматирования.
Модификация диапазонов в рамках документа.
Вставка, форматирование и заполнение таблиц.
Для создания документа Word с помощью Visual Basic необходимо выполнить следующие действия.
Добавьте ссылку на объектную библиотеку Microsoft Word Object Library. Для этого выполните следующие действия:
В меню Проект выберите команду Добавить ссылку.
На вкладке COM выделите библиотеку Microsoft Word Object Library и нажмите кнопку Выбрать.
Примечание. В состав Microsoft Office 2003 и более поздних версий набора Office входят основные сборки взаимодействия (PIA). Набор Microsoft Office XP не включает эти сборки, но их можно загрузить.
Чтобы узнать больше об основных сборках взаимодействия PIA для Office XP, щелкните номер следующей статьи базы знаний Майкрософт:
328912 Загрузка основных сборок взаимодействия (PIA) для набора Microsoft Office XP
Для подтверждения сделанного выбора нажмите кнопку OK в диалоговом окне Add References. Если появится запрос на создание оберток для выбранных библиотек, нажмите кнопку Yes.
Для отображения панели элементов выберите в меню View элемент Toolbox и добавьте кнопку в форму Form1.
Дважды щелкните кнопку Button1. Появится окно программного кода формы.
В окне кода замените следующий код:
Добавьте следующий код в верхнюю часть файла Form1.vb:
Чтобы построить и запустить программу, нажмите клавишу F5.
После завершения кода проверьте созданный документ. Документ содержит две страницы форматированных абзацев, таблицы и диаграмму.
Использование шаблона
Если вы используете автоматизацию для построения документов в одинаковом формате, вы можете запустить процесс с новым документом на основе предварительно отформатированного шаблона. Использование шаблона имеет два существенных преимущества по сравнению с созданием документа с нуля.
Разработчик более полно контролирует формат и расположение объектов в документах.
Уменьшается размер программного кода, который нужен для создания документа.
Вы можете точно указать место расположения и формат объектов (например таблиц и абзацев) в рамках документа, а также включить форматирование этих объектов. Ниже приведен пример программного кода для автоматизации создания документа на основе шаблона.
Следующий программный код позволяет определить в шаблоне метки, по которым клиент автоматизации вставит произвольный текст в документ.
Еще одно преимущество использования шаблонов состоит в том, что вы можете создавать и сохранять стили форматирования, которые используются на этапе выполнения программы.
Ссылки
Дополнительные сведения см. на следующих веб-сайтах Microsoft Developer Network (MSDN):
В разработке корпоративных приложений очень часто приходится решать задачу выгрузки данных в документы — от небольших справок до больших отчетов.
Хочу поделиться нашим opensource-решением для генерации docx документов, которое позволяет заполнять документы по шаблону, оформление которого можно менять в Word без переписывания кода.
Для начала — немного вводных.
Что нам было нужно от шаблонизатора
- Шаблон создается в Word и сразу видно, на что будет похож результирующий документ, шаблон без лишнего мусора.
- Результирующий документ после скачивания содержит все необходимые данные, не подтягивая их с внешних источников.
- Возможность заполнять списки, таблицы, и иногда еще и таблицы с вложенными в них списками.
- Шаблон можно доверить секретарю клиента, чтобы он мог сменить логотип, реквизиты компании, или как-либо еще подкорректировать оформление. И все это уже после сдачи проекта, не модифицируя наш код.
Поиски шаблонизатора
Что получилось у нас
Со стороны кода мы работаем с привычными сущностями, такими как «Таблица», «Список», «Строка», «Ячейка».
Со стороны шаблона используется документ с расставленными по нему Content Controls, которые связаны с данными через свойство tag. Content Controls добавляются достаточно легко, при этом их достаточно сложно испортить при дальнейшей эксплуатации в отличие от текстовых вставок типа , а при отключенном режиме конструктора спец-обозначений контролов и вовсе не видно.
Например, необходимо заполнить таблицу, указать дату её заполнения и количество записей.
Создадим шаблон этой таблицы в Word-документе:
- Переходим на вкладку «Разработчик» (если она отсутствует, включается через Файл → Параметры → Настроить ленту → Ставим галочку возле «Разработчик») и включаем режим конструктора.
- Выделяем текст, который будет заполняемым полем.
- Нажимаем «Вставить элемент управления содержимым «Форматированный текст».
- Нажимаем «Свойства» и заполняем поля «Название» и «Тег».
Если требуется заполнить таблицу или список, их также нужно поместить в отдельный контент-контрол.
Так выглядит шаблон с добавленными элементами управления содержимым:
Теперь заполним шаблон данными:
нам нужно добавить одно поле и одну таблицу с двумя строчками, и в футере таблицы указать количество записей.
Если всё получилось, на выходе следующий документ:
С помощью метода SetRemoveContentControls(bool value) можно удалить элементы управления содержимым, если они уже не нужны в результирующем документе.
TemplateEngine.Docx позволяет заполнять простые поля, таблицы, списки, вложенные списки, таблицы со списками, списки с таблицами и даже списки с таблицами, в которых есть списки… Структура класса Content позволяет создавать шаблоны с неограниченной вложенностью элементов.
Еще больше примеров!
Заполнение простых полей
Заполнение вложенных списков
Таблица внутри списка
Список внутри таблицы
Таблица, состоящая из нескольких блоков, которые заполняются независимо
Таблица с объединенными вертикально ячейками
Таблица с объединенными горизонтально ячейками
Где скачать
Всем спасибо за внимание, надеемся, что данный инструмент поможет вам в ваших проектах.
Читайте также: