Ինչպես ստեղծել փաստաթղթեր word-ում: Exwog - հաշվետվությունների գեներատոր Excel-ից Word-ի ձևանմուշով

Մենք ապրում ենք մի աշխարհում, որտեղ PHP մշակողները ստիպված են ժամանակ առ ժամանակ փոխազդել Windows օպերացիոն համակարգի հետ: WMI-ն (Windows Management Interface) նման օրինակ է` համագործակցությունը Microsoft Office-ի հետ:

Այս հոդվածում մենք կանդրադառնանք Word-ի և PHP-ի միջև պարզ ինտեգրմանը. մուտքագրման դաշտերից HTML ձևով Microsoft Word փաստաթուղթ ստեղծելը, օգտագործելով PHP (և դրա Interop ընդլայնումը):

Նախապատրաստական ​​քայլեր

Առաջին քայլը համոզվելն է, որ մենք ունենք հիմնական WAMP միջավայր: Քանի որ Interop-ը հասանելի է միայն Windows-ում, մեզ անհրաժեշտ է, որ մեր Apache սերվերը և PHP-ի տեղադրումը տեղադրվեն Windows ապարատի վրա: Այս հզորությամբ ես օգտագործում եմ EasyPHP 14.1, որը չափազանց հեշտ է տեղադրել և կարգավորել:

Հաջորդ քայլը Microsoft Office-ի տեղադրումն է: Տարբերակն այնքան էլ կարևոր չէ. Ես օգտագործում եմ Microsoft Office 2013 Pro-ն, սակայն 2007-ից հին Office-ի ցանկացած տարբերակ պետք է աշխատի:

Դուք նաև պետք է համոզվեք, որ մենք ունենք գրադարաններ տեղադրված Interop հավելվածը մշակելու համար (PIA, Primary Interop Assemblies, Basic Interop Assemblies): Դուք կարող եք պարզել՝ բացելով Windows Explorer-ը և գնալով գրացուցակ \ հավաքում, և այնտեղ մենք պետք է տեսնենք տեղադրված հավաքների մի շարք.

Այստեղ կարող եք տեսնել Microsoft.Office.Interop.Word տարրը (ընդգծված է սքրինշոթում): Սա կլինի ժողովը, որը մենք կօգտագործենք մեր ցուցադրությունում: Խնդրում ենք հատուկ ուշադրություն դարձնել «Հավաքման անվանումը», «Տարբերակ» և «Հանրային բանալու նշան» դաշտերը: Մենք շուտով դրանք կօգտագործենք մեր PHP սկրիպտում:

Այս գրացուցակը պարունակում է նաև այլ հավաքույթներ (ներառյալ Office-ի ողջ ընտանիքը), որոնք հասանելի են իրենց ծրագրերում օգտագործելու համար (ոչ միայն PHP-ի, այլ նաև VB.net-ի, C #-ի և այլնի համար):

Եթե ​​հավաքման ցուցակը չի ներառում ամբողջ Microsoft.Office.Interop փաթեթը, ապա մենք պետք է կամ վերատեղադրենք Office-ը՝ ավելացնելով PIA-ն, կամ ձեռքով ներբեռնենք փաթեթը Microsoft-ից և տեղադրենք այն: Ավելի մանրամասն հրահանգների համար տես այս MSDN էջը:

ՄեկնաբանությունՄիայն Microsoft Office 2010-ի PIA բաշխման փաթեթը հասանելի է ներբեռնման և տեղադրման համար: Այս փաթեթի հավաքների տարբերակը 14.0.0 է, իսկ 15-րդ տարբերակը գալիս է միայն Office 2013-ի հետ:

Վերջապես, դուք պետք է միացնեք php_com_dotnet.dll ընդլայնումը php.ini-ում և վերագործարկեք սերվերը:

Այժմ դուք կարող եք սկսել ծրագրավորումը:

HTML ձև

Քանի որ այս օրինակի մեծ մասն ընկնում է սերվերի վրա, մենք կստեղծենք պարզ էջ հետևյալ ձևով.

Մենք ունենք տեքստային դաշտ անվան համար, ռադիո կոճակների խումբ՝ սեռի համար, սահիչ՝ տարիքի համար, և տեքստի մուտքագրման տարածք՝ հաղորդագրություն մուտքագրելու համար, ինչպես նաև տխրահռչակ «Ուղարկել» կոճակը:

Պահպանեք այս ֆայլը որպես «index.html» վիրտուալ հոսթի գրացուցակում, որպեսզի այն հասանելի լինի այնպիսի հասցեով, ինչպիսին է http: // test / test / interop:

Սերվերի մաս

Սերվերի կողմից մշակվող ֆայլը մեր զրույցի հիմնական նպատակն է: Սկզբից ես կտամ այս ֆայլի ամբողջական կոդը, իսկ հետո քայլ առ քայլ կբացատրեմ։

տեսանելի = ճշմարիտ; $ fn = __DIR__: «\\ template.docx»; $ d = $ w-> Փաստաթղթեր-> Բաց ($ fn); echo «Փաստաթուղթը բաց է.


"; $ flds = $ d-> Դաշտեր; $ count = $ flds-> Count; echo" Փաստաթղթում կան $ count դաշտեր:
«; արձագանք»
    $ քարտեզագրում = setupfields (); foreach ($ flds որպես $ ինդեքս => $ f) ($ f-> Ընտրել (); $ բանալի = $ քարտեզագրում [$ ինդեքս]; $ արժեք = $ մուտքեր [$ բանալի]; եթե ($ բանալի == «սեռ») (եթե ($ արժեքը == «(! LANG: m") $value = "Պրն."; else $value = "Տիկ."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Դաշտը $ ինդեքս եմ վերագրում՝ $ բանալի $ արժեքին
  • «;) արձագանք
"; echo" Մշակումն ավարտված է:

«; echo» Մուտքագրում, խնդրում ենք սպասել...
"; $ d-> PrintOut (); sleep (3); echo" Կատարված է!"; $ w-> Դուրս գալ (կեղծ); $ w = null; գործառույթի տեղադրման դաշտեր () ($ քարտեզագրում = զանգված (); $ քարտեզագրում = «սեռ»; $ քարտեզագրում = «անուն»; $ քարտեզագրում = «տարիք»; $ քարտեզագրում = «msg»; $ քարտեզագրում = «տպման ամսաթիվ», վերադարձ $ քարտեզագրում;

Այն բանից հետո, երբ մենք գրել ենք ձևից ստացված արժեքները $ inputs փոփոխականում, ինչպես նաև ստեղծել ենք դատարկ տարր printdate ստեղնով (ինչու ենք դա արել, մենք կքննարկենք ավելի ուշ), մենք անցնում ենք չորս շատ կարևոր տողերի.

$ assembly = «Microsoft.Office.Interop.Word, Տարբերակ = 15.0.0.0, Մշակույթ = չեզոք, PublicKeyToken = 71e9bce111e9429c»; $ class = «Microsoft.Office.Interop.Word.ApplicationClass»; $ w = նոր DOTNET ($ հավաք, $ դաս); $ w-> տեսանելի = ճշմարիտ;

PHP COM մանիպուլյատորը պահանջում է դասի օրինակավորում «հավաքման» ներսում։ Մեր դեպքում մենք աշխատում ենք Word-ի հետ: Եթե ​​նայեք առաջին սքրինշոթին, կարող եք գրել Word-ի ամբողջական հավաքման ստորագրությունը.

  • «Անունը», «Տարբերակը», «Հանրային բանալու նշանը» վերցված են տեղեկատվությունից, որը կարելի է դիտել «c: \ Windows \ assembly»-ում:
  • «Մշակույթը» միշտ չեզոք է

Դասը, որին մենք ցանկանում ենք անդրադառնալ, միշտ կոչվում է «հավաքի անուն» + «.ApplicationClass»:

Այս երկու պարամետրերը սահմանելով՝ կարող ենք Word-ի հետ աշխատելու օբյեկտ ստանալ։

Այս օբյեկտը կարող է մնալ հետին պլանում, կամ մենք կարող ենք այն գործարկել՝ տեսանելի հատկանիշը դնելով true:

Հաջորդ քայլը մշակման կարիք ունեցող փաստաթուղթը բացելն է և $ d փոփոխականի վրա գրել «փաստաթղթի» օրինակ:

Ձեր փաստաթղթում ձևի տվյալների հիման վրա բովանդակություն ստեղծելու մի քանի եղանակ կա:

Ամենավատ բանը, որ կարելի է անել, կլինի կոշտ կոդավորել փաստաթղթի բովանդակությունը PHP-ում, այնուհետև այն դուրս բերել Word փաստաթղթում: Խստորեն խորհուրդ եմ տալիս չանել դա հետևյալ պատճառներով.

  1. Դուք կորցնում եք ճկունությունը։ Ելքային ֆայլի ցանկացած փոփոխություն կպահանջի փոփոխություններ PHP կոդի մեջ:
  2. Սա խախտում է վերահսկողության և տեսողության տարանջատումը
  3. Փաստաթղթերի բովանդակության վրա ոճեր կիրառելը (հավասարեցում, տառատեսակներ, ոճեր և այլն) սկրիպտում զգալիորեն կմեծացնի կոդերի տողերի քանակը: Ոճերը ծրագրային կերպով փոխելը չափազանց դժվար է:

Մեկ այլ տարբերակ կլինի գտնել և փոխարինել: PHP-ն դրա համար ունի լավ ներկառուցված հնարավորություններ: Մենք կարող ենք ստեղծել Word փաստաթուղթ, որտեղ կտեղադրենք պիտակներ հատուկ սահմանազատիչներով, որոնք հետագայում կփոխարինվեն: Օրինակ, մենք կարող ենք ստեղծել փաստաթուղթ, որը կպարունակի հետևյալ հատվածը.

իսկ PHP-ով հեշտությամբ կարող ենք փոխարինել «Անուն» դաշտի բովանդակությամբ՝ ստացված ձևից։

Դա պարզ է և մեզ փրկում է բոլոր տհաճ հետևանքներից, որոնք մենք բախվում ենք առաջին մեթոդով: Մենք պարզապես պետք է որոշենք ճիշտ սահմանազատիչը, որի դեպքում մենք օգտագործում ենք կաղապար:

Ես խորհուրդ եմ տալիս երրորդ ճանապարհը, և այն հիմնված է Word-ի ավելի խորը գիտելիքների վրա: Մենք կօգտագործենք դաշտերը որպես տեղապահներ, և օգտագործելով PHP կոդը՝ ուղղակիորեն կթարմացնենք դաշտերի արժեքները համապատասխան արժեքներով։

Այս մոտեցումը ճկուն է, արագ և համապատասխանում է Word-ի լավագույն փորձին: Այն նաև խուսափում է փաստաթղթում ամբողջական տեքստային որոնումներից, ինչը լավ է կատարման համար: Նշենք, որ այս լուծումն ունի նաև թերություններ.

Word-ը սկզբից չի աջակցում դաշտերի անվանված ինդեքսներին: Նույնիսկ եթե մենք նշել ենք ստեղծվող դաշտերի անունները, մենք դեռ պետք է օգտագործենք այդ դաշտերի թվային նույնացուցիչները: Այն նաև բացատրում է, թե ինչու մենք պետք է օգտագործենք առանձին ֆունկցիա (setupfields)՝ դաշտի ինդեքսը դաշտի անվան հետ ձևից քարտեզագրելու համար:

Այս ցուցադրական ձեռնարկում մենք կօգտագործենք փաստաթուղթ 5 MERGEFIELD դաշտերով: Մենք կտեղադրենք ձևանմուշ փաստաթուղթը նույն տեղում, որտեղ մեր սկրիպտի մշակիչը:

Խնդրում ենք նկատի ունենալ, որ տպման ամսաթիվը համապատասխան դաշտ չունի ձևաթղթի վրա: Ահա թե ինչու մենք $ մուտքագրման զանգվածին ավելացրեցինք դատարկ տպագրության տարր: Առանց դրա, սկրիպտը դեռ կաշխատի և կաշխատի, բայց PHP-ն նախազգուշացում կհրապարակի, որ տպման ամսաթվի ինդեքսը չկա $ մուտքագրման զանգվածում:

Դաշտերը նոր արժեքներով փոխարինելուց հետո մենք կտպենք փաստաթուղթը՝ օգտագործելով

$ d-> PrintOut ();

PrintOut մեթոդը վերցնում է մի քանի կամընտիր պարամետր, և մենք կօգտագործենք դրա ամենապարզ ձևը: Սա կտպագրի փաստաթղթի մեկ օրինակը Windows սարքին կցված լռելյայն տպիչի վրա:

Կարող եք նաև զանգահարել PrintPreview՝ տպելուց առաջ ստացված արդյունքը դիտելու համար: Լիովին ավտոմատացված միջավայրում մենք, իհարկե, կօգտագործենք PrintOut մեթոդը:

Դուք պետք է որոշ ժամանակ սպասեք Word-ից դուրս գալուց առաջ, քանի որ տպագրության աշխատանքը հերթագրելու համար ժամանակ է պահանջվում: Առանց հապաղելու (3), $ w-> Quit մեթոդը կատարվում է անմիջապես, և աշխատանքը հերթագրված չէ:

Ի վերջո, մենք կանչում ենք $ w-> Quit (false), որը փակում է Word հավելվածը, որը կանչվել է մեր սցենարով: Մեթոդին փոխանցված միակ պարամետրը ձեզ ասելն է, որ ֆայլը պահպանեք նախքան դուրս գալը: Մենք փոփոխություններ ենք կատարել փաստաթղթում, բայց չենք ցանկանում դրանք պահպանել, քանի որ մեզ մաքուր ձևանմուշ է անհրաժեշտ հետագա աշխատանքի համար:

Կոդը ավարտելուց հետո մենք կարող ենք բեռնել մեր ձևի էջը, լրացնել որոշ արժեքներ և ներկայացնել այն: Ստորև բերված պատկերները ցույց են տալիս սցենարի արդյունքը, ինչպես նաև նորացված Word փաստաթուղթը.

Մշակման արագության բարելավում և մի փոքր ավելին PIA-ի մասին

PHP-ն թույլ տպագրված լեզու է։ Object տեսակի COM օբյեկտ: Սցենարը գրելու պահին մենք հնարավորություն չունենք ստանալու օբյեկտի նկարագրությունը՝ լինի դա Word հավելված, փաստաթուղթ, թե դաշտ: Մենք չգիտենք, թե ինչ հատկություններ ունի այս օբյեկտը կամ ինչ մեթոդներ է այն աջակցում:

Սա շատ կդանդաղեցնի զարգացման արագությունը: Զարգացումը արագացնելու համար խորհուրդ կտայի նախ գրել ֆունկցիաները C #-ով, իսկ հետո ծածկագիրը թարգմանել PHP-ի։ Ես կարող եմ խորհուրդ տալ անվճար IDE C # մշակման համար, որը կոչվում է «#develop»: Դուք կարող եք գտնել այն: Ես նախընտրում եմ այն ​​Visual Studio-ից, քանի որ #develop-ն ավելի փոքր է, պարզ և արագ:

C # կոդի տեղափոխումը PHP այնքան էլ սարսափելի չէ, որքան թվում է: Թույլ տվեք ձեզ ցույց տալ մի քանի տող C #-ում.

Word.Application w = նոր Word.Application (); w.Տեսանելի = ճշմարիտ; Լարային ուղի = Application.StartupPath + "\\ template.docx"; Word.Document d = w.Documents.Open (ուղի) որպես Word.Document; Word.Fields flds = d.Fields; int len ​​= 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:

Եվ ամենակարևորը, Microsoft-ի Office PIA-ի փաստաթղթերը, հատկապես յուրաքանչյուր 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-ek-ից, պետք է օգտագործվեր ուրիշներ, սակայն մինչ այժմ միայն այս մեթոդն է իրականացվել։

Ինչն է մեզ օգտակար նյութPropsX.xml? Այն փաստը, որ նրանք թվարկում են xml-սխեմաներ (նրանց targetNamspace) որոնք օգտագործվում են ծնողում կետX.xml... Սա նշանակում է, որ եթե մենք փաստաթղթին միացրել ենք մեկից ավելի հատուկ xml, ապա մեզ անհրաժեշտը գտնելու համար պետք է անցնել նյութPropsX.xmlբաղադրիչները և գտնել ցանկալի սխեման, հետևաբար՝ ցանկալի կետX.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 () (Participants = new List (); Որոշումներ = նոր Ցուցակ (); ) հանրային տող Առարկա (ստանալ; սահմանել;) հանրային ԱմսաթիվԺամկետ Ամսաթիվ (ստանալ; սահմանել;) հանրային տող Քարտուղար (ստանալ; սահմանել;) հանրային ցուցակ Մասնակիցներ (ստանալ; սահմանել;) հանրային ցուցակ Որոշումներ (ստանալ; սահմանել;)) հանրային դաս Որոշում (public string Problem (get; set;) public string Լուծում (get; set;) public string Responsible (get; set;) public DateTime ControlDate (get; set;)) public դասի մասնակից (հրապարակային տողի անունը (ստանալ; սահմանել;))

Մեծ հաշվով, ոչ մի առանձնահատուկ բան, բացառությամբ 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 = նոր XmlSerializer (տեսակ (MeetingNotes));
var serializedDataStream = նոր MemoryStream ();

var namespaces = նոր XmlSerializerNamespaces ();
անունների տարածքներ.Ավելացնել («», «»);

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

Քայլ 3. Ստացված XML-ը մուտքագրեք Word փաստաթղթում:

Այստեղ մենք անում ենք հետևյալը.

  • պատճենեք ձևանմուշը և բացեք պատճենը
  • գտեք դրա մեջ պահանջվող մաքսային xml (որոնում ըստ անվանատարածքի «Urn: MeetingNotes»)
  • փոխարինել բաղադրիչի բովանդակությունը մեր XML-ով

File.Copy (templateName, resultDocumentName, true); օգտագործելով (var document = WordprocessingDocument.Open (resultDocumentName, true)) (var xmlpart = document.MainDocumentPart.CustomXmlParts .Single (xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaReferences.OfTy () .Ցանկացած (sr => sr.Uri.Value == "(! LANG: urn: MeetingNotes"!}

«Փաստաթղթերի լրացման ավտոմատացում» շարքի նախորդ հոդվածներում ես խոսեցի այն մասին, թե ինչպես ստեղծել հավելվածի ինտերֆեյսը, կազմակերպել մուտքային տվյալների վավերացումը և համարը ստանալ բառերով` առանց VBA կոդ օգտագործելու: Այս վերջին հոդվածում մենք կխոսենք մոգության մասին՝ բոլոր անհրաժեշտ արժեքները Excel-ի աշխատանքային գրքույկից Word փաստաթուղթ փոխանցելու մասին: Թույլ տվեք ցույց տալ ձեզ, թե ինչ պետք է լինի արդյունքը.

