Word'de belgeler nasıl oluşturulur. Exwog - şablona göre Excel'den Word'e rapor oluşturucu

PHP geliştiricilerinin zaman zaman Windows işletim sistemiyle etkileşime girmek zorunda olduğu bir dünyada yaşıyoruz. WMI (Windows Yönetim Arayüzü) buna bir örnektir - Microsoft Office ile etkileşim.

Bu makalede, Word ve PHP arasındaki basit bir entegrasyona bakacağız: PHP (ve Interop uzantısı) kullanarak HTML biçimindeki giriş alanlarından bir Microsoft Word belgesi oluşturma.

hazırlık adımları

İlk adım, temel bir WAMP ortamının kurulduğundan emin olmaktır. Interop yalnızca Windows'ta mevcut olduğundan, bir Windows makinesine dağıtılacak Apache sunucumuza ve PHP kurulumumuza ihtiyacımız var. Bu kapasitede, kurulumu ve yapılandırması son derece kolay olan EasyPHP 14.1'i kullanıyorum.

Bir sonraki adım Microsoft Office'i yüklemektir. Sürüm çok önemli değil. Microsoft Office 2013 Pro kullanıyorum, ancak 2007'den eski tüm Office sürümleri çalışmalıdır.

Ayrıca, Birlikte Çalışma uygulamasını geliştirmek için kitaplıklarımızın kurulu olduğundan emin olmanız gerekir (PIA, Birincil Birlikte Çalışma Derlemeleri, Temel Birlikte Çalışma Derlemeleri). Windows Gezgini'ni açıp dizine giderek öğrenebilirsiniz. \ montaj ve orada bir dizi kurulu montaj görmeliyiz:

Microsoft.Office.Interop.Word öğesini burada görebilirsiniz (ekran görüntüsünde altı çizili). Bu, demomuzda kullanacağımız derleme olacak. Lütfen "Derleme adı", "Sürüm" ve "Genel anahtar belirteci" alanlarına özellikle dikkat edin. Bunları yakında PHP betiğimizde kullanacağız.

