Kullanıcı verilerinden bir şablon belgesi oluşturma. PHP'de Microsoft Word belgeleri oluşturuyoruz. Excel verilerinin hazırlanması

  • 07.03.2020

PHP geliştiricilerinin zaman zaman Windows işletim sistemiyle etkileşime girmesi gereken 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 bir HTML formundaki giriş alanlarına dayalı 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 makinesinde 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ı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:

Burada Microsoft.Office.Interop.Word öğesini 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 MSDN'deki bu sayfaya bakın.

Yorum Yap: İndirme ve kurulum için yalnızca PIA Microsoft Office 2010 dağıtımı mevcuttur.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 ana kısmı sunucu tarafında olduğu için, ş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ı ile meşhur “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 olarak $ flds => $ f) ($ f-> Seç (); $ anahtarı = $ eşleme [$ dizin]; $ değeri = $ girişleri [$ anahtarı]; if ($ key == "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 edilen değerleri $ girdileri 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ırma moduna getirebiliriz.

Bir 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 ö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.

Çok basit ve bizi ilk başta karşılaştığımız tüm hoş olmayan sonuçlardan kurtarıyor. 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 sıraya koymak zaman aldığından Word'den çıkmadan önce bir süre beklemeniz gerekecektir. 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ı kaydetme talimatıdır. 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ı büyük ölçüde 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ı 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 hayatta 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.

Bir keresinde, Olimpiyat sonuçlarını özetledikten sonra, katılımcıların geçilen (veya geçilemeyen) konuların sonuçlarını içeren mektuplar göndermeleri istendiğinde, kızın oturduğunu ve elleriyle sınav sonuçlarını girdiğini fark ettim, öğrencinin tam ad ve diğer bilgileri mektup şablonuna ekleyin. Önünde isimleri ve notları olan birkaç Excel sayfası vardı. Kopyala-Yapıştır, Ctrl + C - Ctrl + V, adın adaydan tam duruma çevrilmesi ve bu nedenle çalışma, üç veri sayfasının ilkinin yarısı ile zaten yapılmıştır. Sizce ne kadar süre oturup verileri kopyalayıp sonucu kontrol edebilir? Uzun zamandır düşünüyorum ve epeyce hatalar olurdu. Ama sonra yine de posta zarflarını imzalamak zorunda kaldı ... Zamanına üzüldüm ve birkaç dakika içinde bu işlemi basit yöntemlerle nasıl otomatikleştirebileceğinizi gösterdim. Kısa bir geziden sonra işi 20 dakikada tamamlandı.

Bu derste size minimum zaman harcayarak nasıl hızlı bir şekilde belge (mektup, davetiye) oluşturabileceğinizi göstereceğim. Tanımlanan bu işlem, farklı dil sürümlerinde farklı olarak adlandırılır. Yani Rusça'da "Birleştir" ve İngilizce'de - "Birleştir".

Umarım emeklilik fonundan "mutluluk mektupları", vergi bildirimleri de aynı şekilde oluşturulur :)

Enstrümanlar

Belge oluşturmak için OpenOffice Writer'a ihtiyacımız var. İçinde bir mektup şablonu oluşturacağız. Ayrıca OpenOffice Calc'a da ihtiyacınız olacak. İçinde, örneğin bir partiye davet etmek istediğimiz kişilerin adlarını ve adreslerini içeren bir veritabanı oluşturacağız. OpenOffice paketindeki programlar yerine MS Word ve Excel rahatlıkla kullanılabilir. Veritabanı MS Access'te kolayca bulunabilir. Ve böylece başlayalım.

Veritabanı oluşturma

Bir veritabanı, verilerin sütunlar halinde düzenlendiği ve ilk satırın sütunları adlandırmak için kullanıldığı MS Excel veya OpenOffice Calc'deki bir tablodan başka bir şey değildir. Örneğin, "tam ad", "şehir", "index", "adres" sütunlarını oluşturalım. Verileri girelim ve dosyayı diske kaydedelim.



Outlook adres defteri veya MS Access veritabanı gibi diğer kaynaklar da veritabanları olarak kullanılabilir.

Mektup şablonu oluşturma

Bir mektup şablonunun oluşturulmasıyla durum biraz daha karmaşıktır. Tablodaki (veritabanımızdaki) veriler şablona olduğu gibi ekleneceği için mektup buna göre yazılmalıdır. Adınız veritabanınızdaki aday durumdaysa, bu alanı temyiz başvurusunda kullanmanız pek olası değildir “Sevgili,<ФИО>! " ve “Kime:<ФИО>". İkinci durumda, tam ad biraz sakar görünecektir.

Bir mektup şablonu yazarken, gerçek bir kişiye mektup yazarak başlamanızı öneririm. Kendin yapabilirsin. Ardından, veritabanından alacağınız verileri vurgulayın ve ilgili alanlarla değiştirin. Seçilen metni bir alanla değiştirmeden önce, veritabanındaki alanın başlaması gereken harfe (küçük harf veya büyük harf) dikkat etmenizi öneririm. Tabii ki, hemen alanlar içeren bir şablon oluşturabilirsiniz, ancak daha sonra büyük/küçük harf uyuşmazlığı gibi bazı hataları fark etmeyebilirsiniz.



Zaten yukarıdaki şablonda, tamlama durumunda tam bir ada ve yalnızca bir ad ve soyadı içeren bir alana ihtiyacımız olduğu açıktır. İlk alanla, “Kime”yi “Alıcı” ile değiştirebiliriz ve ardından aday durumdaki tam ad bize mükemmel şekilde uyacaktır. İkinci alan ile her şey biraz daha karmaşık ve veritabanında başka bir sütun oluşturmamız ve uygun verilerle doldurmamız gerekecek. Sonraki derslerden birinde bunu otomatik olarak nasıl yapacağınızı anlatacağım ama şimdilik böyle bir alanımız olduğunu varsayacağız.

Bir alan eklemek ve veritabanına bir şablon bağlamak için aşağıdaki adımları uygulamanız gerekir. OpenOffice Writer'da bir veritabanı seçin



ve "Tanımla" yı tıklayın.



Ardından, bağlı veritabanından istediğiniz konuma bir alan ekleyin. Bunu yapmak için Ctrl + F2 tuşlarına basın veya Ekle menüsünden Alanlar ve Diğer'i seçin. Açılan pencerede "Veritabanları" sekmesini seçin, alan türünde "Posta Birleştirme alanları"nı seçin, veritabanından uygun alanı seçin ve "Ekle"ye tıklayın. Gerçek veritabanı da bu pencerede seçilebilir.



Bir alan eklendikten sonra, mevcut pencereyi kapatmadan sonraki alanla değiştirilecek metni seçin, alanı seçin ve tekrar "Ekle" tuşuna basın. Ve böylece alanların her biri için.

MS Word için durum biraz benzer ve belki de daha uygundur. MS Excel'de bir tablo oluşturduktan sonra MS Word'ü başlatın ve "Mailings" sekmesine gidin. Bu sekmede gerekli üç adımı görebilirsiniz: "Birleştirmeyi başlat", "Belgeyi oluşturma ve alanları ekleme" ve "Bitir". "Sonucu görüntüle" ara adımı da vardır, ancak bu isteğe bağlıdır.

Ve böylece çalışma belgenin seçimi ile başlar. Bunlar mektuplar, çıkartmalar, normal bir Word belgesi olabilir. Ayrıca, bu sürecin tüm aşamalarında size rehberlik edecek olan birleştirme sihirbazını da buradan başlatabilirsiniz. Bir sonraki adım, alıcıyı, yani veritabanını seçmektir. Burada hazır bir veritabanı seçebilir (örneğin, önceki adımda oluşturulan MS Excel tablosu) veya yeni bir liste oluşturabilirsiniz. Liste seçildikten sonra, "Birleştirme alanı ekle", "Alıcı listesini değiştir" vb. butonlar aktif hale gelir. İlgili butonla açılan "Alıcı listesini değiştir" iletişim kutusundan seçim yapabilirsiniz. tüm liste yalnızca birleştirme için gerekli kayıtları içerir.







Alanları eklerken, "Birleştirme alanlarını seç" düğmesini tıklayarak tüm alanları gri renkte vurgulamayı uygun buluyorum. Aksi takdirde, bu tür birçok alan varsa, bunlar metin içinde kaybolabilir.

Ve böylece şablon hazır.

mektup oluşturma

Son aşama harflerin üretilmesidir. OpenOffice'de bunun için "Araçlar" menüsünde "Posta Birleştirme Sihirbazı ..." seçeneğini seçin ve şablonumuzu veritabanıyla birleştirmek için önerilen tüm adımları uygulayın.





Diyalog kutusunda, önerilen 8 noktadan bazı noktaları gerçekleştirmemiz gerekmediğini görüyoruz. Yani belgeyi zaten oluşturduk ve düzenlememize gerek yok, adres bloğunu zaten ekledik. Ama sırayla başlayalım.

İlk olarak, mevcut belgeye göre harfler oluşturduğumuzu seçin ve pencerenin altındaki "İleri" ye tıklayın. İkinci nokta, bu kağıt mektubu mu yoksa e-postayı mı alacağımızı seçmektir. Mektubun bir dosyaya kaydedilmesi için ilkini seçin. Sonrakine tıkla". Üçüncü nokta olarak bize adres bloğu oluşturmamız öneriliyor fakat biz bunu elle oluşturduğumuz için tüm kutuların işaretini kaldırıp bir sonraki adıma geçiyoruz. Burada bir itiraz eklememiz teklif edildi, ancak bizde zaten var, bu yüzden "İleri" ye basıyoruz. Altıncı nokta, belgeyi düzenleyebilir, veritabanından eklenen alanlar ile belgeye bakabilir ve gerekirse bazı alanları hariç tutabilirsiniz.



7. adımda, şablonun veritabanına bağlanması sonucunda oluşturulan dosyaların her birinin düzenlenmesi önerilmektedir. Ve son olarak, 8. adımda, alınan belgelerle ne yapacağınızı seçebilirsiniz. E-posta ile kaydedebilir, yazdırabilir veya gönderebilirsiniz. Bu durumda, tüm belgeleri tek bir dosyaya veya her belgeyi ayrı ayrı kaydedebilirsiniz.

MS Word'de Bul ve Birleştir düğmesi tıklanarak birleştirme işlemi sona erer.



Açılır menüden tüm harflerin yazdırılıp e-posta ile gönderilebileceği açıktır, ancak hepsinin bir dosyaya kaydedilebileceği açık değildir. Kaydetmek için ilk öğeyi seçmelisiniz - "Tek tek belgeleri değiştir". Bu, her yeni mektubun yeni bir sayfada yer alacağı yeni bir belge açacaktır ve burada bu dosya kaydedilebilir.

Çözüm

Bu derste, bir şablona dayalı belgeler oluşturmak için birleştirme aracını nasıl kullanacağınızı öğrendiniz. Eylem sırasını kısaca yazalım:

  1. Tablo işlemcisinde, alanları doldurmak için verilerin alınacağı bir veritabanı oluşturmak gereklidir.
  2. Bir mektup şablonu oluşturmanız gerekir.
  3. Birleştir ve sonucu kaydet.

"Belge doldurma otomasyonu" serisinin önceki yazılarında, uygulamanın kullanıcı arayüzünün nasıl oluşturulacağı, giriş verilerinin doğrulanmasının nasıl organize edileceği ve VBA kodu kullanmadan kelimelerle sayının nasıl alınacağından bahsetmiştim. 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ı

Öncelikle 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 - sıradan 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 koymaya karar verdim. Bu sayfanın iki sütunu vardır: ilki yer imi adlarını içerir (tam olarak Word belgesinde adlandırıldıkları 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 penceresine program kodunu girin.
  • Bir Excel çalışma kitabında, yeni oluşturulan Word şablonundan doldurma prosedürünü çağıran bir 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, 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: "Girdi" - veri giriş sayfası ve "Veritabanı" - girilen tüm belgelerin arşivi.

Şablonlar klasörü, Word belge şablonlarını içerir. Biri, bir yer imi doldurma programı içeren bir şablon, diğeri ise doldurulacak bir form. Şablonu programla birlikte 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 imlerini doldurmaktan 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 imi adı ile değiştirilmesi gereken değer arasındaki yazışma tablosunu 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!

Hepimiz öyle ya da böyle metinlerle uğraşıyoruz. Bazen, örneğin biçimlendirme ile oynamak gibi herhangi bir görev için büyük veya çok büyük olmayan miktarda metin oluşturmaya ihtiyaç duyulur, ancak elde metin yoktur, kendi başınıza yazmak için çok tembeldir. Ne yapalım? Cevap basit: Word'de yerleşik rastgele metin oluşturucuyu kullanın!

Microsoft Word düzenleyicide, özel komutları kullanarak oldukça hızlı ve kolay bir şekilde metin oluşturabilirsiniz. Word 2007'yi kobay olarak kullanacağım.Bu komutlar Word'ün tüm sürümlerinde çalışmalıdır. Size metin oluşturmanın üç yöntemini anlatacağım.

Yöntem 1. Rand () kullanma

Rand() işlevi, yerelleştirilmiş bir metin örneği, 3 cümleden oluşan 3 paragraf ekler. Word'ünüzü açın, imlecinizi yakında bir grup metnin görüneceği yere getirin ve şu komutu girin:

ve Enter'a basın. Rand işlevinin kendisi kaybolacak ve bunun yerine 3 paragraf metin görünecektir:

Ama hepsi bu değil. Çok fazla metne ihtiyacınız varsa, rand işlevini aşağıdaki gibi ek argümanlarla kullanabilirsiniz:

= rand (x, y)

nerede " x"Paragraf sayısı anlamına gelir ve" y"- her paragraftaki cümle sayısı. Örneğin, = rand (20.5) her biri beş cümleden oluşan 20 paragraf ekleyecektir. A = rand (7) her biri 3 cümleden oluşan 7 paragraf ekleyecektir.

Yöntem 2. Lorem () kullanma

Eski güzel Lorem Ipsum'u örnek olarak eklemek için - lorem () işlevini kullanın. Aşağıdaki komutu yazın ve Enter'a basın:

Ve böyle bir sevdo-Latin metni alıyoruz

Lorem () işlevi, rand () gibi ek argümanları da paragraf ve cümle sayısı biçiminde isteyerek kabul eder. Argüman olmadan, işlev varsayılan olarak her biri üç cümleden oluşan 3 paragraf ekler.

Yöntem 3. Rand.old () işlevi

Kullanım önceki komutlara benzer:

= rand.eski ()

ve Enter'a basın.

Rand.old () işlevi, 2003'e kadar ve buna dahil olan eski ofis uyumluluğu için korunur. Uygulama yöntemi önceki ikisi ile aynıdır, sadece metin aynı ifadelerden oluşacaktır "Bu yumuşak Fransız rulolarından biraz daha ye ve biraz çay iç." Bu ifade, bazen yazı tipleriyle çalışmak zorunda kalan herkes tarafından bilinir.

Argümanları ilk iki yöntemde olduğu gibi iletebilirsiniz.

Hepsi bu, metinler oluşturuldu, şimdi bu yumuşak Fransız rulolarından daha fazla yiyebilir ve çay içebilirsiniz :)

Yukarıdaki işlevleri kullanarak metin eklemeyi başardınız mı?