Մեխանիզմի նկարագրություն

Սկզբից ես ընդհանուր գծերով նկարագրելու եմ, թե ինչպես են տվյալները փոխանցվելու Word փաստաթղթի մեջ: Առաջին հերթին մեզ անհրաժեշտ է Word փաստաթղթի ձևանմուշ, որը պարունակում է բոլոր նշումները, աղյուսակները և տեքստի այն մասը, որը կմնա անփոփոխ: Այս ձևանմուշում դուք պետք է որոշեք այն վայրերը, որտեղ կփոխարինվեն Excel աշխատանքային գրքույկի արժեքները. դա անելու ամենահարմար միջոցը էջանիշների օգտագործումն է: Դրանից հետո դուք պետք է կազմակերպեք Excel-ի տվյալները այնպես, որ համապատասխանեն Word կաղապարին, և վերջապես, գրեք փոխանցման ընթացակարգը հենց VBA-ում:

Այսպիսով, առաջին հերթին:

Ստեղծեք Word փաստաթղթի ձևանմուշ

Այստեղ ամեն ինչ չափազանց պարզ է. մենք ստեղծում ենք սովորական փաստաթուղթ, մուտքագրում և ձևավորում ենք տեքստը, ընդհանուր առմամբ, մենք ձգտում ենք ստանալ անհրաժեշտ ձևը: Այն վայրերում, որտեղ անհրաժեշտ կլինի արժեքները փոխարինել Excel-ից, պետք է էջանիշեր ստեղծել: Դա արվում է հետևյալ կերպ.