Bu dizin aynı zamanda programlarında (yalnızca PHP için değil, VB.net, C# vb. için de) kullanılabilen diğer derlemeleri (tüm Office ailesi dahil) içerir.

Derleme listesi Microsoft.Office.Interop paketinin tamamını içermiyorsa, PIA'yı ekleyerek Office'i yeniden yüklememiz veya paketi Microsoft'tan manuel olarak indirip yüklememiz gerekir. Daha ayrıntılı talimatlar için bu MSDN sayfasına bakın.

Yorum Yap: yalnızca Microsoft Office 2010 için PIA dağıtım kiti indirilebilir ve kurulabilir.Bu paketteki derlemelerin sürümü 14.0.0'dır ve sürüm 15 yalnızca Office 2013 ile birlikte gelir.

Son olarak, php.ini'de php_com_dotnet.dll uzantısını etkinleştirmeniz ve sunucuyu yeniden başlatmanız gerekir.

Artık programlamaya başlayabilirsiniz.

HTML formu

Bu örneğin büyük kısmı sunucu tarafında olduğundan, şuna benzeyen bir formla basit bir sayfa oluşturacağız:

Ad için bir metin alanımız, cinsiyet için bir grup radyo düğmesi, yaş için bir kaydırıcı ve bir mesaj girmek için bir metin giriş alanı ve kötü şöhretli “Gönder” düğmesi var.

http://test/test/interop gibi bir adresten erişilebilmesi için bu dosyayı sanal ana bilgisayar dizinine “index.html” olarak kaydedin.

sunucu bölümü

Sunucu tarafı işleyici dosyası, konuşmamızın ana odak noktasıdır. Başlangıç ​​olarak bu dosyanın tam kodunu vereceğim ve ardından adım adım anlatacağım.

görünür = doğru; $ fn = __DIR__. "\\ şablon.docx"; $ d = $ w-> Belgeler-> Aç ($ fn); echo "Belge açık.


"; $ flds = $ d-> Alanlar; $ count = $ flds-> Count; echo" Belgede $ count alanları var.
"; Eko"
    "; $ eşleme = kurulum alanları (); foreach ($ dizin => $ f olarak $ flds) ($ f-> Seç (); $ anahtar = $ eşleme [$ dizin]; $ değer = $ girişler [$ anahtar]; if ($ anahtar == "cinsiyet") (if ($ değer == "(! LANG: m)") $value = "Bay."; else $value = "Hanım."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • $ index: $ key alanını $ değerine atadım
  • ";) Eko"
"; echo" İşleme tamamlandı!

"; echo" Yazılıyor, lütfen bekleyin...
"; $ d-> PrintOut (); uyku (3); echo" Bitti! "; $ w-> Çık (yanlış); $ w = null; işlev kurulum alanları () ($ eşleme = dizi (); $ eşleme = "cinsiyet"; $ eşleme = "ad"; $ eşleme = "yaş"; $ eşleme = "mesaj"; $ eşleme = "baskı tarihi"; dönüş $ eşleme;)

Formdan elde ettiğimiz değerleri $ inputs değişkenine yazdıktan ve ayrıca printdate anahtarı ile boş bir eleman oluşturduktan sonra (bunu neden yaptık - daha sonra tartışacağız), çok önemli dört satıra geçiyoruz:

$ derleme = "Microsoft.Office.Interop.Word, Sürüm = 15.0.0.0, Kültür = tarafsız, PublicKeyToken = 71e9bce111e9429c"; $ class = "Microsoft.Office.Interop.Word.ApplicationClass"; $ w = yeni DOTNET ($ montaj, $ sınıfı); $ w-> görünür = doğru;

PHP COM manipülatörü, "assembly" içinde bir sınıfın somutlaştırılmasını gerektirir. Bizim durumumuzda Word ile çalışıyoruz. İlk ekran görüntüsüne bakarsanız, Word için tam derleme imzasını yazabilirsiniz:

  • "Ad", "Sürüm", "Genel Anahtar Simgesi", "c: \ Windows \ derleme" içinde görüntülenebilen bilgilerden alınır.
  • “Kültür” her zaman tarafsızdır

Referans vermek istediğimiz sınıf her zaman “assembly name” + “.ApplicationClass“ olarak adlandırılır.

Bu iki parametreyi ayarlayarak Word ile çalışmak için bir nesne elde edebiliriz.

Bu nesne arka planda kalabilir veya görünür özniteliği true olarak ayarlayarak onu çalıştırmaya getirebiliriz.

Sonraki adım, işlenmesi gereken belgeyi açmak ve $ d değişkenine "belgenin" bir örneğini yazmaktır.

Belgenizdeki form verilerine dayalı içerik oluşturmanın birkaç yolu vardır.

Yapılacak en kötü şey, belgenin içeriğini PHP'de sabit kodlamak ve ardından bir Word belgesine çıkarmak olacaktır. Aşağıdaki nedenlerden dolayı bunu yapmamanızı şiddetle tavsiye ederim:

  1. Esnekliğini kaybediyorsun. Çıktı dosyasında yapılacak herhangi bir değişiklik, PHP kodunda değişiklik yapılmasını gerektirecektir.
  2. Bu, kontrol ve görüş ayrımını bozar
  3. Bir komut dosyasındaki belge içeriğine (hizalama, yazı tipleri, stiller vb.) stiller uygulamak, kod satırlarının sayısını büyük ölçüde artıracaktır. Stilleri programlı olarak değiştirmek çok zahmetlidir.

Başka bir seçenek de bul ve değiştir kullanmaktır. PHP bunun için iyi yerleşik olanaklara sahiptir. Daha sonra değiştirilecek olan özel sınırlayıcılara sahip etiketleri yerleştireceğimiz bir Word belgesi oluşturabiliriz. Örneğin, aşağıdaki parçacığı içerecek bir belge oluşturabiliriz:

ve PHP ile, formdan elde edilen "Ad" alanının içeriğiyle kolayca değiştirebiliriz.

Bu basittir ve bizi ilk yöntemde karşılaştığımız tüm hoş olmayan sonuçlardan kurtarır. Sadece doğru sınırlayıcıya karar vermemiz gerekiyor, bu durumda bir şablon kullanıyoruz.

Üçüncü yolu öneriyorum ve bu, Word hakkında daha derin bir bilgi birikimine dayanıyor. Alanları yer tutucu olarak kullanacağız ve PHP kodunu kullanarak, alanlardaki değerleri ilgili değerlerle doğrudan güncelleyeceğiz.

Bu yaklaşım esnek, hızlı ve Word'ün en iyi uygulamalarıyla tutarlıdır. Ayrıca, performans için iyi olan belgede tam metin aramalarını önler. Bu çözümün de dezavantajları olduğunu unutmayın.

Word, başlangıçtan itibaren alanlar için adlandırılmış dizinleri desteklemiyordu. Oluşturulacak alanların adlarını belirtmiş olsak bile yine de bu alanların sayısal tanımlayıcılarını kullanmamız gerekiyor. Ayrıca alan dizinini formdaki alan adıyla eşleştirmek için neden ayrı bir işlev (kurulum alanları) kullanmamız gerektiğini de açıklar.

Bu demo eğitiminde, 5 MERGEFIELD alanına sahip bir belge kullanacağız. Şablon belgesini betik işleyicimizle aynı yere yerleştireceğiz.

Lütfen printdate alanının formda karşılık gelen bir alana sahip olmadığını unutmayın. Bu nedenle $ inputs dizisine boş bir printdate öğesi ekledik. Bu olmadan, komut dosyası çalışmaya devam eder ve çalışır, ancak PHP, printdate dizininin $ inputs dizisinde bulunmadığına dair bir uyarı verir.

Alanları yeni değerlerle değiştirdikten sonra, kullanarak belgeyi yazdıracağız.

$ d-> Çıktı Al ();

PrintOut yöntemi birkaç isteğe bağlı parametre alır ve biz onun en basit biçimini kullanacağız. Bu, Windows makinesine bağlı varsayılan yazıcıda belgenin bir kopyasını yazdıracaktır.

Yazdırmadan önce ortaya çıkan çıktıya bir göz atmak için PrintPreview'i de arayabilirsiniz. Tam otomatik bir ortamda elbette PrintOut yöntemini kullanacağız.

Bir yazdırma işini kuyruğa almak zaman aldığından Word'den çıkmadan önce bir süre beklemeniz gerekir. Gecikme olmadan (3), $ w-> Quit yöntemi hemen yürütülür ve iş kuyruğa alınmaz.

Son olarak, scriptimiz tarafından çağrılan Word uygulamasını kapatan $ w-> Quit (false) diyoruz. Yönteme iletilen tek parametre, çıkmadan önce dosyayı kaydetmenizi söylemektir. Belgede düzenlemeler yaptık, ancak daha sonra çalışmak için temiz bir şablona ihtiyacımız olduğundan bunları kaydetmek istemiyoruz.

Kodu bitirdikten sonra form sayfamızı yükleyebilir, bazı değerleri doldurabilir ve gönderebiliriz. Aşağıdaki resimler, betiğin çıktısını ve güncellenmiş Word belgesini göstermektedir:

İşlem hızının iyileştirilmesi ve PIA hakkında biraz daha fazla bilgi

PHP zayıf yazılmış bir dildir. Object türünde bir COM nesnesi. Komut dosyasını yazarken, bir Word uygulaması, bir belge veya bir alan olsun, nesnenin açıklamasını almanın hiçbir yolu yoktur. Bu nesnenin hangi özelliklere sahip olduğunu veya hangi yöntemleri desteklediğini bilmiyoruz.

Bu, geliştirme hızını çok yavaşlatacaktır. Geliştirmeyi hızlandırmak için önce fonksiyonları C# ile yazmanızı ve ardından kodu PHP'ye çevirmenizi tavsiye ederim. C# geliştirme için “#develop” adında ücretsiz bir IDE önerebilirim. Bulabilirsin. #develop daha küçük, daha basit ve daha hızlı olduğu için Visual Studio'ya tercih ederim.

C# kodunu PHP'ye geçirmek göründüğü kadar korkutucu değildir. Size C# ile birkaç satır göstereyim:

Word.Application w = yeni Word.Application(); w.Görünür = doğru; Dize yolu = Application.StartupPath + "\\ template.docx"; Word.Document d = w.Documents.Open (yol) olarak Word.Document; Word.Fields flds = d.Fields; int uzunluk = flds.Count; foreach (flds'de Word.Field f) (f.Select (); int i = f.Index; w.Selection.TypeText ("...");)

C# kodunun daha önce gösterdiğim PHP koduna çok benzediğini fark edeceksiniz. C # kesinlikle yazılan bir dildir, bu nedenle bu örnekte birkaç döküm işlecini ve değişkenlerin yazılması gerektiğini fark edeceksiniz.

Değişkenin türünü belirterek, daha net kod ve otomatik tamamlamanın keyfini çıkarabilirsiniz ve geliştirme hızı önemli ölçüde artar.

PHP geliştirmenizi hızlandırmanın başka bir yolu da Word'de bir makro çağırmaktır. Aynı işlem sırasını gerçekleştiriyoruz ve ardından makro olarak kaydediyoruz. Makro, PHP'ye çevrilmesi de kolay olan Visual Basic'te yazılmıştır.

Ve en önemlisi, Microsoft'tan Office PIA belgeleri, özellikle her Office uygulaması için ad alanı belgeleri, en ayrıntılı referans materyalidir. En çok kullanılan üç uygulama şunlardır:

  • 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

Çözüm

Bu makalede, PHP COM kitaplıklarını ve Microsoft Office birlikte çalışabilirliğini kullanarak bir Word belgesini verilerle nasıl dolduracağınızı gösterdik.

Windows ve Office günlük yaşamda yaygın olarak kullanılmaktadır. Office / Window ve PHP'nin gücünü bilmek her PHP ve Windows geliştiricisi için faydalı olacaktır.

PHP COM uzantısı, bu kombinasyonu kullanmanız için kapıyı açar.

Daha önce başladığımız Word'de formlarla çalışma konusuna devam ediyoruz. Daha önceki yazılarda formlara sadece “ileri kullanıcı” açısından baktık, yani. elle doldurulması kolay belgeler oluşturduk. Bugün bu görevi genişletmeyi önermek ve belgeler oluşturmak için İçerik kontrol mekanizmasını kullanmayı denemek istiyorum.

Acil görevimize geçmeden önce, içerik kontrol verilerinin Word belgelerinde nasıl saklandığı hakkında birkaç söz söylemek istiyorum (belgenin içeriğine nasıl bağlandıklarını kasıtlı olarak atlayacağım, ancak buna geri dönmeyi umuyorum). sonraki makalelerde bazen).

Doğal bir soru - nedir itemProps1.xml ve benzeri bileşenler? Bu bileşenler, veri kaynaklarının açıklamalarını saklar. Büyük olasılıkla, geliştiriciler tarafından planlandığı gibi, belgeye gömülü xml-ek'e ek olarak, başkalarını kullanması gerekiyordu, ancak şimdiye kadar sadece bu yöntem uygulandı.

bize ne faydası var itemPropsX.xml? xml şemalarını listelemeleri (onların hedefAd alanı) ebeveynde kullanılan itemX.xml... Bu, belgeye birden fazla özel xml bağladıysak, ihtiyacımız olanı bulmak için itemPropsX.xml bileşenleri ve istenen devreyi ve dolayısıyla istenen devreyi bulun itemX.xml.

Şimdi bir şey daha. Bileşenler arasındaki ilişkileri manuel olarak analiz etmeyeceğiz ve yalnızca temel Paketleme API'sini kullanarak gerekli olanları aramayacağız! Bunun yerine, Açık XML SDK'sını kullanacağız (derlemelerine NuGet aracılığıyla erişilebilir). Tabii ki, daha önce bu API hakkında bir şey söylemedik, ancak görevimiz için ondan minimum bir miktar gerekiyor ve tüm kodlar oldukça şeffaf olacak.

Eh, ana giriş yapıldı, bir örnekle başlayabilirsiniz.

Gelenek olarak, makalede çizdiğimiz aynı “Toplantı Raporunu” alacağız. Belge şablonunun nasıl göründüğünü size hatırlatmama izin verin:

Ve bunun gibi, belge alanlarının bağlı olduğu XML

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

Adım 1. Bir veri modeli oluşturma

Aslında görevimiz sadece bir belge oluşturmak değil, hem geliştirici hem de kullanıcı tarafından kullanılacak uygun bir araç (en azından taslak sürümde) oluşturmaktır.

Bu nedenle modeli C# sınıflarının bir yapısı olarak ilan edeceğiz:

Genel sınıf MeetingNotes (genel MeetingNotes () (Katılımcılar = yeni Liste) (); Kararlar = yeni Liste (); ) public string Konu (get; set;) public DateTime Date (get; set;) public string Sekreter (get; set;) public Liste Katılımcılar (al; ayarla;) genel Liste Kararlar (get; set;)) public class Decision (public string Problem (get; set;) public string Çözüm (get; set;) public string Sorumlu (get; set;) public DateTime ControlDate (get; set;)) public class Katılımcı (genel dize Adı (get; set;))

