PHP geliştiricilerinin etkileşim kurmak zorunda olduğu bir dünyada yaşıyoruz. işletim sistemi Pencereler. WMI (Windows Yönetim Arayüzü) Windows denetimleri) - böyle bir örnek, Microsoft Office ile etkileşimdir.

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ı

Her şeyden önce, temel bir WAMP ortamının kurulduğundan emin olalım. Interop yalnızca Windows'ta mevcut olduğundan, Apache sunucusu ve PHP kurulumu şuraya konuşlandırıldı: Windows makinesi. Bu nedenle, kurulumu ve kurulumu son derece kolay olan EasyPHP 14.1 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 Interop uygulamasını (PIA, Primary Interop Assemblies, Primary Interop Assemblies) geliştirmek için kitaplıklar kurduğumuzdan da emin olmamız gerekiyor. Bunu Windows Gezgini'ni açıp dizine giderek öğrenebilirsiniz. \assembly , ve orada bir dizi kurulu derleme görmeliyiz:

Burada Microsoft.Office.Interop.Word öğesini (ekran görüntüsünde altı çizili) görebilirsiniz. Bu, demomuzda kullanacağımız yapı 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, aynı zamanda 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 web sitesinden manuel olarak indirip yüklememiz gerekir. Daha ayrıntılı talimatlar için bu MSDN sayfasına bakın.

Yorum Not: İndirme ve kurulum için yalnızca Microsoft Office 2010 PIA dağıtımı mevcuttur.Bu paketteki derleme 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 geçebiliriz.

HTML formu

Bu örneğin ana kısmı sunucu tarafında olduğu için, aşağıdaki gibi görünecek bir form ile basit bir sayfa oluşturacağız:

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

http://test/test/interop gibi bir URL'den erişilebilmesi için bu dosyayı sanal ana bilgisayar dizininde "index.html" olarak kaydedin.

Sunucu bölümü

Sunucu tarafındaki işleyici dosyası, konuşmamızın ana hedefidir. Öncelikle bu dosyanın tam kodunu vereceğim, 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->Fields; $count = $flds->Count; echo "Belgede $count alanları var.
"; Eko "
    "; $mapping = setupfields(); foreach ($flds as $index => $f) ( $f->Select(); $anahtar = $eşleme[$index]; $değer = $girişler[$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 atama: $değerine $anahtar
  • "; ) Eko "
"; echo "İşleme tamamlandı!

"; echo "Yazdırılıyor, lütfen bekleyin...
"; $d->PrintOut(); sleep(3); echo "Bitti!"; $w->Quit(yanlış); $w=null; function setupfields() ( $eşleme = dizi(); $eşleme = "gender"; $mapping = "name"; $mapping = "yaş"; $mapping = "msg"; $mapping = "printdate"; return $mapping; )

Formdan aldığımız 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:

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

PHP'nin COM manipülatörü, sınıfın "montaj" içinde 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", "Public Key Token", "c:\Windows\assembly" içinde görüntülenebilen bilgilerden alınmıştır.
  • “Kültür” her zaman tarafsızdır

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

Bu iki parametreyi ayarlayarak, Word ile çalışacak bir nesne elde edebiliriz.

Bu nesne arka planda kalabilir veya görünür özniteliği true olarak ayarlayarak onu üretime getirebiliriz.

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

Bir belgede form tabanlı 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ği kaybedersiniz. Çı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 araçlara sahiptir. Daha sonra değiştirilecek özel ayırıcılarla etiketleri yerleştirdiğimiz bir Word belgesi oluşturabiliriz. Örneğin, aşağıdaki parçacığı içerecek bir belge oluşturabiliriz:

ve PHP yardımıyla formdan aldığımız “Ad” alanının içeriğini kolayca değiştirebiliyoruz.

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 kalıp kullanıyoruz.

Üçüncü yöntemi öneriyorum ve bu daha derin bir Word bilgisine 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. Bununla birlikte, performans üzerinde iyi bir etkisi olan belgede tam metin aramasını da önleyebilirsiniz. Bu çözümün de dezavantajları olduğunu unutmayın.

Word, en başından beri alanlar için adlandırılmış dizinleri desteklemiyordu. Oluşturulan alanlar için isimler belirtmiş olsak bile yine de bu alanların sayısal tanımlayıcılarını kullanmamız gerekiyor. Bu ayrıca, formdaki alan dizini ve alan adını eşleştirmek için neden ayrı bir işlev (kurulum alanları) kullanmamız gerektiğini de açıklar.