Այսպիսով, ձեզ հարկավոր է ստեղծել բոլոր էջանիշները, այսինքն՝ նշել բոլոր այն վայրերը, որտեղ կտեղադրվեն Excel-ի տվյալները: Ստացված ֆայլը պետք է պահպանվի որպես «MS Word Template»՝ օգտագործելով «File» -> «Save As…» ընտրացանկի տարրը:

Excel-ի տվյալների պատրաստում

Հարմարության համար ես որոշեցի տեղադրել բոլոր տվյալները, որոնք պետք է փոխանցվեն Word փաստաթղթի մեջ առանձին աշխատանքային թերթիկի վրա, որը կոչվում է Էջանիշներ - էջանիշներ: Այս թերթն ունի երկու սյունակ. առաջինը պարունակում է էջանիշների անունները (ճիշտ այնպես, ինչպես դրանք նշված են Word փաստաթղթում), իսկ երկրորդը պարունակում է համապատասխան արժեքներ, որոնք պետք է փաթաթվեն:

Այս արժեքներից մի քանիսը ստացվում են անմիջապես տվյալների մուտքագրման թերթիկից, իսկ որոշները՝ օժանդակ աղյուսակներից, որոնք գտնվում են Աջակցման թերթիկում: Այս հոդվածում ես չեմ վերլուծի այն բանաձևերը, որոնք հաշվարկում են պահանջվող արժեքները, եթե ինչ-որ բան պարզ չէ, հարցեր տվեք մեկնաբանություններում:

