Създавайте документи на Word програмно

Използване на скриптове VBScript

Създаването на текстови файлове с помощта на скриптове е доста лесно, тъй като Windows средата като цяло и Windows Script Host (WSH) в частност предоставят специални инструменти за работа с текстови файлове. Въпреки това, докато текстовите файлове са идеални за съхраняване на проста, неструктурирана информация, те не са достатъчни за по-сложни изисквания. Ако трябва да представите йерархична информация, можете да използвате XML инструменти, за да създадете маркиран текст с (или не) препратка към схемата. Често обаче е необходимо да се създават документи, които представят информация, използвайки сложна маркировка. HTML файловете са алтернатива на свързването на данни и сложното маркиране на страници. HTML документите обаче са обикновен текст и по принцип са лесна плячка за нападателите. В допълнение, HTML документите рядко са самостоятелни и често съдържат връзки към външни ресурси като изображения, ActiveX контроли и аплети.

За разлика от разгледаните по-горе решения, Microsoft Word всъщност е стандартът в работния процес на реалния свят. Лесно е да създавате такива документи онлайн, но можете ли да автоматизирате този процес, като създавате програмно и използвате документи, базирани на шаблони? Да, и сега ще обясня защо. Няма да навлизам в подробности от страната на процеса, която се отнася до работата в пакета Word. Вместо това ще се съсредоточа върху създаването и управлението на програмни документи, ако приемем, че читателите са запознати с основите на работа с шаблони и маркери на Word.

Използване на Word шаблони

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

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

В Word можете да създавате формуляри за стандартни документи като фактури, като персонализирате шаблонния файл с разширение .dot. Когато искате да подготвите нов документ въз основа на шаблона, щракнете върху менюто Файл, Нов. След като изберете шаблона, който искате в новия прозорец и щракнете върху OK, Word създава и показва нов формуляр въз основа на този шаблон. В съответните полета на празен формуляр се въвежда различна информация.

Когато използва Word онлайн, потребителят може да види къде да въведе информация. Но как да принудите да се въвежда различна информация в задължителните полета на WSH скрипта? Преди да отговоря на този въпрос, нека разгледаме обектния модел на Word, базирана на COM инфраструктура, която помага програмно да контролира поведението на пакет от Word.

Word обектен модел

Обектният модел на Word съдържа богата и сложна йерархия от обекти. Този обектен модел програмно излага интерактивната функционалност на Word на COM-ориентирани клиенти (т.е. WSH и Visual Basic (VB) скриптове). Основният елемент на обектния модел на Word е обектът Word.Application. За да създадете екземпляр на този обект, трябва да използвате следния код:

Обектният модел на Word работи с изпълнимия файл на Word (winword.exe), а не с отделна DLL. По този начин всеки екземпляр на обекта Word.Application е еквивалентен на стартиране и изпълнение на екземпляр на приложението Word. Тези случаи обаче са невидими. И тъй като не можем да ги видим, съществува риск много случаи да съществуват безцелно, губейки системни ресурси. За да избегнете разпространението на безполезни екземпляри на Word, трябва да се уверите, че скриптовете винаги освобождават обекта, след като приключат с метода Quit:

Въпреки че новосъздадените екземпляри на Word са невидими по подразбиране, можете да ги направите видими, като зададете свойството Visible на True:

Когато екземплярът е видим, можете ръчно да затворите приложението. Задаването на свойството Visible на True може да бъде много полезно при отстраняване на грешки в скриптираните приложения на Word.

Работата с елементи на обектния модел на Word е напълно същата като работата с приложение в интерактивен режим. След инициализиране на приложението, ние създаваме нов документ или отваряме съществуващ. За да създадете нов празен документ, базиран на конкретен шаблон, извикайте метода Add от колекцията Documents и посочете .dot файла, където се съхранява желания от вас шаблон. Кодът по-долу създава документ, който съдържа възможности, вградени в шаблон с име Фактура:

За да отворите съществуващ документ, използвайте колекцията Documents, която съдържа обекти на Document. Кодът, даден в Листинг 1, отваря документи фактура.doc и разходи.doc. Този кодов фрагмент първо отваря файла invoice.doc, след това файла costs.doc. Тук състоянието на програмно създадения документ точно съответства на състоянието на документа на шаблона, който сте отворили интерактивно с помощта на елемента Отваряне в менюто Файл, докато работите в Word. Ако сте направили екземпляра видим, на екрана ще се покажат прозорците на документите от файловете invoice.doc и costs.doc.

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

Този кодов фрагмент е еквивалентен на задаване на doc1 на резултата от извикването на метода Documents.Add, както е показано във втория ред на листинг 1.