Genel olarak, XML serileştirmesini kontrol etmek için özniteliklerin eklenmesi dışında özel bir şey yoktur (çünkü modeldeki adlar ve gerekli XML biraz farklıdır).

Adım 2. Yukarıdaki modeli XML olarak seri hale getirin

Görev, prensipte önemsizdir. Biri için değilse, "en sevdiğimiz XmlSerializer'ımızı alın ve gidin" denir Ancak

Ne yazık ki, Office'in şu anki sürümünde aşağıdaki gibi bir hata var gibi görünüyor: eğer özel xml ön ana ad alanını (Word'ün görüntüleme için öğeleri alması gereken), başka bir ad alanını bildirir, ardından tekrarlanan İçerik denetimleri yanlış görüntülenmeye başlar (yalnızca şablonun kendisinde olduğu kadar çok öğe gösterilir - yani yinelenen bölüm çalışmaz) ).

Şunlar. bu xml çalışır:

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

ve bu da:

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

ama bu artık değil:

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

Connect'te Microsoft desteğine bir hata göndermeye çalıştım, ancak nedense Office aracılığıyla hata gönderme erişimim yok. MSDN forumundaki tartışma da yardımcı olmadı.

Genel olarak, gerekli bir döner kavşak manevrası. XML'i elle oluştursaydık hiçbir sorun olmazdı - her şeyi kendimiz yapardık. Ancak, bu durumda, bu ad alanları kullanılmasa bile, varsayılan olarak birkaç ad alanını çıktı XML'sine ekleyen standart XmlSerializer'ı gerçekten kullanmak istiyorum.