Այս փուլում կարևոր է ճիշտ նշել էջանիշների բոլոր անվանումները. տվյալների փոխանցման ճիշտությունը կախված է դրանից:

Փոխանցման կարգը

Բայց սա ամենահետաքրքիրն է։ Տվյալների փոխանցման կոդը գործարկելու երկու տարբերակ կա.

  • Կոդը կատարվում է Excel-ի աշխատանքային գրքում, տվյալները փոխանցվում են Word-ին մեկ արժեքով և անմիջապես տեղադրվում փաստաթղթում:
  • Կոդը կատարվում է առանձին Word փաստաթղթում, բոլոր տվյալները փոխանցվում են Excel-ից մեկ խմբաքանակով:

Կատարման արագության տեսանկյունից, հատկապես մեծ թվով էջանիշերի դեպքում, երկրորդ տարբերակը շատ ավելի գրավիչ է թվում, բայց այն պահանջում է ավելի բարդ գործողություններ: Սա այն է, ինչ ես օգտագործել եմ:

Ահա թե ինչ պետք է անեք.

  • Ստեղծեք Word-ի փաստաթղթի մակրո-միացված ձևանմուշ:Այս ձևանմուշը կպարունակի գործարկվող VBA կոդ:
  • Ստեղծված կաղապարում պետք է տեղադրել VBA-ով գրված ծրագիր։Դա անելու համար կաղապարը խմբագրելիս սեղմեք Alt + F11 ստեղների համակցությունը և բացված Visual Basic խմբագրիչի պատուհանում մուտքագրեք ծրագրի կոդը։
  • Excel-ի աշխատանքային գրքում գրեք կոդ, որը կանչում է լրացման ընթացակարգը նորաստեղծ Word ձևանմուշից.

