Генератор документов по шаблону word

Время на прочтение
7 мин

Количество просмотров 43K

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

Хочу поделиться нашим opensource-решением для генерации docx документов, которое позволяет заполнять документы по шаблону, оформление которого можно менять в Word без переписывания кода.

Для начала — немного вводных.

Что нам было нужно от шаблонизатора

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

Поиски шаблонизатора

Наши поиски подходящего «шаблонизатора» не увенчались успехом: одни предлагают создавать документ с оформлением на сервере, вторые позволяют заменять только статический текст (например, https://github.com/swxben/docx-template-engine), третьи не поддерживают вложенность элементов (http://livedocx.com/), четвертые добавляют в шаблон разные программерские обозначения, чего мы хотели бы избежать, оставив шаблон максимально чистым (https://github.com/tssoft/TsSoft.Docx.TemplateEngine).

Что получилось у нас

Со стороны кода мы работаем с привычными сущностями, такими как «Таблица», «Список», «Строка», «Ячейка».

Со стороны шаблона используется документ с расставленными по нему Content Controls, которые связаны с данными через свойство tag. Content Controls добавляются достаточно легко, при этом их достаточно сложно испортить при дальнейшей эксплуатации в отличие от текстовых вставок типа {FIO}, а при отключенном режиме конструктора спец-обозначений контролов и вовсе не видно.

Например, необходимо заполнить таблицу, указать дату её заполнения и количество записей.
Создадим шаблон этой таблицы в Word-документе:

Каждое поле, которое мы будем заполнять, необходимо поместить в контрол, связать его с данными в коде. Для этого:

  1. Переходим на вкладку «Разработчик» (если она отсутствует, включается через Файл → Параметры → Настроить ленту → Ставим галочку возле «Разработчик») и включаем режим конструктора.
  2. Выделяем текст, который будет заполняемым полем.
  3. Нажимаем «Вставить элемент управления содержимым «Форматированный текст».
  4. Нажимаем «Свойства» и заполняем поля «Название» и «Тег».

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

Так выглядит шаблон с добавленными элементами управления содержимым:

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

var valuesToFill = new Content(
	new FieldContent("Report date", DateTime.Now.Date.ToString()),
	new TableContent("Team members")
		.AddRow(
			new FieldContent("Full name", "Семёнов Илья Васильевич"),
			new FieldContent("Role", "Разработчик"))
		.AddRow(
			new FieldContent("Full name", "Петров Фёдор Анатольевич"),
			new FieldContent("Role", "Разработчик"))
		.AddRow(
			new FieldContent("Full name", "Артемьев Вячеслав Геннадьевич"),
			new FieldContent("Role", "Ведущий разработчик")),
	new FieldContent("Count", "3")
);

Запускаем TemplateProcessor…

using(var outputDocument = new TemplateProcessor("OutputDocument.docx")
				.SetRemoveContentControls(true))
	{
		outputDocument.FillContent(valuesToFill);
		outputDocument.SaveChanges();
	}

Если всё получилось, на выходе следующий документ:

С помощью метода SetRemoveContentControls(bool value) можно удалить элементы управления содержимым, если они уже не нужны в результирующем документе.

TemplateEngine.Docx позволяет заполнять простые поля, таблицы, списки, вложенные списки, таблицы со списками, списки с таблицами и даже списки с таблицами, в которых есть списки… Структура класса Content позволяет создавать шаблоны с неограниченной вложенностью элементов.

Еще больше примеров!

Заполнение простых полей

var valuesToFill = new Content(new FieldContent("Report date", DateTime.Now.ToString()));

Заполнение таблиц

var valuesToFill = new Content(
	new TableContent("Team Members Table")
		.AddRow(
			new FieldContent("Name", "Eric"),
			new FieldContent("Role", "Program Manager"))
		.AddRow(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer")),
		new FieldContent("Count", "2"));

Заполнение списков

var valuesToFill = new Content(
	new ListContent("Team Members List")
		.AddItem(
			new FieldContent("Name", "Eric"), 
			new FieldContent("Role", "Program Manager"))
		.AddItem(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer")));

Заполнение вложенных списков

var valuesToFill = new Content(
	new ListContent("Team Members Nested List")
		.AddItem(new ListItemContent("Role", "Program Manager")
			.AddNestedItem(new FieldContent("Name", "Eric"))
			.AddNestedItem(new FieldContent("Name", "Ann")))
		.AddItem(new ListItemContent("Role", "Developer")
			.AddNestedItem(new FieldContent("Name", "Bob"))
			.AddNestedItem(new FieldContent("Name", "Richard"))));

Таблица внутри списка

var valuesToFill = new Content(
	new ListContent("Projects List")
		.AddItem(new ListItemContent("Project", "Project one")
			.AddTable(TableContent.Create("Team members")
				.AddRow(
					new FieldContent("Name", "Eric"), 
					new FieldContent("Role", "Program Manager"))
				.AddRow(
					new FieldContent("Name", "Bob"), 
					new FieldContent("Role", "Developer"))))
		.AddItem(new ListItemContent("Project", "Project two")
			.AddTable(TableContent.Create("Team members")
				.AddRow(
					new FieldContent("Name", "Eric"),
					new FieldContent("Role", "Program Manager"))))
		.AddItem(new ListItemContent("Project", "Project three")
			.AddTable(TableContent.Create("Team members")
				.AddRow(
					new FieldContent("Name", "Bob"),
					new FieldContent("Role", "Developer")))));

Список внутри таблицы

var valuesToFill = new Content(
	new TableContent("Projects Table")
		.AddRow(
			new FieldContent("Name", "Eric"), 
			new FieldContent("Role", "Program Manager"), 
			new ListContent("Projects")
				.AddItem(new FieldContent("Project", "Project one"))
				.AddItem(new FieldContent("Project", "Project two")))
		.AddRow(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer"),
			new ListContent("Projects")
				.AddItem(new FieldContent("Project", "Project one"))
				.AddItem(new FieldContent("Project", "Project three"))));

Таблица, состоящая из нескольких блоков, которые заполняются независимо

var valuesToFill = new Content(
	new TableContent("Team Members Statistics")
		.AddRow(
			new FieldContent("Name", "Eric"),
			new FieldContent("Role", "Program Manager"))
		.AddRow(
			new FieldContent("Name", "Richard"),
			new FieldContent("Role", "Program Manager"))
		.AddRow(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer")),

	new TableContent("Team Members Statistics")
		.AddRow(
			new FieldContent("Statistics Role", "Program Manager"),
			new FieldContent("Statistics Role Count", "2"))                     
		.AddRow(
			new FieldContent("Statistics Role", "Developer"),
			new FieldContent("Statistics Role Count", "1")));

Таблица с объединенными вертикально ячейками

var valuesToFill = new Content(
	new TableContent("Team members info")
		.AddRow(
			new FieldContent("Name", "Eric"),
			new FieldContent("Role", "Program Manager"),
			new FieldContent("Age", "37"),
			new FieldContent("Gender", "Male"))
		.AddRow(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer"),
			new FieldContent("Age", "33"),
			new FieldContent("Gender", "Male"))
		.AddRow(
			new FieldContent("Name", "Ann"),
			new FieldContent("Role", "Developer"),
			new FieldContent("Age", "34"),
			new FieldContent("Gender", "Female")));

Таблица с объединенными горизонтально ячейками

var valuesToFill = new Content(
	new TableContent("Team members projects")
		.AddRow(
			new FieldContent("Name", "Eric"),
			new FieldContent("Role", "Program Manager"),
			new FieldContent("Age", "37"),
			new FieldContent("Projects", "Project one, Project two"))
		.AddRow(
			new FieldContent("Name", "Bob"),
			new FieldContent("Role", "Developer"),
			new FieldContent("Age", "33"),
			new FieldContent("Projects", "Project one"))
		.AddRow(
			new FieldContent("Name", "Ann"),
			new FieldContent("Role", "Developer"),
			new FieldContent("Age", "34"),
			new FieldContent("Projects", "Project two")));

Где скачать

Проект доступен в NuGet (http://www.nuget.org/packages/TemplateEngine.Docx/), и открыт для пулл-реквестов на GitHub (https://github.com/UNIT6-open/TemplateEngine.Docx).

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

Авторы: Алексей Волков, Руслана Котова

Convert documents and images to a wide variety of file formats: Word, PDF, JPG, HTML, etc

Powered by
aspose.com
and
aspose.cloud

Choose files
or drop files

Use password

This password will be applied to all documents

Convert a Document Online

Aspose Online Converter provides fast and precise conversion of documents in various file formats: Word, PDF, Excel, HTML, Markdown, PowerPoint, JPG, PNG and many other.

Converting file formats is a universal task. Any application supports a limited set of file formats, even if we speak about such powerful office suits as Microsoft Word, OpenOffice or Adobe Acrobat.

Especially for this purpose, Aspose have developed an online converter of file formats, with the main focus on Word document formats. It is fast, easy to use and free.

Free Document Converter online

To convert a file from one file format to another, just drag and drop the input file into the data upload area, specify the target format and click the «Convert» button. The result will be generated on Aspose servers in seconds.

Free Document Converter is based on Aspose software products, which are widely used around the world for programmatic processing of file formats with high speed and professional quality of the result.

FAQ

What file formats does your converter support?


We support a variety of file formats, including DOCX, ODT, PDF, DOC, HTML, Markdown, JPG, PNG, WPS, TXT and many more.

How many files can I convert at a time?


You can convert up to 10 files at a time.

What is the maximum allowed file size?


Each file size should not exceed 10 MB.

What are the ways to get my conversion results?


At the end of the conversion process, you will get a download link. You can download the results immediately or send the link to your email.

How long will my files be stored on your servers?


Your files are stored on Aspose servers for 24 hours. After this time, they are automatically deleted.

Can you guarantee the safety of my files? Is everything secure?


Aspose places the utmost importance on security and the protection of user data. Be assured that your files are stored on secure servers and protected from any unauthorized access.

Why does the conversion take a little longer than I expected?


Converting big files from one format to another can take some time, as the conversion process usually requires re-encoding and re-compressing the data.

How to open a PDF in Word? How do I make a PDF editable?


Simply convert your PDF to Word format using our online converter. After you finish editing the document, you can save it back as a PDF.


Краткое описание

Макрос на основе шаблонов в формате Word и по заданному списку значений в Excel формирует необходимое количество вордовских документов. Количество формируемых файлов неограниченно и зависит только от числа указанных вами параметров в Excel.

Подробное описание

Если по роду деятельности часто приходится формировать какие-либо документы в Word по шаблону (приказы, распоряжения, договора, соглашения, счета и др), то вам может пригодится макрос для автоматизации создания вордовских документов на основе исходных данных в файле Excel.

Макрос удобно и быстро создает необходимые документы, исходя из указанных шаблонов и настроенных параметров.

       — Шаблоны задаются в формате Word. Количество одновременно используемых шаблонов неограниченно.
       — Настройки (параметры) для подстановки в шаблоны хранятся в файле эксель. Может быть задано неограниченное количество параметров.

Из дополнительных возможностей макроса:

       — В настройках листа с данными достаточно указать название шаблона и именно данный шаблон будет применен для формирования документов. Если шаблонов указано несколько, то формирование документов будет происходить по нескольким (указанным) шаблонам.
       — В настройках макроса можно указать, по каким строкам формировать документы, а по каким пропускать.
       — Для каждого формируемого документа можно указать необходимое имя (название).
       — Для более удобной вставки наименований шаблонов в ячейку достаточно два раза кликнуть на соответствующей ячейке в столбце «C» и в открывшейся форме выбрать нужные шаблоны.

В целом, ничего сложного в работе с макросом и шаблонами нет.
Перед запуском макроса обязательно ознакомьтесь с примечаниями в пункте «Важно» на листе «const».

Скачать макрос эксель для создания документов и примеры шаблонов можно по ссылке выше.

Обновление макроса от 09.07.2020


В программу добавлена возможность замены значений в колонтитулах. Колонтитулы учитываются как верхние, так и нижние. При необходимости можете ознакомиться с примерами заполнения шаблонов, которые также присутствуют в архиве.
Ссылка на загрузку архива с программой обновлена. Актуальная версия программы: «CreateWord, v.2.xlsb».

Предназначение программы: заполнение множества документов данными из Excel нажатием одной кнопки.

Для работы программы требуется таблица Excel с данными для подстановки, и папка с шаблоном (шаблонами) документов.
В качестве шаблонов можно использовать файлы Word и Excel.

На выходе получаются заполненные файлы исходного формата, или формата PDF.
Возможно формирование писем по шаблону, с последующей рассылкой через Outlook или TheBAT.

  • Количество шаблонов не ограничено. Вы легко можете сами настраивать любые шаблоны.
    В качестве шаблонов могут выступать файлы Excel (XLS, XLSX и др.), документы Word (DOC, DOCX и др.), а также текстовые документы (расширения TXT, DAT, XML и т.д.).
  • Гибкая настройка имён создаваемых файлов. Можно раскладывать файлы по подпапкам.
  • Подстановка таблиц и картинок (фото, печатей, подписей и т.п.) в заполняемые документы.
  • Склонение фамилий, дата и сумма прописью, — дополнительные функции обработки данных.
  • Рассылка почты (писем с вложениями) через TheBAT! или Outlook. Можно формировать красивые HTML-письма
  • Есть возможность формировать один документ по нескольким строкам исходной таблицы.
    (вывести список сотрудников в приказ, список товаров в накладную, и т.д.).
  • Можно выбирать шаблоны для заполнения в диалоговом окне
    (или даже программа будет сама брать нужные шаблоны для разных строк)
  • Подстановка данных в надписи и колонтитулы шаблонов Word.

С момента выхода программы в 2012 году, её функционал постоянно развивался (вышли десятки обновлений), поэтому сейчас в FillDocuments есть всё, что только может вам понадобиться для задачи создания документов по шаблонам.

Более подробно всё это описано в разделе Справка по программе

Первое с чего нужно начать, это создать .docx документ на своем ПК, например template.docx

Для примера я взял куски из договора на создание сайта

Подготавливаем шаблон word документа

Открываем word файл и начинаем его шаблонизировать путем замены текста на переменные синтаксиса типа ${data}

У нас будут следующие переменные, которые мы будем подставлять в документ:

${num_dogovor} — номер догвоора
${city} — город
${date} — текущая дата
${name} — ФИО
${company} — Название Организации ООО
${summa} — Сумма
${summa_str} — Сумма, прописью
${summa_nalog} — Налог, 6% от суммы 
${summa_nalog_str} — Налог, 6% от суммы (прописью)
${ur_address} — Юр. адрес
${post_address} — Почтовый адрес
${company_ogrn} — ОГРН
${company_okpo​​​​​​​} — ОКПО
${company_kpp​​​​​​​} — КПП
${company_inn​​​​​​​} — ИНН организации
${company_bank​​​​​​​} — Название банка
${company_ks​​​​​​​} — кор. счет
${company_rs​​​​​​​} — р. счет
${direktor​​​​​​​} — ФИО директора

Далее скачиваем библиотеку PhpWord

//Подключаем библиотеку
require $_SERVER["DOCUMENT_ROOT"].'/lib/phpword/autoload.php';

//создаем класс
$phpWord = new  PhpOfficePhpWordPhpWord(); 
$_doc = new PhpOfficePhpWordTemplateProcessor('template.docx');

Синтаксис для замены переменных

$_doc->setValue('num_dogovor', $number_document); 

Подготовим пару переменных

//запихиваем сумму в переменную, что бы далее с ней поработать
$summa = 25550;

// делаем красивый формат
$summa_format = number_format($summa, 2, ',', ' ');

// вычислим налог от суммы (6%) и так же определим в отдельную переменную красивый формат суммы
$summa_nalog = $summa * 6 / 100; 
$summa_nalog_format = number_format($summa_nalog, 2, ',', ' ');

Подставляем, заменяем переменные в word документ

$_doc->setValue('num_dogovor', $number_document); 
$_doc->setValue('city', "г. Сочи"); 
$_doc->setValue('name', "Масков Илон Гениальнович"); 
$_doc->setValue('date', date("d.m.Y")); 
$_doc->setValue('company', "ООО НЕ ПРОХОДИТЕ МИМО"); 
$_doc->setValue('summa', $summa_format); 
$_doc->setValue('summa_str', num2str($summa));
$_doc->setValue('summa_nalog', $summa_nalog);
$_doc->setValue('summa_nalog_str', num2str($summa_nalog));
$_doc->setValue('company_ogrn', "ОГРН компании");
$_doc->setValue('company_inn', "ИНН компании");
$_doc->setValue('company_kpp', "КПП компании");
$_doc->setValue('company_bank', "Какое то название банка");
$_doc->setValue('company_bik', "бик банка");
$_doc->setValue('company_ks', "12342352456235");
$_doc->setValue('company_rs', "66666666666");
$_doc->setValue('ur_address', "Юридический адрес, какой-нибудь");
$_doc->setValue('post_address', "Фактический адрес");
$_doc->setValue('direktor', "Альберт Енштейн");
$_doc->setValue('company_okpo', "4444444");

Сохраняем сгенерированный word файл на сервер

$img_Dir_Str = "/files/";
$img_Dir = $_SERVER['DOCUMENT_ROOT']."/". $img_Dir_Str; 
@mkdir($img_Dir, 0777);
$file = str_replace("/","-", "Договор №".date("d-m-Y")).".docx";

$_doc->saveAs($img_Dir.$file);

Обратите внимание на строку: $_doc->setValue('summa_str', num2str($summa)); и   $_doc->setValue('summa_nalog_str', num2str($summa_nalog));

В ней мы используем функцию перевода числа в прописной вид

Функция перевода числа в прописной вид

function num2str($num) {
	$nul='ноль';
	$ten=array(
		array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),
		array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять'),
	);
	$a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
	$tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто');
	$hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот');
	$unit=array( // Units
		array('коп.' ,'коп.' ,'коп.',	 1),
		array('рубль'   ,'рубля'   ,'рублей'    ,0),
		array('тысяча'  ,'тысячи'  ,'тысяч'     ,1),
		array('миллион' ,'миллиона','миллионов' ,0),
		array('миллиард','милиарда','миллиардов',0),
	);
	//
	list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num)));
	$out = array();
	if (intval($rub)>0) {
		foreach(str_split($rub,3) as $uk=>$v) { // by 3 symbols
			if (!intval($v)) continue;
			$uk = sizeof($unit)-$uk-1; // unit key
			$gender = $unit[$uk][3];
			list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
			// mega-logic
			$out[] = $hundred[$i1]; # 1xx-9xx
			if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99
			else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
			// units without rub & kop
			if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]);
		} //foreach
	}
	else $out[] = $nul;
	$out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub
	$out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop
	return trim(preg_replace('/ {2,}/', ' ', join(' ',$out)));
}