API на обекта Document съдържа всички функции, налични в менютата File и Edit в Word. За да отпечатате документ, използвайте метода PrintOut на обекта Document; за да напишете документа на друго място - методът SaveAs. Когато Word се използва интерактивно, и двата метода представят диалогов прозорец, който ви позволява да изберете принтер и път. Когато използвате метода PrintOut или SaveAs, можете да посочите път на принтер или файл като аргумент, както е показано по-долу:

Когато пътят е посочен като аргумент, не се показва диалогов прозорец.

Методът SaveAs също ви позволява да въведете допълнителен аргумент, за да посочите изходния формат (например документ на Word, Rich Text Format (RTF) - Word 6.0, неформатиран текст). По-долу кодов фрагмент показва как да запазите документ във формат RTF:

За повече информация относно константите, обозначаващи различни файлови формати, вижте документацията на Word.

За да затворите документа, трябва да използвате метода Close:

Когато затворите документ, всички документи, отворени след него, автоматично се преместват с една позиция нагоре. Така че, ако използвате кода:

и след това затворете връзката към променливата doc1, Документи (0) ще се появят на позицията на променливата doc2 в масива.

Използване на отметки в Word

Показалецът се отнася до връзката между име и конкретно местоположение в документ на Word. Отметките са функция на Word, която може да се използва за маркиране на избран текст, графики, таблици или всеки друг елемент в документ. Word съхранява отметки в документ. За да добавите отметка в интерактивен режим, изберете текста или елемента, който искате да маркирате, след което изберете елемента Bookmark от менюто Insert. В прозореца Bookmark въведете името на маркера, който ще бъде създаден.

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

Създай профил

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

IN Листинг 2 показва скрипта CreateInvoice.vbs, който събира определена информация и съставя фактура. Кодът отваря шаблона TestInvoice.dot, намиращ се в същата папка като скрипта, когато създава нов документ въз основа на него (можете да изтеглите файла TestInvoice.dot от нашия уебсайт в раздела за изтегляне). На фиг. 1 показва шаблона TestInvoice.dot.

създавайте

Изпращане на документ по имейл

Обектният модел на Word съдържа метод на обекта Document, който ви позволява да изпратите документ по имейл:

Както можете да видите, методът SendMail няма аргументи. Той извиква регистриран клиент на API за съобщения (MAPI), обикновено Microsoft Outlook или Outlook Express. Появява се прозорец за имейл с приложен документ на Word. Потребителят просто попълва полето До и щраква върху бутона Изпрати. Папката Изпратени елементи на пощенския клиент се регистрира автоматично, когато съобщението е изпратено. Ако потребителят няма постоянна връзка, пощенският клиент поставя съобщението в папката Изходящи, за да бъде изпратено при следващата връзка.

Когато използвате метода SendMail, трябва да се уверите, че скриптът не затваря Word преди да се появи прозорецът за електронна поща. Методът SendMail работи асинхронно по отношение на основния скрипт, така че скриптът няма начин да провери дали методът е завършил изпращането на съобщението. Ако скриптът се опита да затвори Word, преди методът SendMail да завърши, системата показва съобщение, че не може да затвори Word, докато командата не завърши. Ако се появи прозорец с такова съобщение, потребителят трябва да го затвори ръчно. За да избегнете тази ситуация, можете да добавите повикване към процедурата за заспиване, както направих във фрагмент B от Листинг 2, за временно спиране на изпълнението на скрипта и даване на време на SendMail за завършване. Освен това можете да добавите свой собствен прозорец за потвърждение към вашия скрипт, след което потребителят може да потвърди изпращането на писмото. Кодът по-долу показва прозорец за потвърждение "Готово" точно преди скриптът да затвори Word:

Повечето формуляри днес са прости документи на Word. След като създадете шаблон интерактивно в Word, можете лесно да напишете скрипт като този в тази статия, за да попълните формуляр с персонализирана информация и след това да оставите WSH средата и обектния модел на Word да завършат започнатото.

След като оценят това просто и ефективно решение, мнозина ще искат да го използват за други често срещани форми, като отчети за разходите и заявки за абонамент. Той също така може да подобри функционалността на скриптове. Например можете да комбинирате автоматично създаване на фактура с достъп до база данни, така че скриптът автоматично да връща следващия консолидиран номер на фактура. Или можете да накарате скрипта да добави запис към базата данни, за да проследява фактурата. За да направите това, можете да разширите скрипта CreateInvoice.vbs с ADO-базиран код, който отправя запитване към базата данни за последния номер на акаунт и изпълнява INSERT заявка, за да добави нов запис.

Листинг 1. Код за отваряне на съществуващ документ

Споделете материала с колеги и приятели