Bu demoda 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 yüzden $inputs dizisine boş bir printdate elemanı ekledik. Bu olmadan, komut dosyası çalışmaya ve çalışmaya devam eder, ancak PHP, $inputs dizisinde printdate dizininin eksik olduğuna dair bir uyarı verir.

Alanları yeni değerlerle değiştirdikten sonra belgeyi yazdırıyoruz.

$d->Yazdır();

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

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

Yazdırma işinin kuyruğa alınması zaman aldığından Word uygulamasından çıkmadan önce bir süre beklemeniz gerekir. delay(3) olmadan, $w->Quit yöntemi hemen yürütülür ve iş kuyruğa alınmaz.

Son olarak, komut dosyamız tarafından çağrılan Word uygulamasını kapatan $w->Quit(false) öğesini çağırırız. Yönteme iletilen tek parametre, çıkmadan önce dosyayı kaydetmektir. 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:

Geliştirilmiş işlem hızı ve PIA hakkında biraz daha fazlası

PHP gevşek 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ı alma yolumuz 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. Onu bulabilirsin. #develop daha küçük, daha kolay 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(path) olarak Word.Document; Word.Fields flds=d.Fields; intlen=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 görebilirsiniz. C# kesin olarak yazılan bir dildir, bu nedenle bu örnekte birkaç yayınlama operatörü görebilirsiniz ve ayrıca değişkenler için bir tür belirtmeniz gerekir.

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

PHP geliştirmeyi 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'un Office PIA belgeleri, özellikle her bir Office uygulamasının ad alanı belgeleri, en ayrıntılı referanstır. 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.

Daha önce başladığımız Word'de formlarla çalışma temasına devam ediyoruz. Önceki makalelerde, formlara yalnızca “yetkili kullanıcı” perspektifinden baktık, yani. manuel doldurmaya uygun belgeler oluşturduk. Bugün, bu görevi genişletmeyi ve belgeler oluşturmak için İçerik kontrol mekanizmasını kullanmayı denemeyi önermek istiyorum.

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

meşru 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 tasarlandığı gibi, belgeye gömülü xml dosyalarına 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 eklediysek, o zaman doğru olanı bulmak için, içinden geçmemiz gerektiği anlamına gelir. itemPropsX.xml bileşenleri ve istenen devreyi ve dolayısıyla istenen devreyi bulun itemX.xml.

Şimdi bir an daha. Bileşenler arasındaki ilişkileri manuel olarak analiz etmeyeceğiz ve yalnızca temel Packaging API'yi kullanarak doğru olanları aramayacağız! Bunun yerine, Açık XML SDK'sını kullanacağız (yapıları NuGet aracılığıyla edinilebilir). Tabii ki, bu API hakkında daha önce tek kelime etmedik, ancak görevimiz için minimum gerektirir ve tüm kodlar oldukça şeffaf olacaktır.

Eh, ana giriş yapıldı, örneğe geçebilirsiniz.

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

