Живеем в свят, в който PHP разработчиците трябва да си взаимодействат операционна система Windows. WMI (Интерфейс за управление на Windows) Windows контроли) - един такъв пример е взаимодействието с Microsoft Office.

В тази статия ще разгледаме проста интеграция между Word и PHP: генериране на документ на Microsoft Word въз основа на полета за въвеждане в HTML формуляр с помощта на PHP (и неговото разширение Interop).

Подготвителни стъпки

Първо, нека се уверим, че имаме настроена основна WAMP среда. Тъй като Interop присъства само в Windows, имаме нужда от нашия Apache сървъри инсталацията на PHP бяха внедрени в Windows машина. Като такъв използвам EasyPHP 14.1, който е изключително лесен за инсталиране и настройка.

Следващата стъпка е да инсталирате Microsoft Office. Версията не е много важна. Използвам Microsoft Office 2013 Pro, но всяка версия на Office, по-стара от 2007 г., трябва да работи.

Също така трябва да се уверим, че сме инсталирали библиотеки за разработване на приложението за взаимодействие (PIA, първични сглобки за взаимодействие, първични сглобки за взаимодействие). Можете да разберете това, като отворите Windows Explorer и отидете в директорията \assembly и там трябва да видим набор от инсталирани сглобки:

Тук можете да видите елемента Microsoft.Office.Interop.Word (подчертан на екранната снимка). Това ще бъде компилацията, която ще използваме в нашата демонстрация. Моля, обърнете специално внимание на полетата „Име на сборка“, „Версия“ и „Жетон за публичен ключ“. Скоро ще ги използваме в нашия PHP скрипт.