/**
 * Склоняем словоформу
 * @ author runcore
 */
function morph($n, $f1, $f2, $f5) {
	$n = abs(intval($n)) % 100;
	if ($n>10 && $n<20) return $f5;
	$n = $n % 10;
	if ($n>1 && $n<5) return $f2;
	if ($n==1) return $f1;
	return $f5;
}

Статья подготовлена для Вас сайтом kisameev.ru

Перевел: Кисамеев Дмитрий

Урок создан: 3 октября 2021 г.

Статью просмотрели: 8616

Понравилось: 17

EasyDox.dll – это бесплатная .NET библиотека для генерации вордовских документов (docx) по шаблону. Использовать ее очень просто:

var fieldValues = new Dictionary <string, string> {
    {"№ договора", "123-456/АГ"},
    {"Сторона 1",  "ООО «Ромашка»"},
    {"Сторона 2",  "ЗАО «Тюльпан»"},
    {"Подписант 1", "Иванов И.П."},
    {"Должность 1", "генеральный директор"},
    {"Основание 1", "Устав"},
};

var engine = new Engine ();

engine.Merge ("c:\template.docx", fieldValues, "c:\output.docx");

Функция Merge читает указанный файл шаблона и подставляет в него значения полей, заданных параметром fieldValues, и затем сохраняет результат в «c:output.docx».
Например, шаблон:

ДОГОВОР № № договора

Сторона 1 и Сторона 2 заключили настоящий Договор о нижеследующем…

После подстановки значений полей превращается в:

ДОГОВОР № 123-456/АГ

ООО «Ромашка» и ЗАО «Тюльпан» заключили настоящий Договор о нижеследующем…

Кроме простых подстановок библиотека умеет выполнять различные преобразования, такие как склонение по падежам и запись денежных сумм прописью.
Например, чтобы просклонять ФИО подписанта в договоре, добавляем в скобках (родительный):

1.1   Организация 1 в лице Должность (родительный) Подписант (родительный),
действующего на основании Основание 1 (родительный)

После подстановок получаем связный текст:

1.1   ООО «Ромашка» в лице генерального директора Иванова И.П.,
действующего на основании Устава…

Список преобразований

Преобразование Что делает
(родительный) Ставит предшествующую позицию в родительный падеж.
(цифрами и прописью) Преобразует число в запись суммы в рублях цифрами и прописью.

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

Библиотека расширяема и позволяет добавлять собственные преобразования. Набор пользовательских преобразований (функций) передается в конструктор класса Engine.

Поля в колонтитулах (верхних и нижних) пока не обрабатываются.

Как создать шаблон docx

Шаблон – это обычный вордовский документ с расширением docx, в который в нужных местах вставлены поля.
Чтобы вставить поле, перейдите на вкладку Вставка (Insert), нажмите Экспресс-блоки (Quick Parts), затем Поле (Field).