Ես հոդվածում չեմ տրամադրի ընթացակարգի տեքստը. այն կարելի է հեշտությամբ դիտել FillDocument.dotm ֆայլում, որը գտնվում է արխիվի Կաղապարի թղթապանակում, օրինակով:

Ինչպե՞ս կարող եք օգտագործել այս ամենը ձեր կոնկրետ խնդիրը լուծելու համար:

Ես հասկանում եմ, որ բառերով ամեն ինչ շատ պարզ է թվում, բայց ի՞նչ է տեղի ունենում գործնականում: Առաջարկում եմ պարզապես օգտագործել պատրաստի տարբերակ։ Ներբեռնեք արխիվը օրինակով, Excel-ի աշխատանքային գրքում սեղմեք Alt + F11՝ Visual Basic խմբագրիչը բացելու և ծրագրի վերաբերյալ իմ բոլոր մեկնաբանությունները կարդալու համար: Ծրագիրը ձեր կարիքներին համապատասխան փոխելու համար պարզապես անհրաժեշտ է փոխել մի քանի հաստատունների արժեքը, դրանք տեղադրված են ծրագրի հենց սկզբում: Դուք կարող եք ազատորեն պատճենել ծրագրի ամբողջ տեքստը ձեր նախագծում:

Արխիվի կառուցվածքը