Тази директория също така съдържа други модули (включително цялото семейство на Office), достъпни за използване в техните програми (не само за PHP, но и за VB.net, C# и т.н.).

Ако списъкът за сглобяване не включва целия пакет Microsoft.Office.Interop, тогава трябва или да преинсталираме Office, като добавим PIA, или ръчно да изтеглим пакета от сайта на Microsoft и да го инсталираме. Вижте тази страница на MSDN за по-подробни инструкции.

КоментирайтеЗабележка: За изтегляне и инсталиране е достъпна само дистрибуцията на PIA на Microsoft Office 2010. Версията на модулите в този пакет е 14.0.0, а версия 15 идва само с Office 2013.

И накрая, трябва да активирате разширението php_com_dotnet.dll в php.ini и да рестартирате сървъра.

Сега можем да преминем към програмирането.

HTML форма

Тъй като основната част от този пример пада от страната на сървъра, ще създадем проста страница с формуляр, който ще изглежда така:

Имаме текстово поле за името, група радио бутони за пола, плъзгач за възрастта и поле за въвеждане на текст за въвеждане на съобщение, както и прословутия бутон „Изпращане“.

Запазете този файл като "index.html" в директорията на виртуалния хост, така че да може да бъде достъпен на URL като http://test/test/interop.

Сървърна част

Файлът на манипулатора от страна на сървъра е основната цел на нашия разговор. Първо ще дам пълния код за този файл и след това ще го обясня стъпка по стъпка.

видим = вярно; $fn = __DIR__. "\\template.docx"; $d = $w->Документи->Отвори($fn); echo "Документът е отворен.


"; $flds = $d->Полета; $count = $flds->Count; echo "Документът има $count полета.
"; ехо "
    "; $mapping = setupfields(); foreach ($flds as $index => $f) ( $f->Select(); $key = $mapping[$index]; $value = $inputs[$key]; if ($key == "пол") ( if ($value == "(!LANG:m") $value = "Г-н."; else $value = "Госпожица."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Присвояване на $index: $key на $value
  • "; ) ехо "
"; echo "Обработката завършена!

"; echo "Отпечатване, моля изчакайте...
"; $d->PrintOut(); sleep(3); echo "Готово!"; $w->Quit(false); $w=null; функция setupfields() ( $mapping = array(); $mapping = "gender"; $mapping = "name"; $mapping = "age"; $mapping = "msg"; $mapping = "printdate"; return $mapping; )

След като записахме стойностите, получени от формуляра, в променливата $inputs и създадохме празен елемент с ключа printdate (защо направихме това - ще обсъдим по-късно), преминаваме към четири много важни реда:

$assembly = "Microsoft.Office.Interop.Word, Версия=15.0.0.0, Култура=неутрална, PublicKeyToken=71e9bce111e9429c"; $class = "Microsoft.Office.Interop.Word.ApplicationClass"; $w = нов DOTNET($assembly, $class); $w->visible = true;

COM манипулаторът на PHP изисква класът да бъде създаден в рамките на "сглобката". В нашия случай работим с Word. Ако погледнете първата екранна снимка, можете да запишете пълния подпис на сглобката за Word:

  • „Име“, „Версия“, „Токен за публичен ключ“ са взети от информация, която може да се види в „c:\Windows\assembly“ .
  • „Културата“ винаги е неутрална

Класът, към който искаме да се позоваваме, винаги се нарича „име на сборка“ + „.ApplicationClass“.

Като зададем тези два параметъра, можем да получим обект, който да работи с Word.

Този обект може да остане на заден план или можем да го поставим в производство, като зададем атрибута visible на true.

Следващата стъпка е да отворите документа, който ще се обработва, и да запишете екземпляр на „документа“ в променливата $d.

Има няколко начина за създаване на базирано на формуляр съдържание в документ.

Най-лошото нещо, което можете да направите, е да кодирате твърдо съдържанието на документа в PHP и след това да го изведете в документ на Word. Горещо препоръчвам да не правите това поради следните причини:

  1. Губите гъвкавост. Всички промени в изходния файл ще изискват промени в PHP кода.
  2. Това нарушава разделянето на контрол и изглед
  3. Прилагането на стилове към съдържанието на документа (подравняване, шрифтове, стилове и т.н.) в скрипт ще увеличи значително броя на редовете код. Програмната промяна на стилове е твърде тромава.

Друг вариант би бил да използвате намиране и замяна. PHP има добри вградени инструменти за това. Можем да създадем Word документ, в който поставяме етикети със специални разделители, които по-късно ще бъдат заменени. Например, можем да създадем документ, който ще съдържа следния фрагмент:

и с помощта на PHP лесно можем да го заменим със съдържанието на полето „Име“, получено от формата.

Това е просто и ни спасява от всички неприятни последствия, с които се сблъскваме при първия метод. Просто трябва да вземем решение за правилния разделител, в който случай в крайна сметка ще използваме шаблон.

Препоръчвам третия метод и той се основава на по-задълбочено познаване на Word. Ще използваме полета като контейнери и с помощта на PHP код директно ще актуализираме стойностите в полетата със съответните стойности.

Този подход е гъвкав, бърз и в съответствие с най-добрите практики на Word. С него можете да избегнете и пълнотекстово търсене в документа, което се отразява добре на производителността. Имайте предвид, че това решение има и недостатъци.

Word не поддържа наименувани индекси за полета от самото начало. Дори и да сме посочили имена за създадените полета, пак трябва да използваме цифровите идентификатори на тези полета. Това също обяснява защо трябва да използваме отделна функция (setupfields), за да съпоставим индекса на полето и името на полето от формуляра.

В тази демонстрация ще използваме документ с 5 полета MERGEFIELD. Ще поставим шаблонния документ на същото място като нашия манипулатор на скриптове.

Моля, обърнете внимание, че полето за дата на печат няма съответстващо поле във формуляра. Ето защо добавихме празен елемент printdate към масива $inputs. Без това скриптът пак ще работи и ще работи, но PHP ще издаде предупреждение, че индексът на printdate липсва в масива $inputs.

След като заменим полетата с нови стойности, отпечатваме документа с

$d->Разпечатване();

Методът PrintOut приема няколко незадължителни параметъра и ние използваме най-простата му форма. Това ще отпечата едно копие на документа на принтера по подразбиране, свързан към машината с Windows.

Можете също да извикате PrintPreview, за да видите резултата, преди да го отпечатате. В напълно автоматична среда, разбира се, ще използваме метода PrintOut.

Трябва да изчакате известно време, преди да излезете от приложението Word, тъй като отнема време, докато задачата за печат бъде поставена на опашка. Без забавяне(3), методът $w->Quit се изпълнява незабавно и заданието не се поставя на опашка.

Накрая извикваме $w->Quit(false) , което затваря приложението Word, извикано от нашия скрипт. Единственият параметър, предаван на метода, е да запази файла преди излизане. Направихме редакции на документа, но не искаме да ги запазваме, защото се нуждаем от чист шаблон за по-късна работа.

След като приключим с кода, можем да заредим нашата страница с формуляр, да попълним някои стойности и да го изпратим. Изображенията по-долу показват резултата от скрипта, както и актуализирания документ на Word:

Подобрена скорост на обработка и малко повече за PIA

PHP е свободно въведен език. COM обект от тип Object. Докато пишем скрипта, нямаме начин да получим описанието на обекта, било то Word приложение, документ или поле. Не знаем какви свойства има този обект или какви методи поддържа.

Това значително ще забави скоростта на развитие. За да ускорите разработката, бих препоръчал първо да напишете функции на C# и след това да преведете кода на PHP. Мога да препоръчам безплатна IDE за разработка на C#, наречена „#develop“. Можете да я намерите. Предпочитам го пред Visual Studio, защото #develop е по-малък, по-лесен и по-бърз.

Мигрирането на C# код към PHP не е толкова страшно, колкото изглежда. Нека ви покажа няколко реда в C#:

Word.Application w=ново Word.Application(); w.Visible=вярно; String path=Application.StartupPath+"\\template.docx"; Word.Document d=w.Documents.Open(path) като Word.Document; Word.Fields flds=d.Fields; intlen=flds.Count; foreach (Word.Field f in flds) ( f.Select(); int i=f.Index; w.Selection.TypeText("..."); )

Можете да видите, че C# кодът е много подобен на PHP кода, който показах по-рано. C# е строго типизиран език, така че в този пример можете да видите няколко оператора за преобразуване и също така трябва да посочите тип за променливи.

Като посочите типа на променливата, можете да се насладите на по-ясен код и автоматично довършване, а скоростта на разработка се увеличава значително.

Друг начин за ускоряване на разработката на PHP е да извикате макрос в Word. Извършваме същата последователност от действия и след това го запазваме като макрос. Макросът е написан на Visual Basic, който също е лесен за превод на PHP.

И най-важното, документацията на Office PIA на Microsoft, особено документацията за пространството от имена на всяко приложение на Office, е най-подробната справка. Най-използваните три приложения са:

  • Excel 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel(v=office.15).aspx
  • Word 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word(v=office.15).aspx
  • PowerPoint 2013: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.powerpoint(v=office.15).aspx

Заключение

В тази статия ви показахме как да попълните документ на Word с данни, като използвате PHP COM библиотеките и оперативната съвместимост на Microsoft Office.

Windows и Office са широко използвани в ежедневието. Познаването на силата на Office/Window и PHP ще бъде полезно за всеки разработчик на PHP и Windows.

PHP COM разширението ви отваря вратата да използвате тази комбинация.

Продължаваме темата за работа с формуляри в Word, която започнахме по-рано. В предишни статии разглеждахме формулярите само от гледна точка на „мощен потребител“, т.е. създадохме документи, удобни за ръчно попълване. Днес искам да предложа разширяване на тази задача и опит за използване на механизма за контрол на съдържанието за генериране на документи.

Преди да се захванем с непосредствената ни задача, искам да кажа няколко думи за това как данните за контролите на съдържанието се съхраняват в документите на Word (засега умишлено ще пропусна как са обвързани със съдържанието на документа, но се надявам да се върна към това някъде в следващите статии).

Легитимният въпрос е какво е itemProps1.xmlи подобни компоненти? Тези компоненти съхраняват описания на източници на данни. Най-вероятно, както е замислено от разработчиците, в допълнение към xml файловете, вградени в документа, е трябвало да се използват и други, но досега е приложен само този метод.

Какво ни е полезно itemPropsX.xml? Фактът, че те изброяват xml схеми (техните targetNamespace), които се използват в родителския itemX.xml. Това означава, че ако сме включили повече от един персонализиран xml в документа, тогава, за да намерим правилния, трябва да преминем през itemPropsX.xmlкомпоненти и намерете желаната верига и следователно желаната itemX.xml.

Сега още един момент. Няма да анализираме ръчно връзките между компонентите и ще търсим правилните, като използваме само основния API за пакетиране! Вместо това ще използваме Open XML SDK (компилациите му са достъпни чрез NuGet). Разбира се, не казахме нито дума за този API по-рано, но за нашата задача той изисква минимум и целият код ще бъде доста прозрачен.

Е, основното въведение е готово, можете да продължите към примера.

Според установената традиция ще вземем същия „Доклад от срещата“, който нарисувахме в статията. Нека ви напомня, че ето как изглеждаше шаблонът на документа:

И така, XML, към който бяха обвързани полетата на документа

< meetingNotes xmlns ="urn:MeetingNotes" subject ="" date ="" secretary ="" > < participants > < participant name ="" /> < decisions > < decision problem ="" solution ="" responsible ="" controlDate ="" />

Стъпка 1. Създайте модел на данни

Всъщност нашата задача не е просто да генерираме документ, а да създадем (поне в чернова версия) удобен инструмент за използване както от разработчика, така и от потребителя.

Затова ще декларираме модела като структура от C# класове:

Публичен клас MeetingNotes ( public MeetingNotes() ( Участници = нов списък (); Решения = нов списък (); ) публичен низ Тема ( get; set; ) public DateTime Дата ( get; set; ) public string Secretary ( get; set; ) public List Участници ( get; set; ) публичен списък Решения ( get; set; ) ) публичен клас Решение ( public string Problem ( get; set; ) public string Solution ( get; set; ) public string Responsible ( get; set; ) public DateTime ControlDate ( get; set; ) ) public клас Участник ( публичен низ име ( get; set; ) )

Като цяло, нищо особено, освен че са добавени атрибути за контрол на XML сериализацията (защото имената в модела и необходимия XML са малко по-различни).

Стъпка 2: Сериализирайте горния модел в XML

Задачата по принцип е тривиална. Това, което се нарича „вземете нашия любим XmlSerializer и отидете“, ако не беше един но

За съжаление, в сегашна версия Office, очевидно, има грешка, която е както следва: ако в потребителски xml предидеклариране на основното пространство от имена (това, от което Word трябва да вземе елементи за показване), декларирайте още, след което повтарящите се контроли на съдържанието започват да се показват неправилно (показват се само толкова елементи, колкото са били в самия шаблон - т.е. повтарящият се раздел не работа).

Тези. Ето xml, който работи:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

и този също:

< test xmlns ="urn:Test" attr1 ="1" attr2 ="2" xmlns:t ="urn:TTT" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

и този го няма:

< test xmlns:t ="urn:TTT" xmlns ="urn:Test" attr1 ="1" attr2 ="2" > < repeatedTag attr ="1" /> < repeatedTag attr ="2" /> < repeatedTag attr ="3" />

Опитах се да изпратя грешка до поддръжката на Microsoft на Connect, но по някаква причина ми беше отказан достъп за изпращане на грешки чрез Office. Дискусията във форума на MSDN също не помогна.

Като цяло, необходимата маневра за обход. Ако формирахме XML на ръка, нямаше да има проблеми - щяхме да направим всичко сами. В този случай обаче наистина искам да използвам стандартния XmlSerializer, който по подразбиране добавя няколко от своите пространства от имена към изходния XML, дори ако тези пространства от имена не се използват.

Ние ще направим пълно потискане на изхода на нашите собствени пространства от имена в XmlSerializer. Вярно е, че този подход ще работи само ако той наистина няма нужда от тях (в противен случай те пак ще бъдат добавени и точно ПРЕДИ нашите).

Всъщност, целият код (при условие, че променливата среща Бележкисъдържа предварително попълнен обект от тип MeetingNotes):

var serializer = new XmlSerializer(typeof (MeetingNotes));
var serializedDataStream = нов MemoryStream();

var namespaces = new XmlSerializerNamespaces();
namespaces.Add(“” , “” );

serializer.Serialize(serializedDataStream, meetingNotes, namespaces);
serializedDataStream.Seek(0, SeekOrigin.Begin);

Стъпка 3. Въвеждаме получения XML в Word документ.

Тук правим следното:

  • копирайте шаблона и отворете копието
  • намерете желания персонализиран xml в него (търсете по пространство от имена „urn:Бележки за срещи“)
  • заместваме съдържанието на компонента с нашия XML

File.Copy(templateName, resultDocumentName, true); използвайки (var document = WordprocessingDocument.Open(resultDocumentName, true )) ( var xmlpart = document.MainDocumentPart.CustomXmlParts .Single(xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaReferences.OfType () .Any(sr => sr.Uri.Value == "(!LANG:urn:MeetingNotes"!}

Всички се занимаваме с текстове, по един или друг начин. Понякога има нужда да генерирате голямо или не много голямо количество текст за някаква задача, например да си играете с форматирането, но няма текст под ръка, твърде мързеливо е да го напишете сами. Какво да правя? Отговорът е прост: използвайте вградения генератор на случаен текст в Word!

В редактора на Microsoft Word можете бързо и лесно да генерирате текст с помощта на специални команди. Като опитно зайче ще използвам Word 2007. Тези команди трябва да работят във всички версии на Word. Ще ви разкажа за три метода за генериране на текст.

Метод 1: Използване на rand()

Функцията rand() вмъква локализиран текстов пример, 3 абзаца от 3 изречения. Отворете вашия Word, поставете курсора си там, където скоро ще се появи текстът, и въведете командата:

и натиснете Enter. Самата функция rand ще изчезне и вместо нея ще се появят 3 параграфа от текст:

Но това не е всичко. Ако имате нужда от много текст, тогава можете да използвате функцията rand с допълнителни аргументи, като това:

=rand(x,y)

където " х„означава броя на параграфите и“ г» е броят на изреченията във всеки параграф. Например, =rand(20,5)ще вмъкне 20 абзаца с по пет фрази всеки. НО =ранд(7)ще вмъкне 7 абзаца по 3 изречения всеки.

Метод 2: Използване на lorem()

За да вмъкнете добрия стар Lorem Ipsum като проба - използвайте функцията lorem (). Въведете следната команда и натиснете Enter:

И получаваме този изцяло латински текст

Функцията lorem() също лесно приема допълнителни аргументи, като rand(), под формата на няколко параграфа и изречения. Без аргументи функцията вмъква по подразбиране 3 абзаца с по 3 изречения всеки.

Метод 3. Функцията rand.old().

Използването е подобно на предишните команди:

=rand.old()

и натиснете Enter.

Функцията rand.old() е оставена за съвместимост със стария офис до 2003 г. включително. Методът на приложение е същият като предишните два, само текстът ще се състои от същите фрази „Яжте повече от тези меки френски рулца и пийте чай“. Тази фраза е известна на всички, които понякога трябваше да работят с шрифтове.

Можете да предавате аргументи, както в първите два метода.

Това е всичко, текстовете са генерирани, сега можете да хапнете още от тези меки френски рулца и да пиете чай :)

Успяхте ли да вмъкнете текст с горните функции?

Веднъж, след като обобщих резултатите от олимпиадата, когато участниците трябваше да изпратят писма с резултатите от издържаните (или неиздържаните) предмети, забелязах, че момичето седи и използва ръцете си, за да въведе резултатите от изпита, име на ученика и друга информация в шаблона на писмото. Пред нея лежаха няколко листа, разпечатани от Excel с имена и оценки. Копиране-поставяне, Ctrl + C - Ctrl + V, прехвърляне на пълното име от именителен в родителен падеж и така вече е свършена работа с половината от първия от трите листа с данни. Колко дълго мислите, че може да седи неподвижно, копирайки данните и след това да проверява резултата? Мисля дълго време и ще има доста грешки. Но тогава тя все още трябваше да подписва пощенски пликове ... Съжалявах за времето й и след няколко минути показах как този процес може да бъде автоматизиран с прости средства. След кратка екскурзия работата й беше завършена за 20 минути.

В този урок ще ви покажа как бързо да създавате документи (писма, покани) с минимално време. AT различни версииезици, този описан процес се нарича по различен начин. Така че на руски е "Сливане", а на английски - "Сливане".

Надявам се, че "писма на щастие" от пенсионен фонд, данъчните известия се създават по същия начин :)

Инструменти

За да създаваме документи, се нуждаем от OpenOffice Writer. В него ще създадем шаблон за писмо. Ще ви е необходим и OpenOffice Calc. В него ще създадем база данни с имената и адресите на онези лица, които например искаме да поканим на парти. Вместо програми от пакета OpenOffice лесно могат да се използват MS Word и Excel. Базата данни може лесно да лежи в MS Access. И така, да започваме.

Създаване на база данни

Базата данни не е нищо повече от таблица в MS Excel или OpenOffice Calc, където данните са подредени в колони и първият ред се използва за именуване на колоните. Да започнем, например, колоните "име", "град", "пощенски код", "адрес". Въведете данните и запазете файла на диск.



Други източници също могат да се използват като бази данни, като например адресна книга на Outlook или база данни на MS Access.

Създайте шаблон за писмо

Със създаването на шаблон за писмо ситуацията е малко по-сложна. Тъй като данните от таблицата (нашата база данни) ще бъдат заменени в шаблона така, както са, тогава буквата трябва да бъде написана по съответния начин. Ако пълното ви име е в именителен падеж във вашата база данни, тогава е малко вероятно да можете да използвате това поле в призива „Уважаеми,<ФИО>!" и за плика в реда „До:<ФИО>". В последния случай пълното име ще изглежда малко тромаво.

Когато съставяте шаблон за писмо, препоръчвам да започнете с писане на писмо до някои истински човек. Можете на себе си. След това маркирайте в него данните, които ще вземете от базата данни и ги заменете със съответните полета. Преди да замените избрания текст с поле, препоръчвам ви да обърнете внимание с каква буква трябва да започва полето в базата данни (малка или главна). Разбира се, можете да създадете шаблон веднага с полетата, но тогава може да не забележите някои гафове, като несъответствия в случаите.



Още в горния шаблон е ясно, че се нуждаем от пълно име в родителен падеж и поле, съдържащо само собствено и бащино име. С първото поле можем да заменим „До“ с „Получател“ и тогава пълното име в именителен падеж ще ни подхожда идеално. С второто поле всичко е малко по-сложно и ще трябва да създадем друга колона в базата данни и да я попълним с подходящите данни. В някой от следващите уроци ще ви кажа как да направите това автоматично, но засега ще приемем, че вече имаме такова поле.

За да вмъкнете поле и да свържете шаблона към базата данни, трябва да изпълните следната последователност от действия. Изберете база данни в OpenOffice Writer



и щракнете върху „Дефиниране“.



След това вмъкнете полето от свързаната база данни на правилното място. За да направите това, натиснете Ctrl + F2 или изберете "Полета" и "Други" от менюто "Вмъкване". В прозореца, който се отваря, изберете раздела „Бази данни“, изберете „Полета за циркулярни документи“ в типа поле, изберете съответното поле от базата данни и щракнете върху „Вмъкване“. Самата база данни също може да бъде избрана в този прозорец.



След вмъкване на едно поле, без да затваряте текущия прозорец, изберете текста, който да бъде заменен от следващото поле, изберете полето и щракнете отново върху „Вмъкване“. И така за всяко от полетата.

За MS Word ситуацията е донякъде подобна и може би по-удобна. След като създадете таблица в MS Excel, стартирайте MS Word и отидете в раздела "Изпращания". В този раздел можете да видите трите необходими стъпки: „Стартиране на сливането“, „Съставяне на документа и вмъкване на полета“ и „Завършване“. Има и междинна стъпка "Преглед на резултата", но тя не е задължителна.

И така работата започва с избора на документ. Това могат да бъдат писма, стикери, обикновен документ на Word. Можете също така да стартирате съветника за сливане точно тук, който ще ви води през всички стъпки в процеса. Следващата стъпка е да изберете получателя, тоест базата данни. Тук можете да изберете готова база данни (например таблицата на MS Excel, създадена на предишния етап) или да създадете нов списък. След избиране на списъка стават активни бутоните „Вмъкване на поле за обединяване“, „Редактиране на списък с получатели“ и пр. Чрез диалоговия прозорец „Редактиране на списък с получатели“, който се отваря със съответния бутон, можете да изберете от целия списък само записи, необходими за сливане.







Когато вмъквам полета, намирам за удобно да маркирам всички полета в сиво, като щракна върху бутона „Избор на обединени полета“. В противен случай, ако има много такива полета, те могат да бъдат загубени в текста.

И така, шаблонът е готов.

Генериране на букви

Последният етап е генерирането на букви. В OpenOffice за това в менюто „Инструменти“ изберете „Съветник за обединяване на имейли ...“ и преминете през всички предложени стъпки, за да комбинирате нашия шаблон с базата данни.





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

Първо избираме да създаваме писма въз основа на текущия документ и натискаме „Напред“ в долната част на прозореца. Вторият момент е дали ще имаме това хартиено писмо или имейл. За да бъде запазено писмото във файл, изберете първото. Кликнете върху "Напред". В третия параграф ни се предлага да създадем адресен блок, но тъй като го създадохме на ръка, премахваме отметките от всички квадратчета и преминаваме към следващата стъпка. Тук ни се предлага да вмъкнем обжалване, но вече го имаме, така че щракнете върху „Напред“. В шестия параграф можете да редактирате документа, да разгледате документа с вмъкнати полета от базата данни и, ако е необходимо, да изключите някои полета.



На стъпка 7 се предлага да редактирате всеки от файловете, създадени в резултат на свързването на шаблона към базата данни. И накрая, на последната, стъпка 8, можете да изберете какво да правите с получените документи. Можете да запазите, отпечатате или изпратите по имейл. В този случай можете да запазите всички документи в един файл или всеки документ поотделно.

В MS Word процесът на сливане завършва с щракване върху бутона „Намиране и обединяване“.



От падащото меню е очевидно, че всички писма могат да бъдат отпечатани и изпратени по имейл, но не е очевидно, че всички те могат да бъдат записани във файл. За да запазите, изберете първия елемент - "Промяна на отделни документи". Това ще отвори нов документ, в който всяка нова буква ще бъде разположена на нова страница и тук този файл вече може да бъде запазен.

Заключение

И така, в този урок научихте как да използвате инструмента за сливане, за да създавате документи въз основа на шаблон. Нека накратко запишем последователността от действия:

  1. Необходимо е да се създаде база данни в табличния процесор, от която да се вземат данни за попълване на полетата.
  2. Трябва да създадете шаблон за писмо.
  3. Извършете сливането и запазете резултата.

А, фамилии в колона би професии в графата ° С.

2. Създайте документ на Word (.doc или .docx)


(А), (Б)и (° С).

(А), (Б)и (° С) (А)- име, (Б)- фамилия, (° С)- професия.

Настройкипрограми.

3. Изберете пътища за файлове и папки


Изберете

4. Задайте листовете и редовете на желаните данни


Таблици с данни на Excel файл

Редове с данни на Excel файл Таблици с данни на Excel файл

1 .

Ако искате всички листове и/или редове от вашия excel файл с данни да участват във формирането на документа, щракнете върху съответния бутон вдясно с надпис числа(надписът му ще се промени на всичко).

5. Задайте шаблон за име за нови word файлове


Задайте шаблон за име за нови файлове с думи:

Нов шаблон за имена на word файловее шаблон за имена на нови документи (word-файлове), генерирани от програмата. Тук шаблонът за име съдържа имената на колоните на excel файла, оградени с фигурни скоби: (А)и (Б). При генериране на нов документ, програмата ще замени всички (А)и (Б)съответните стойности на клетката от excel файла - това ще бъде името на новия документ (word файл).

Можете да зададете свои собствени гранични знаци в раздела Настройкипрограми.

6. Щракнете върху „Генериране“


Щракнете върху бутона Генерирайи напредъкът ще се покаже на екрана. Документи (word-файлове) ще бъдат създадени точно толкова редове от excel-файла, които участват във формирането.

7. Всичко


Всички документи (word-файлове) са създадени и се намират в папката, посочена в Папка за запазване на новите word файлове. Всичко :)

Exwog- шаблонен генератор на отчети от excel към word

Безплатен генератор на Word файлове по шаблон (Word файл), базиран на данни от Excel файл

Работи на Mac OS, Windows и Linux

Позволява ви да задавате имената на новосъздадените файлове с думи

Позволява ви да задавате листове и редове с необходимите данни

Позволява ви да зададете гранични знаци за имена на колони в Excel

Лесен за използване

Съхранявайте данните си във формат на Excel (.xls и .xlsx) и генерирайте Word файлове (.doc и .docx) с няколко кликвания :)