Откроется окно. В нем выберите тип поля MergeField, введите название поля и если нужно, преобразование в скобках:

Нажмите OK для вставки поля.

Технические параметры библиотеки

Библиотека собрана под платформу AnyCPU (MSIL).
Не требует установки OpenXml SDK.
Все классы потокобезопасны.

Скачать

Начать работу с библиотекой проще всего с примера:

  • Исходный код примера на GitHub
    (скачать в виде ZIP-архива)

Этот пример подставляет в шаблон договора ФИО директора в родительном падеже.

Добавить библиотеку EasyDox.Morpher.dll в имеющийся проект очень просто при помощи менеджера пакетов Nuget:

  • Пакет Nuget EasyDox.Morpher

Пакет EasyDox.Morpher имеет зависимости от пакетов EasyDox и Morpher.API, поэтому при его установке в вашем распоряжении оказываются все нужные библиотеки.

Вам также могут быть интересны исходные коды библиотек:

  • EasyDox.dll
  • EasyDox.Morpher.dll
  • Morpher.API

Возможно, вы захотите что-то дополнить или исправить. Пулл-реквесты приветствуются.

Граф зависимостей

 

Для генерации документов по шаблону в Word и Excel (docx и xlsx), нужно установить модуль Документы из магазина приложений https://secure.wirecrm.com/marketplace, после установки у вас появится новый раздел Документы https://secure.wirecrm.com/documents. В этом разделе вы сможете загрузить файлы шаблонов со специальными метками. Поддерживаются документы в формате Word и Excel для загрузки.