XmlSerializer'da kendi ad alanlarımızın çıktısını tamamen bastıracağız. Doğru, bu yaklaşım yalnızca onlara gerçekten ihtiyacı yoksa işe yarayacaktır (aksi takdirde, yine de eklenecekler ve bizimkilerden ÖNCE).

Aslında, kodun tamamı (değişkenin buluşma notlarıönceden doldurulmuş bir MeetingNotes nesnesi içerir):

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

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

serializer.Serialize (serializedDataStream, MeetingNotes, ad alanları);
serializedDataStream.Seek (0, SeekOrigin.Begin);

Adım 3. Ortaya çıkan XML'i bir Word belgesine girin.

Burada şunları yapıyoruz:

  • şablonu kopyalayın ve kopyayı açın
  • içinde gerekli özel xml'yi bulun (ad alanına göre arayın "Urn: Toplantı Notları")
  • bileşenin içeriğini XML'imizle değiştirin

File.Copy (şablonAdı, sonuçDocumentAdı, true); (var document = WordprocessingDocument.Open (resultDocumentName, true)) kullanarak (var xmlpart = document.MainDocumentPart.CustomXmlParts .Single (xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaReferences.OfType) () .Any (sr => sr.Uri.Value == "(! LANG: urn: MeetingNotes)"!}

"Belge doldurma otomasyonu" serisinin önceki yazılarında, uygulamanın kullanıcı arayüzünün nasıl oluşturulacağından, giriş verilerinin doğrulanmasının nasıl organize edileceğinden ve VBA kodu kullanmadan kelimelerle sayının nasıl alınacağından bahsettim. Bu son makalede, sihir hakkında konuşacağız - gerekli tüm değerleri bir Excel çalışma kitabından bir Word belgesine aktarmak. Size sonucun ne olması gerektiğini göstereyim:

Mekanizma açıklaması

Başlangıç ​​olarak, verilerin bir Word belgesine nasıl aktarılacağını genel hatlarıyla anlatacağım. Her şeyden önce, tüm işaretlemeleri, tabloları ve metnin değişmeden kalacak bölümünü içeren bir Word belgesi şablonuna ihtiyacımız var. Bu şablonda, Excel çalışma kitabındaki değerlerin değiştirileceği yerleri belirlemeniz gerekir - bunu yapmanın en uygun yolu yer imlerini kullanmaktır. Bundan sonra, Excel verilerini Word şablonuyla eşleşecek şekilde düzenlemeniz ve son olarak, ancak en az değil, aktarım prosedürünün kendisini VBA'ya yazmanız gerekir.

Yani, önce ilk şeyler.

Bir Word Belgesi Şablonu Oluşturun

Burada her şey son derece basit - normal bir belge oluşturuyoruz, metni yazıp biçimlendiriyoruz, genel olarak gerekli formu elde etmeye çalışıyoruz. Excel'den değerleri değiştirmenin gerekli olacağı yerlerde, yer imleri oluşturmanız gerekir. Bu şu şekilde yapılır:

Bu nedenle, tüm yer imlerini oluşturmanız, yani Excel'den verilerin ekleneceği tüm yerleri işaretlemeniz gerekecektir. Ortaya çıkan dosya, "Dosya" -> "Farklı Kaydet ..." menü öğesi kullanılarak "MS Word Şablonu" olarak kaydedilmelidir.

Excel verilerinin hazırlanması

Kolaylık sağlamak için, Word belgesine aktarılması gereken tüm verileri Yer İmleri - yer imleri adlı ayrı bir çalışma sayfasına yerleştirmeye karar verdim. Bu sayfanın iki sütunu vardır: ilki yer imi adlarını içerir (tam olarak Word belgesinde adlandırıldığı gibi) ve ikincisi sarılacak ilgili değerleri içerir.

Bu değerlerin bir kısmı doğrudan veri giriş sayfasından, bir kısmı ise Destek sayfasında yer alan yardımcı tablolardan elde edilmektedir. Bu yazıda, net olmayan bir şey varsa, gerekli değerleri hesaplayan formülleri analiz etmeyeceğim - yorumlarda sorular sorun.

Bu aşamada, yer imlerinin tüm adlarını doğru bir şekilde belirtmek önemlidir - veri aktarımının doğruluğu buna bağlıdır.

Transfer prosedürü

Ama bu en ilginç şey. Veri aktarım kodunu yürütmek için iki seçenek vardır:

  • Kod bir Excel çalışma kitabında yürütülür, veriler Word'e her seferinde bir değer iletilir ve hemen belgeye yerleştirilir.
  • Kod ayrı bir Word belgesinde yürütülür, tüm veriler Excel'den tek bir toplu iş halinde aktarılır.

Yürütme hızı açısından, özellikle çok sayıda yer imiyle, ikinci seçenek çok daha çekici görünüyor, ancak daha karmaşık eylemler gerektiriyor. Ben bunu kullandım.

İşte yapmanız gerekenler:

  • Makro etkinleştirilmiş bir Word belge şablonu oluşturun. Bu şablon yürütülebilir VBA kodunu içerecektir.
  • Oluşturulan şablonda VBA ile yazılmış bir program yerleştirmeniz gerekiyor. Bunu yapmak için bir şablon düzenlerken Alt + F11 tuş kombinasyonuna basın ve açılan Visual Basic düzenleyici penceresinde program kodunu girin.
  • Bir Excel çalışma kitabında, yeni oluşturulan Word şablonundan doldurma prosedürünü çağıran kod yazın.

Makalede prosedürün metnini vermeyeceğim - örnekle arşivdeki Template klasöründe bulunan FillDocument.dotm dosyasında kolayca görüntülenebilir.

Tüm bunları kendi özel probleminizi çözmek için nasıl kullanabilirsiniz?

Kelimelerde her şeyin çok basit göründüğünü anlıyorum, ama pratikte ne oluyor? Sadece hazır bir seçenek kullanmanızı öneririm. Arşivi örnekle indirin, bir Excel çalışma kitabında Visual Basic düzenleyicisini açmak ve program hakkındaki tüm yorumlarımı okumak için Alt + F11 tuşlarına basın. Programı ihtiyaçlarınıza göre değiştirmek için, birkaç sabitin değerini değiştirmeniz yeterlidir, bunlar programın en başına yerleştirilir. Tüm program metnini projenize özgürce kopyalayabilirsiniz.

Arşiv yapısı

Bu makaleye eklenen arşiv birkaç dosya içermektedir.

Ana dosya, "Onay Oluştur" adlı bir Excel çalışma kitabıdır. Bu çalışma kitabında sadece ikisi görüntülenen 4 çalışma sayfası vardır: "Giriş" - bir veri giriş sayfası ve "Veritabanı" - girilen tüm belgelerin bir arşivi.

Şablonlar klasörü, Word belge şablonlarını içerir. Biri, bir yer imi doldurma programı içeren bir şablon, diğeri ise doldurulması gereken bir form. Şablonu programla değişiklik yapmadan kullanabilirsiniz, ancak doldurma formunun elbette ihtiyaçlarınıza göre yeniden yapılması gerekecektir.

"Kendiniz için" örneği nasıl yeniden işleyebilirsiniz?

  1. Doldurmanız gereken bir Word belge şablonu hazırlayın. İçinde gerekli tüm yer imlerini oluşturun ve bir "MS Word şablonu" olarak kaydedin.
  2. Bu yazının ekindeki arşivden FillDocument.dotm dosyasını hazırlanan şablonun bulunduğu klasöre kopyalayın. Bu dosya, şablon yer imlerinin doldurulmasından sorumludur ve içindeki hiçbir şeyi değiştirmeniz gerekmez.
  3. Veri girişi için bir Excel çalışma kitabı hazırlayın. Herhangi bir "gelişmiş" kullanıcı arayüzüne sahip olup olmayacağına karar vermek ve çeşitli akıllı hesaplamalar yapmak size kalmıştır. Ana şey, Word şablonundaki yer iminin adı ile değiştirilmesi gereken değer arasında bir yazışma tablosu içeren bir çalışma sayfası içermesidir.
  4. Örnek dosyadan VBA program kodunu hazırlanan çalışma kitabına ekleyin. Tüm sabitleri projenize göre değiştirin.
  5. İşin doğruluğunu test edin.
  6. Aktif olarak kullanın!

A, sütundaki soyadları B ve sütundaki meslekler C.

2. Bir kelime belgesi oluşturun (.doc veya.docx)


(A), (B) ve (C).

(A), (B) ve (C) (A)- isim, (B)- soyadı, (C)- bir meslek.

Ayarlar programlar.

3. Dosyalar ve klasörler için yolları seçin


Seçme

4. İstediğiniz verilerin sayfalarını ve satırlarını ayarlayın


Excel dosyası veri sayfaları

Excel dosyası veri satırları Excel dosyası veri sayfaları

1 .

Excel dosyanızın veri içeren tüm sayfalarının ve/veya satırlarının belgenin oluşumuna katılmasını istiyorsanız, yazı ile sağ tuşa tıklayın. sayılar(bu durumda, yazıt olarak değişecektir Herşey).

5. Yeni kelime dosyalarının adları için şablonu ayarlayın


Yeni sözcük dosyalarının adları için şablonu ayarlayın:

Yeni kelime dosyaları adları şablonu program tarafından oluşturulan yeni belgelerin (kelime dosyaları) adları için bir şablondur. Burada ad şablonu, küme parantezleriyle çevrelenmiş, excel dosyasının sütun adlarını içerir: (A) ve (B)... Yeni bir belge oluştururken, program tüm (A) ve (B) excel dosyasındaki ilgili hücre değerleri - bu, yeni belgenin (kelime dosyası) adı olacaktır.

Sekmede çerçeveleme sembollerinizi ayarlayabilirsiniz. Ayarlar programlar.

6. "Oluştur" u tıklayın


Düğmeye bas üret ve ilerleme ekranda görünecektir. Formasyona dahil olan excel dosyasının satır sayısı kadar doküman (word-file) sayısı tam olarak oluşturulacaktır.

7. Her şey


Tüm belgeler (kelime dosyaları) oluşturulur ve belirtilen klasördedir. Yeni kelime dosyalarının kaydedileceği klasör... Her şey:)