Как работи?

Погледнете вашия excel файл


В този пример excel файлът съдържа информация за клиенти. Всеки ред отговаря на конкретен клиент. Имената са в колона А, фамилии в колона би професии в графата ° С.

Кликнете, за да видите

Създаване на Word документ (.doc или .docx)


Кликнете, за да видите

Създайте "шаблон" (word-файл) за генериране на нови документи (word-файлове). Тук текстът на "шаблона" съдържа имената на колоните на excel файла, рамкирани с фигурни скоби: (А), (Б)и (° С).

Програмата ще генерира нови документи според "шаблона", замествайки всички (А), (Б)и (° С)съответните стойности на клетките от файла на Excel: (А)- име, (Б)- фамилия, (° С)- професия.

Можете също да зададете свои собствени гранични знаци в раздела Настройкипрограми.

Изберете пътища за файлове и папки


Изберете пътища за файлове и папки (бутони с етикет Изберете). В програмата посочвате следните пътища:

Excel файл с данни (*.xls, *.xlsx)- това е пътят до вашия excel файл с данни (информация за клиента);

Шаблонен файл на Word (*.doc, *.docx)е пътят до вашия "шаблон" (файлът с думи, създаден в предишната стъпка);

Папка за запазване на новите word файлове- това е пътят до папката, в която програмата ще записва новосъздадените документи.

Кликнете, за да видите

Задайте листовете и редовете на желаните данни


Кликнете, за да видите

Задайте броя на листовете и редовете на вашия excel файл с данни (информация за клиенти), на който искате да генерирате документи:

Таблици с данни на Excel файл- номера на листове от вашия excel-файл, които ще участват във формирането на нови документи;

Редове с данни на Excel файл- номера на редове на листове (листове, посочени в Таблици с данни на Excel файл) на вашия excel файл, който ще участва във формирането на нови документи. Въз основа на данните от всеки указан ред ще бъде създаден отделен документ (word-файл).

Номерирането на листове и редове в програмата започва с 1 .