Список меток можно посмотреть в меню Настройки — Метки.

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

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

При генерации файла по шаблону можно задать динамическое имя файла, для этого достаточно указать в названии шаблона метки, это удобно использовать для навигации по однотипным сгенерированным файлам, к примеру, для шаблона сделки можно задать название вида «Заказ ${deals.name} ${deals.account.name}». Данная метка выведет в название файла название сделки и организацию сделки.

Примеры шаблонов:

Word
Карточка организации (docx)

Карточка контакта (docx)

Карточка сделки (docx)

Карточка активности (docx)

Позиции наименований по сделке (docx)

Позиции наименований по тендеру (docx)

Excel
Позиции наименований по сделке (xlsx)

Я поражаюсь, что в 2020 году нет простого и бесплатного средства сделать генерацию документов. Решил сделать сам.

Так случилось, что я захотел помочь детсаду в их проблеме. Им часто требуется оформлять куча документов по сути говоря из шаблонов, они это всегда делали вручную и от руки заполняли кучу одних и тех же документов. А потом еще одну пачку документов давали родителям и каждый родитель тратил по часу для их заполнения по сути заполняя плейсхолдеры по 10 раз. На третий год у меня окончательно отсохла рука и я решил исправить ситуацию.

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

Я потратил на тулзу суммарно один рабочий день, при чем 5 из 8 часов я потратил на то, чтобы прочитать Excel и записать в Word файл, а сама тулза как вы сами понимаете без обвеса и IO библиотек состоит из 6 строчек кода =).