Ve böylece, 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şturun

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 ( public 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; ) genel Liste Katılımcılar ( get; set; ) genel Liste Kararlar ( get; set; ) ) public class Karar ( 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ı ( public string Name ( 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” denilen şey ancak

Ne yazık ki, içinde şimdiki versiyonu Office, görünüşe göre, aşağıdaki gibi bir hata var: eğer özel xml'de önceki ana ad alanını (Word'ün görüntülemek için öğeleri alması gereken), biraz daha bildirin, 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 iş).

Şunlar. İşte çalışan xml:

< 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" />

ve bu gitti:

< 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 bir nedenden dolayı Office aracılığıyla hata gönderme erişimim reddedildi. MSDN forumunda bir tartışma da yardımcı olmadı.

Genel olarak, gerekli dolambaçlı manevra. XML'i elle oluştursaydık 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 gerçekten onlara ihtiyacı yoksa işe yarayacaktır (aksi takdirde yine de eklenecekler ve bizden ÖNCE).

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

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

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

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

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

Burada şunları yapıyoruz:

  • şablonu kopyalayın ve kopyayı açın
  • içinde istediğiniz özel xml'yi bulun (ad alanına göre arayın “urn:Toplantı Notları”)
  • bileşenin içeriğini XML'imizle değiştiriyoruz

File.Copy(şablonAdı, sonuçBelgeAdı, true ); kullanarak (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)"!}

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

Microsoft Word düzenleyicide, özel komutları kullanarak 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 metnin yakında 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ıdır. Örneğin, =rand(20.5) her biri beş cümleden oluşan 20 paragraf ekleyecektir. ANCAK =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 bu tamamen Latince metni alıyoruz

lorem() işlevi, birkaç paragraf ve cümle biçimindeki Rand() gibi ek argümanları da kolayca kabul eder. Argüman olmadan, işlev varsayılan olarak her biri 3 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 dahil olmak üzere eski ofisle uyumluluk için bırakılmıştır. Uygulama yöntemi önceki ikisiyle aynıdır, yalnızca metin aynı ifadelerden oluşacaktır "Bu yumuşak Fransız rulolarından daha fazla ye ve ç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 ekleyebildiniz mi?

Bir keresinde, olimpiyat sonuçlarını özetledikten sonra, katılımcıların geçilen (veya geçilmeyen) konuların sonuçlarını içeren mektuplar göndermeleri gerektiğinde, kızın oturduğunu ve sınav sonuçlarına girdiğini fark ettim, öğrencinin adı ve diğer bilgileri elleriyle mektup şablonuna Önünde, Excel'den isimleri ve notları olan birkaç sayfa vardı. Kopyala-Yapıştır, Ctrl + C - Ctrl + V, tam adı adaydan tam duruma aktarır ve bu nedenle, üç veri sayfasının ilkinin yarısı ile çalışma zaten yapılmıştır. Sizce ne kadar süre oturup verileri kopyalayabilir ve ardından 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 sürecin basit yöntemlerle nasıl otomatikleştirilebileceğini gösterdim. Kısa bir geziden sonra işi 20 dakikada tamamlandı.

Bu derste size minimum sürede nasıl hızlı bir şekilde belge (mektup, davetiye) oluşturabileceğinizi göstereceğim. AT farklı versiyonlar dillerde, açıklanan bu işleme farklı denir. Yani Rusça'da "Birleştir" ve İngilizce'de - "Birleştir".

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

Aletler

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, "ad", "şehir", "posta kodu", "adres" sütunlarıyla başlayalım. Verileri girin ve dosyayı diske kaydedin.



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

Bir mektup şablonu oluşturun

Bir mektup şablonunun oluşturulmasıyla durum biraz daha karmaşıktır. Tablodaki veriler (veritabanımız) şablonda olduğu gibi değiştirileceğinden, harf buna göre yazılmalıdır. Tam adınız veritabanınızdaki aday durumdaysa, bu alanı temyizde kullanamazsınız “Sevgili,<ФИО>!" ve "Kime:<ФИО>". İkinci durumda, tam ad biraz sakar görünecektir.

Bir mektup şablonu oluştururken, bazılarına bir mektup yazarak başlamanızı öneririm. gerçek kişi. Kendine yapabilirsin. Ardından, veritabanından alacağınız verileri vurgulayın ve bunları uygun alanlarla değiştirin. Seçilen metni bir alanla değiştirmeden önce, veritabanındaki alanın hangi harfle başlaması gerektiğine (küçük harf veya büyük harf) dikkat etmenizi öneririm. Tabii ki, alanlar ile hemen bir şablon oluşturabilirsiniz, ancak daha sonra durumlarda tutarsızlıklar gibi bazı gafları fark etmeyebilirsiniz.



Zaten yukarıdaki şablonda, genel durumda tam bir ada ve yalnızca ilk ve ikinci adı 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şıktır ve veritabanında başka bir sütun oluşturmamız ve uygun verilerle doldurmamız gerekecek. Aşağıdaki derslerden birinde size bunu otomatik olarak nasıl yapacağınızı anlatacağım, ancak şimdilik böyle bir alanımız olduğunu varsayacağız.

Bir alan eklemek ve şablonu veritabanına bağlamak için aşağıdaki işlem sırasını gerçekleştirmelisiniz. OpenOffice Writer'da bir veritabanı seçin



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



Ardından, bağlı veritabanındaki alanı doğru yere yerleştirin. Bunu yapmak için Ctrl + F2 tuşlarına basın veya "Ekle" menüsünden "Alanlar" ve "Diğer" öğelerini 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. Veritabanının kendisi de 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"ye tıklayı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 "Mailouts" sekmesine gidin. Bu sekmede, gerekli üç adımı görebilirsiniz: "Birleştirmeyi başlat", "Belgeyi oluştur ve alanları ekle" ve "Tamamla". Ayrıca "Sonucu görüntüle" ara adımı da vardır, ancak bu isteğe bağlıdır.

Ve böylece çalışma bir belgenin seçimi ile başlar. Harfler, çıkartmalar, normal bir Word belgesi olabilir. Ayrıca, süreçteki tüm adımlarda size rehberlik edecek olan birleştirme sihirbazını burada çalıştırabilirsiniz. Bir sonraki adım, alıcıyı, yani veritabanını seçmektir. Burada hazır bir veritabanı seçebilir (örneğin, önceki aşamada oluşturulan MS Excel tablosu) veya yeni bir liste oluşturabilirsiniz. Liste seçildikten sonra “Birleştirme alanı ekle”, “Alıcı listesini düzenle” vb. butonlar aktif hale gelir.İlgili düğme ile açılan “Alıcı listesini düzenle” iletişim kutusundan tüm listeden sadece Birleştirme için gerekli kayıtlar.







Alanları eklerken, "Alanları Birleştir" düğmesine 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.

Harf üretimi

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ı ile birleştirmek için önerilen tüm adımları izleyin.





Diyalog kutusunda, önerilen 8 noktadan bazı noktaları gerçekleştirmemiz gerekmediğini görüyoruz. Bu yüzden belgeyi zaten oluşturduk ve düzenlememize gerek yok, ayrıca adres bloğunu da ekledik. Ama sırayla gidelim.

İlk olarak, mevcut belgeye göre harfler oluşturduğumuzu seçiyoruz ve pencerenin alt kısmındaki "İleri" ye tıklıyoruz. İkinci nokta ise bu kağıt mektubu mu yoksa e-postayı mı alacağız. Mektubun bir dosyaya kaydedilmesi için ilkini seçin. Sonrakine tıkla". Üçüncü paragrafta bize bir adres bloğu oluşturmamız öneriliyor ancak biz onu 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 tıklayın. Altıncı paragrafta 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" butonu tıklanarak birleştirme işlemi tamamlanır.



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çin - "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 zaten 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. Elektronik 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ştirmeyi gerçekleştirin ve sonucu kaydedin.

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)- uzmanlık alanı.