Այս հոդվածին կից արխիվը պարունակում է մի քանի ֆայլ:

Հիմնական ֆայլը Excel-ի աշխատանքային գիրք է, որը կոչվում է «Ստեղծել հաստատումներ»: Այս աշխատանքային գրքում կա 4 աշխատաթերթ, որոնցից միայն երկուսն են ցուցադրվում՝ «Մուտքագրում»՝ տվյալների մուտքագրման թերթիկ և «Տվյալների բազա»՝ բոլոր մուտքագրված փաստաթղթերի արխիվ:

Կաղապարներ պանակը պարունակում է Word փաստաթղթերի կաղապարներ: Մեկը էջանիշերի լրացման ծրագիր պարունակող ձևանմուշ է, իսկ մյուսը լրացման ձևանմուշ է: Ծրագրի հետ կաղապարը կարող եք օգտագործել առանց փոփոխությունների, բայց լրացման ձևը, իհարկե, պետք է վերամշակվի ձեր կարիքներին համապատասխան:

Ինչպե՞ս վերամշակել օրինակը «ինքներդ քեզ համար»:

  1. Պատրաստեք Word փաստաթղթի ձևանմուշ, որը դուք պետք է լրացնեք: Ստեղծեք դրա մեջ բոլոր անհրաժեշտ էջանիշները և պահեք այն որպես «MS Word կաղապար»։
  2. Պատճենեք FillDocument.dotm ֆայլը այս հոդվածին կցված արխիվից պատրաստված ձևանմուշով թղթապանակում: Այս ֆայլը պատասխանատու է կաղապարի էջանիշերը լրացնելու համար, և ձեզ հարկավոր չէ դրանում որևէ բան փոխել:
  3. Տվյալների մուտքագրման համար պատրաստել Excel աշխատանքային գիրք: Դուք պետք է որոշեք, թե արդյոք այն կունենա որևէ «առաջադեմ» ինտերֆեյս և կատարի տարբեր խելացի հաշվարկներ: Հիմնական բանը այն է, որ այն պարունակում է աշխատանքային թերթիկ Word ձևանմուշում էջանիշի անվան և այն արժեքի համապատասխանության աղյուսակով, որը պետք է փոխարինվի:
  4. Տեղադրեք VBA ծրագրի կոդը նմուշի ֆայլից պատրաստված աշխատանքային գրքում: Փոխարինեք բոլոր հաստատունները՝ ըստ ձեր նախագծի:
  5. Ստուգեք աշխատանքի ճիշտությունը:
  6. Օգտագործեք այն ակտիվորեն:

Ա, ազգանունները սյունակում Բև մասնագիտությունները սյունակում Գ.

2. Ստեղծեք word փաստաթուղթ (.doc կամ.docx)


(Ա), (Բ)և (C).

(Ա), (Բ)և (C) (Ա)- Անուն, (Բ)- ազգանունը, (C)- մասնագիտություն.

Կարգավորումներծրագրերը։

3. Ընտրեք ուղիներ ֆայլերի և թղթապանակների համար


Ընտրեք

4. Սահմանեք ձեր ուզած տվյալների թերթերն ու տողերը


Excel ֆայլի տվյալների թերթիկներ

Excel ֆայլի տվյալների տողեր Excel ֆայլի տվյալների թերթիկներ

1 .

Եթե ​​ցանկանում եք, որ ձեր excel ֆայլի բոլոր թերթերը և/կամ տվյալների տողերը մասնակցեն փաստաթղթի ձևավորմանը, սեղմեք աջ կոճակի վրա՝ տառերով: Թվեր(այս դեպքում դրա մակագրությունը կփոխվի Բոլորը).

5. Սահմանեք նոր word ֆայլերի անվանումների ձևանմուշը


Սահմանեք ձևանմուշը նոր բառային ֆայլերի անունների համար.

Նոր բառի ֆայլերի անունների ձևանմուշծրագրի կողմից ստեղծված նոր փաստաթղթերի (word ֆայլերի) անվանումների ձևանմուշ է: Այստեղ անվան ձևանմուշը պարունակում է excel ֆայլի սյունակների անվանումները՝ շրջապատված գանգուր փակագծերով. (Ա)և (Բ)... Նոր փաստաթուղթ ստեղծելիս ծրագիրը կփոխարինի բոլորին (Ա)և (Բ)համապատասխան բջիջների արժեքները excel ֆայլից - սա կլինի նոր փաստաթղթի անունը (word ֆայլ):