Exwog - şablona göre Excel'den Word'e rapor oluşturucu

Excel dosya verilerine dayalı bir şablondan (Word dosyası) ücretsiz Word dosyaları oluşturucu

Mac OS, Windows ve Linux'ta çalışır

Yeni oluşturulan kelime dosyalarının adlarını belirlemenizi sağlar

İstenen verilerin sayfalarını ve satırlarını tanımlamanıza izin verir

Excel sütun adları için çevreleyen karakterleri ayarlamanıza olanak tanır

Kullanımı kolay

Verilerinizi Excel formatında (.xls ve .xlsx) depolayın ve birkaç tıklamayla Word dosyaları (.doc ve .docx) oluşturun :)


Nasıl çalışır?

excel dosyanıza bir göz atın


Bu örnekte, excel dosyası müşteri bilgilerini içermektedir. Her satır belirli bir müşteriye karşılık gelir. İsimler sütunda bulunur A, sütundaki soyadları B ve sütundaki meslekler C.

Görüntülemek için tıklayın

Bir kelime belgesi oluşturun (.doc veya.docx)


Görüntülemek için tıklayın

Yeni belgeler (kelime dosyaları) oluşturmak için bir "şablon" (kelime dosyası) oluşturun. Burada, "şablon" metni, Excel dosyasının küme parantezleriyle çevrelenmiş sütun adlarını içerir: (A), (B) ve (C).