Я уверен, что один раз сгенерировав для всего сада документы это сэкономит около 100 часов жизни людей. Это точно окупится и я получу небольшой коллективный плюс в карму.

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

Ссылка на программу:

https://github.com/wartur/csvtodocx

Всем приятного использования!

PS:
Кстати, это опенсорс, поэтому можете брать и дорабатывать.

PS2:
И я на C# давно не писал и вообще десктопными приложениями не занимаюсь, так что признаю что это просто говнокод без инсталлятора и прочее, прочее =).

Цель процесса автоматического создания документов

Автоматическое создание документа — базовая единица оптимизации ресурсных затрат Вашей организации. Деятельность любой компании неразрывно связана с документооборотом, будь то управление персоналом — кадровая служба (заявления на отпуск, увольнение, больничный), бухгалтерия, либо же просто формирование определенного пакета документов по той или иной активности компании. Зачастую, сам процесс подготовки документов сводится к монотонным действиям по расстановке конкретных значений по заранее отведенным позициям в шаблоне. Слабыми сторонами данного подхода являются: низкая скорость подготовки документации и высокая степень возникновения ошибки ввиду человеческого фактора. При росте объема документации вероятность ошибки только возрастает, например, Вам нужно подготовить доп соглашения для всего штата сотрудников. Основные задачи программы автоматического создания документов Word на основе шаблонов — свести к минимуму вероятность возникновения ошибок ввода, значительно увеличить скорости самого процесса. Все действия сводятся к выбору записи или записей данных о сотруднике/клиенте/заказе/поставщике из исходной таблицы и указанию шаблона подготавливаемого документа.