Դուք կարող եք սահմանել ձեր շրջանակի նշանները ներդիրում Կարգավորումներծրագրերը։

6. Սեղմեք «Ստեղծել»


Սեղմեք կոճակը Ստեղծելև առաջընթացը կհայտնվի էկրանին: Փաստաթղթերի քանակը (word-files) կստեղծվի ճիշտ այնքան, որքան 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-file) նոր փաստաթղթեր (word-files) ստեղծելու համար: Այստեղ «կաղապար» տեքստը պարունակում է excel ֆայլի սյունակների անվանումները՝ շրջապատված գանգուր փակագծերով. (Ա), (Բ)և (C).

Ծրագիրը կստեղծի նոր փաստաթղթեր՝ բոլորին փոխարինող «կաղապարի» համաձայն (Ա), (Բ)և (C)համապատասխան բջիջների արժեքները excel ֆայլից. (Ա)- Անուն, (Բ)- ազգանունը, (C)- մասնագիտություն.

Նաև կարող եք տեղադրել ձեր սեփական շրջանակային նշանները ներդիրում Կարգավորումներծրագրերը։

Ընտրեք ուղիներ ֆայլերի և թղթապանակների համար


Ընտրեք ուղիներ ֆայլերի և թղթապանակների համար (կոճակները պիտակավորված Ընտրեք): Ծրագրում դուք սահմանում եք հետևյալ ուղիները.

Excel ֆայլ տվյալների հետ (* .xls, * .xlsx)- սա ձեր excel տվյալների ֆայլի ուղին է (հաճախորդի տեղեկատվություն);

Word կաղապարի ֆայլ (* .doc, * .docx)- սա ձեր «կաղապարի» ճանապարհն է (նախորդ քայլում ստեղծված word-ֆայլ);

Թղթապանակ՝ նոր word ֆայլերը պահելու համար- սա այն թղթապանակի ճանապարհն է, որտեղ ծրագիրը կպահի նոր ստեղծված փաստաթղթերը:

Սեղմեք դիտելու համար

Սահմանեք ձեր ուզած տվյալների թերթերն ու տողերը


Սեղմեք դիտելու համար

Սահմանեք ձեր excel ֆայլի թերթերի և տողերի համարները (հաճախորդի տեղեկություններ), որոնց համար ցանկանում եք ստեղծել փաստաթղթեր.

Excel ֆայլի տվյալների թերթիկներ- Ձեր excel ֆայլի թերթերի համարները, որոնք կմասնակցեն նոր փաստաթղթերի ձևավորմանը.

Excel ֆայլի տվյալների տողեր- թերթերի տողերի համարները (թերթերը նշված են Excel ֆայլի տվյալների թերթիկներ) ձեր excel ֆայլից, որը կմասնակցի նոր փաստաթղթերի ձևավորմանը: Յուրաքանչյուր նշված տողի տվյալների հիման վրա կստեղծվի առանձին փաստաթուղթ (word ֆայլ):

Ծրագրում թերթերի և տողերի համարակալումը սկսվում է 1 .