Program, "şablona" göre tüm belgeleri değiştirerek yeni belgeler oluşturacaktır. (A), (B) ve (C) excel dosyasındaki ilgili hücre değerleri: (A)- isim, (B)- soyadı, (C)- bir meslek.

Ayrıca sekmede kendi çerçeveleme sembollerinizi ayarlayabilirsiniz. Ayarlar programlar.

Dosyalar ve klasörler için yollar seçin


Dosyalar ve klasörler için yolları seçin (etiketli düğmeler Seçme). Programda aşağıdaki yolları ayarlarsınız:

Veri içeren Excel dosyası (* .xls, * .xlsx)- bu, excel veri dosyanızın yoludur (müşteri bilgileri);

Word şablon dosyası (* .doc, * .docx)- bu, "şablonunuzun" yoludur (önceki adımda oluşturulan kelime dosyası);

Yeni kelime dosyalarının kaydedileceği klasör- bu, programın yeni oluşturulan belgeleri kaydedeceği klasörün yoludur.

Görüntülemek için tıklayın

İstediğiniz verilerin sayfalarını ve satırlarını ayarlayın


Görüntülemek için tıklayın

Belge oluşturmak istediğiniz verilerle (müşteri bilgileri) excel dosyanızın sayfa ve satır sayısını ayarlayın:

Excel dosyası veri sayfaları- yeni belgelerin oluşumuna katılacak excel dosyanızın sayfa sayısı;

Excel dosyası veri satırları- sayfaların satır numaraları (sayfalar Excel dosyası veri sayfaları) yeni belgelerin oluşumuna katılacak olan excel dosyanızın. Belirtilen her satırın verilerine göre ayrı bir belge (kelime dosyası) oluşturulacaktır.

Programdaki yaprak ve satırların numaralandırılması ile başlar. 1 .