Ayarlar programlar.

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


Seçme

4. İstenen 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, sağda başlığı bulunan ilgili düğmeyi tıklayın. sayılar(yazıtı olarak değişecektir Herşey).

5. Yeni sözcük dosyaları için ad şablonunu ayarlayın


Yeni sözcük dosyaları için ad şablonunu ayarlayın:

Yeni kelime dosyaları adları şablonu program tarafından oluşturulan yeni belgelerin (kelime dosyaları) adları için bir şablondur. Burada ad şablonu, Excel dosyasının küme parantezleriyle çerçevelenmiş sütunlarının 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 kendi sınır karakterlerinizi ayarlayabilirsiniz Ayarlar programlar.

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


Düğmeye bas üret ve ilerleme ekranda görünecektir. Belgeler (kelime dosyaları) tam olarak excel dosyasının birçok satırı formasyona dahil olacak şekilde oluşturulacaktır.

7. Her şey


Tüm belgeler (kelime dosyaları) oluşturulmuştur ve aşağıda belirtilen klasörde bulunmaktadır. Yeni kelime dosyalarının kaydedileceği klasör. Her şey:)

Exwog- excel'den word'e şablon rapor oluşturucu

Excel dosya verilerine dayalı şablona göre ücretsiz Word dosyası oluşturucu (Word dosyası)

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

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

Gerekli verilerin sayfalarını ve satırlarını ayarlamanıza izin verir

Excel sütun adları için kenarlık karakterleri belirlemenizi sağlar

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ı istemciler hakkında bilgi içerir. Her satır belirli bir müşteriye karşılık gelir. İsimler bir sütunda 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 çerçevelenmiş sütunlarının adlarını içerir: (A), (B) ve (C).

Program, "şablona" göre yeni belgeler oluşturacaktır. (A), (B) ve (C) excel dosyasından karşılık gelen hücre değerleri: (A)- isim, (B)- soyadı, (C)- uzmanlık alanı.

Sekmede kendi sınır karakterlerinizi de 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ı belirtirsiniz:

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

Word şablon dosyası (*.doc, *.docx)"ş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

İstenilen verilerin sayfalarını ve satırlarını ayarlayın


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

Üzerinde belge oluşturmak istediğiniz verilerle (istemciler hakkında bilgi) excel dosyanızın sayfa ve satır sayısını ayarlayın:

Excel dosyası veri sayfaları- yeni belgelerin oluşturulmasında yer alacak 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şumunda yer alacak olan excel dosyanızın. Belirtilen her satırın verilerine dayanarak ayrı bir belge (kelime dosyası) oluşturulacaktır.

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