Ссылки для скачивания:

— Скачать макрос автоматического создания документов Word по шаблону (архив 208КБ)

Автоматическое создание документа

Как начать работу с автоматическим формированием документов Word:

1. Разархивируйте скачанный архив с файлом с помощью программы 7zip или WinRar.

2. При появлении сообщения о доверенном источнике: закройте программу, кликните правой кнопкой мыши на файле — «Свойства», далее установите галочку напротив «Разблокировать».
сообщение безопасности платежного календаряразблокировать платежный календарь

3. Если в Вашем Excel запуск макросов по умолчанию отключен, в данном окне необходимо нажать «Включить содержимое».включить содержимое

4. Для полноценной работы с файлом необходимо нажать «Разрешить редактирование» при появлении данного сообщения.разрешить редактирование

Автоматическое создание документа — этап 1. Настройка программы

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

Таблица исходных данных состоит из строки меток (условных обозначений каждого столбца) — строка №3, заголовка с названиями столбцов — строка №4 и построчных записей — начиная с 5й строки. Количество колонок, их названия и условные обозначения можно свободно редактировать, соблюдая простые правила:

  • Если Вы добавляете новую колонку, у нее должно быть название и условное обозначение.
  • Для склонения ФИО сотрудника в Родительный или Дательный падежи используйте встроенные функции =RODP() и =DATP() соответственно.
  • Не допускайте наличия пустых колонок (без названий и обозначений) между колонками данных.
  • Не удаляйте колонку «ФИО сотрудника», т.к. она является ключевой для работы программы. Вы можете ее переименовать — заказчик, ответственный, клиент, менеджер и т.д. на свое усмотрение. Она используется в процессе сохранения итогового word документа, как часть имени, например: Иванов А.В. Заявление на отпуск, Петров В.К. Накладная на отгрузку.

Автоматическое создание документа по шаблону

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

Панель кнопочного управления автоматизированного создания документов состоит из следующих элементов интерфейса:

  • Добавить запись — вставляет новую строку в заранее выбранную вами ячейку. Также можно добавлять записи вручную с помощью стандартной вставки строки excel;
  • Добавить группу — вставляет новую серую строку группы в заранее выбранную вами ячейку;
  • Удалить элемент — удаляет любую выбранную строку таблицы данных;
  • Очистить таблицу — полностью стирает данные из таблицы. Можно использовать для очистки листа от тестовых данных;
  • Создать документ — выбор шаблона word для построения документа. Перед этим в таблицы должны быть выбраны записи данных, по которым необходимо произвести построение.

Перед запуском процедуры автоматизированного создания документов убедитесь, что указаны верные пути к word шаблонам и папке сохранения результатов построения!

Автоматическое создание документа — этап 2. Шаблоны Word

автоматизированный шаблон Word

Процесс подготовки word шаблонов для автоматического построения документов включает в себя рад несложных действий. Создайте общую папку для всех шаблонов, в ней создайте папки категорий, чтобы разделить шаблоны по областям применения (названия категорий укажите на свое усмотрение). В каждой подпапке определенной категории расположите непосредственно документы word с расставленными метками. Метки расположены в 3й строке таблицы над каждый ее столбцом. Поставьте метки в те места шаблона, в которые вы хотите прокачать данные из определенного столбца. Например, там где должно быть фио сотрудника укажите [fio].

Порядок действий запуска автоматического создания документов

Когда таблица данных заполнена, а метки в шаблонах расставлены по своим местам пора приступать к самой интересной части — автоматизированному формированию документов word.

В первую очередь, выделите строку или диапазон данных таблицы, по которым хотите сформировать документы:

Автоматическое создание документа Word

Шаг номер два — нажмите кнопку «Создать документ». Перед Вами появится диалоговое окно, в котором нужно выбрать подпапку — категорию документа и один, либо несколько шаблонов построения. Далее кликните по кнопке «Сформировать документы».

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

Мои поздравления! Документы успешно сформированы и лежат по указанному Вами пути для сохранения!

Заказать разработку программ или доработку любого проекта

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

Всегда рад ответить на Ваши вопросы, готов подготовить оптимальные решения обработки данных для Вашего бизнеса, автоматизировать рутинные процессы, связаться со мной можно через WatsApp 89507094770, сайт excellab.ru или написать на почту: goryaninov@bk.ru, профиль вк:

Ссылки для скачивания:

— Скачать макрос автоматического создания документов Word по шаблону (архив 208КБ)

Здесь можно ознакомиться с другими программами автоматизации, которые представлены на моем сайте:

— Дневной табель учета рабочего времени в excel
— Почасовой табель учета рабочего времени в excel
— Табель учета рабочего времени в днях по форме Т-13
— Табель расчет и планирование вахты
— Табель учета рабочего времени с учетом ночных смен
— Платежный календарь в excel

Понравилась статья? Поделить с друзьями:
  • Гдз учебник oxford word skills
  • Гдз по теме word
  • Гдз по программе excel
  • Гдз по информатике microsoft word
  • Гдз по информатике 9 класс excel