Cara membuat dokumen di word. Exwog - pembuat laporan dari Excel ke Word dengan template

Kita hidup di dunia di mana pengembang PHP harus berinteraksi dengan sistem operasi Windows dari waktu ke waktu. WMI (Antarmuka Manajemen Windows, Antarmuka Manajemen Windows) - salah satu contohnya adalah interaksi dengan Microsoft Office.

Pada artikel ini, kita akan melihat integrasi sederhana antara Word dan PHP: menghasilkan dokumen Microsoft Word berdasarkan kolom input dalam bentuk HTML menggunakan PHP (dan ekstensi Interopnya).

Langkah-Langkah Persiapan

Pertama-tama, mari kita pastikan bahwa kita memiliki lingkungan WAMP dasar yang sudah diatur. Karena Interop hanya ada di Windows, kami memerlukan server Apache dan instalasi PHP untuk digunakan di mesin Windows. Karena itu, saya menggunakan EasyPHP 14.1, yang sangat mudah dipasang dan diatur.

Langkah selanjutnya adalah menginstal Microsoft Office. Versinya tidak terlalu penting. Saya menggunakan Microsoft Office 2013 Pro, tetapi versi Office apa pun yang lebih lama dari 2007 akan berfungsi.

Kita juga perlu memastikan bahwa kita telah menginstal library untuk mengembangkan aplikasi Interop (PIA, Primary Interop Assemblies, Primary Interop Assemblies). Anda dapat menemukan ini dengan membuka Windows Explorer dan pergi ke direktori \assembly , dan di sana kita akan melihat satu set rakitan yang diinstal:

Di sini Anda dapat melihat elemen Microsoft.Office.Interop.Word (digarisbawahi pada tangkapan layar). Ini akan menjadi build yang akan kami gunakan dalam demo kami. Harap beri perhatian khusus pada bidang "Nama Majelis", "Versi" dan "Token kunci publik". Kami akan segera menggunakannya dalam skrip PHP kami.

Direktori ini juga berisi rakitan lain (termasuk seluruh keluarga Office) yang tersedia untuk digunakan dalam program mereka (tidak hanya untuk PHP, tetapi juga untuk VB.net, C#, dll.).

Jika daftar perakitan tidak menyertakan seluruh paket Microsoft.Office.Interop, maka kita perlu menginstal ulang Office dengan menambahkan PIA, atau mengunduh paket secara manual dari situs Microsoft dan menginstalnya. Lihat halaman MSDN ini untuk instruksi lebih rinci.

Komentar Catatan: Hanya distribusi PIA Microsoft Office 2010 yang tersedia untuk diunduh dan diinstal. Versi rakitan dalam paket ini adalah 14.0.0, dan versi 15 hanya tersedia dengan Office 2013.

Terakhir, Anda perlu mengaktifkan ekstensi php_com_dotnet.dll di php.ini dan memulai ulang server.

Sekarang kita bisa beralih ke pemrograman.

bentuk HTML

Karena bagian utama dari contoh ini berada di sisi server, kami akan membuat halaman sederhana dengan formulir yang akan terlihat seperti ini:

Kami memiliki bidang teks untuk nama, sekelompok tombol radio untuk jenis kelamin, penggeser untuk usia, dan area input teks untuk memasukkan pesan, serta tombol "Kirim" yang terkenal.

Simpan file ini sebagai "index.html" di direktori virtual host sehingga dapat diakses di URL seperti http://test/test/interop .

Bagian server

File handler di sisi server adalah tujuan utama dari percakapan kami. Pertama, saya akan memberikan kode lengkap untuk file ini, dan kemudian saya akan menjelaskannya langkah demi langkah.

terlihat = benar; $fn = __DIR__ . "\\template.docx"; $d = $w->Documents->Open($fn); echo "Dokumen terbuka.


"; $flds = $d->Fields; $count = $flds->Count; echo "Dokumen memiliki bidang $count.
"; gema"
    "; $mapping = setupfields(); foreach ($flds sebagai $index => $f) ( $f->Select(); $key = $mapping[$index]; $value = $inputs[$key]; if ($key == "gender") ( if ($value == "(!LANG:m") $value = "Pak."; else $value = "MS."; } if($key=="printdate") $value= date ("Y-m-d H:i:s"); $w->Selection->TypeText($value); echo "!}
  • Menetapkan $index: $key ke $value
  • "; ) gema"
"; echo "Proses selesai!

"; echo "Mencetak, harap tunggu...
"; $d->PrintOut(); sleep(3); echo "Selesai!"; $w->Quit(false); $w=null; function setupfields() ( $mapping = array(); $mapping = "gender"; $mapping = "name"; $mapping = "age"; $mapping = "msg"; $mapping = "printdate"; return $mapping; )

Setelah kami menulis nilai yang diterima dari formulir ke variabel $inputs, dan juga membuat elemen kosong dengan kunci printdate (mengapa kami melakukan ini - kami akan membahasnya nanti), kami beralih ke empat baris yang sangat penting:

$assembly = "Microsoft.Office.Interop.Word, Versi=15.0.0.0, Budaya=netral, PublicKeyToken=71e9bce111e9429c"; $class = "Microsoft.Office.Interop.Word.ApplicationClass"; $w = DOTNET baru($perakitan, $kelas); $w->terlihat = benar;

Manipulator COM PHP membutuhkan kelas yang akan dipakai dalam "perakitan". Dalam kasus kami, kami bekerja dengan Word. Jika Anda melihat tangkapan layar pertama, Anda dapat menuliskan tanda tangan perakitan lengkap untuk Word:

  • “Nama”, “Versi”, “Token Kunci Publik” semuanya diambil dari informasi yang dapat dilihat di “c:\Windows\assembly“ .
  • “Budaya” selalu netral

Kelas yang ingin kita rujuk selalu bernama "nama rakitan" + ".ApplicationClass".

Dengan mengatur dua parameter ini, kita bisa membuat objek bekerja dengan Word.

Objek ini dapat tetap berada di latar belakang, atau kita dapat membawanya ke produksi dengan menyetel atribut visible menjadi true .

Langkah selanjutnya adalah membuka dokumen yang akan diproses dan menulis instance “dokumen” ke variabel $d .

Ada beberapa cara untuk membuat konten berbasis formulir dalam dokumen.

Hal terburuk yang harus dilakukan adalah mengkodekan konten dokumen dalam PHP dan kemudian mengeluarkannya ke dokumen Word. Saya sangat menyarankan untuk tidak melakukan ini karena alasan berikut:

  1. Anda kehilangan fleksibilitas. Setiap perubahan pada file output akan memerlukan perubahan pada kode PHP.
  2. Ini mematahkan pemisahan kontrol dan tampilan
  3. Menerapkan gaya ke konten dokumen (perataan, font, gaya, dll.) dalam skrip akan sangat meningkatkan jumlah baris kode. Mengubah gaya secara terprogram terlalu rumit.

Pilihan lain adalah menggunakan find dan replace. PHP memiliki alat bawaan yang bagus untuk ini. Kita dapat membuat dokumen Word di mana kita menempatkan label dengan pemisah khusus, yang nantinya akan diganti. Misalnya, kita dapat membuat dokumen yang akan berisi cuplikan berikut:

dan dengan bantuan PHP, kita dapat dengan mudah menggantinya dengan isi kolom “Nama” yang diterima dari form.

Ini sederhana, dan menyelamatkan kita dari semua konsekuensi tidak menyenangkan yang kita hadapi dalam metode pertama. Kami hanya perlu memutuskan pembatas yang benar, dalam hal ini kami akhirnya menggunakan template.

Saya merekomendasikan metode ketiga, dan ini didasarkan pada pengetahuan Word yang lebih dalam. Kita akan menggunakan field sebagai placeholder, dan dengan menggunakan kode PHP kita akan langsung mengupdate nilai pada field dengan nilai yang sesuai.

Pendekatan ini fleksibel, cepat, dan konsisten dengan praktik terbaik Word. Dengan itu, Anda juga dapat menghindari pencarian teks lengkap dalam dokumen, yang memiliki efek yang baik pada kinerja. Perhatikan bahwa solusi ini juga memiliki kelemahan.

Word tidak mendukung indeks bernama untuk bidang sejak awal. Bahkan jika kita telah menentukan nama untuk bidang yang dibuat, kita masih perlu menggunakan pengidentifikasi numerik dari bidang ini. Ini juga menjelaskan mengapa kita perlu menggunakan fungsi terpisah (bidang pengaturan) untuk mencocokkan indeks bidang dan nama bidang dari formulir.

Dalam demo ini, kami akan menggunakan dokumen dengan 5 bidang MERGEFIELD. Kami akan menempatkan dokumen template di tempat yang sama dengan script handler kami.

Harap dicatat bahwa bidang tanggal cetak tidak memiliki bidang yang sesuai pada formulir. Itu sebabnya kami menambahkan elemen printdate kosong ke array $inputs. Tanpa ini, skrip akan tetap berjalan dan berjalan, tetapi PHP akan mengeluarkan peringatan bahwa indeks printdate hilang dari larik $inputs.

Setelah mengganti bidang dengan nilai baru, kami mencetak dokumen dengan

$d->Cetak Keluar();

Metode PrintOut mengambil beberapa parameter opsional, dan kami menggunakan bentuk yang paling sederhana. Ini akan mencetak satu salinan dokumen pada printer default yang terpasang pada mesin Windows.

Anda juga dapat menghubungi PrintPreview untuk melihat hasilnya sebelum Anda mencetaknya. Dalam lingkungan yang sepenuhnya otomatis, kami tentu saja akan menggunakan metode PrintOut.

Anda harus menunggu beberapa saat sebelum keluar dari aplikasi Word, karena pekerjaan cetak membutuhkan waktu untuk mengantre. Tanpa delay(3), metode $w->Quit langsung dieksekusi dan pekerjaan tidak dimasukkan ke dalam antrian.

Terakhir, kita panggil $w->Quit(false) , yang menutup aplikasi Word yang dipanggil oleh skrip kita. Satu-satunya parameter yang diteruskan ke metode ini adalah menyimpan file sebelum keluar. Kami telah mengedit dokumen, tetapi kami tidak ingin menyimpannya karena kami membutuhkan template bersih untuk pekerjaan nanti.

Setelah kita selesai dengan kode, kita dapat memuat halaman formulir kita, mengisi beberapa nilai, dan mengirimkannya. Gambar di bawah ini menunjukkan output dari skrip serta dokumen Word yang diperbarui:

Peningkatan kecepatan pemrosesan dan sedikit lebih banyak tentang PIA

PHP adalah bahasa yang diketik secara longgar. Objek COM bertipe Object . Saat menulis skrip, kami tidak memiliki cara untuk mendapatkan deskripsi objek, baik itu aplikasi Word, dokumen, atau bidang. Kami tidak tahu properti apa yang dimiliki objek ini, atau metode apa yang didukungnya.

Ini akan sangat memperlambat kecepatan pengembangan. Untuk mempercepat pengembangan, saya akan merekomendasikan menulis fungsi terlebih dahulu dalam C#, dan kemudian menerjemahkan kode ke dalam PHP. Saya dapat merekomendasikan IDE gratis untuk pengembangan C# yang disebut “#develop”. Anda dapat menemukannya. Saya lebih suka Visual Studio karena #develop lebih kecil, lebih mudah dan lebih cepat.

Migrasi kode C# ke PHP tidak seseram kelihatannya. Mari saya tunjukkan beberapa baris dalam C#:

Word.Application w=Kata baru.Application(); w.Terlihat=benar; String path=Application.StartupPath+"\\template.docx"; Word.Document d=w.Documents.Open(path) sebagai Word.Document; Word.Fields flds=d.Fields; intlen=flds.Hitung; foreach (Word.Field f di flds) ( f.Select(); int i=f.Index; w.Selection.TypeText("..."); )

Anda dapat melihat bahwa kode C# sangat mirip dengan kode PHP yang saya tunjukkan sebelumnya. C# adalah bahasa yang sangat diketik, jadi dalam contoh ini, Anda dapat melihat beberapa operator pemeran, dan Anda juga perlu menentukan tipe untuk variabel.

Dengan menentukan jenis variabel, Anda dapat menikmati kode yang lebih jelas dan pelengkapan otomatis, dan kecepatan pengembangan sangat meningkat.

Cara lain untuk mempercepat pengembangan PHP adalah dengan memanggil makro di Word. Kami melakukan urutan tindakan yang sama, dan kemudian menyimpannya sebagai makro. Makro ditulis dalam Visual Basic, yang juga mudah diterjemahkan ke dalam PHP.

Dan, yang paling penting, dokumentasi Microsoft Office PIA, terutama dokumentasi namespace dari setiap aplikasi Office, adalah referensi paling detail. Tiga aplikasi yang paling banyak digunakan adalah:

  • 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

Kesimpulan

Pada artikel ini, kami menunjukkan cara mengisi dokumen Word dengan data menggunakan pustaka PHP COM dan interoperabilitas Microsoft Office.

Windows dan Office banyak digunakan dalam kehidupan sehari-hari. Mengetahui kekuatan Office/Window dan PHP akan berguna bagi setiap pengembang PHP dan Windows.

Ekstensi PHP COM membuka pintu bagi Anda untuk menggunakan kombinasi ini.

Kami melanjutkan tema bekerja dengan formulir di Word yang kami mulai sebelumnya. Dalam artikel sebelumnya, kami hanya melihat formulir dari perspektif "pengguna yang kuat", yaitu. kami membuat dokumen yang nyaman untuk diisi secara manual. Hari ini, saya ingin mengusulkan perluasan tugas ini dan mencoba menggunakan mekanisme kontrol Konten untuk menghasilkan dokumen.

Sebelum kita turun ke tugas langsung kita, saya ingin mengatakan beberapa patah kata tentang bagaimana data untuk kontrol konten disimpan dalam dokumen Word (saya sengaja akan menghilangkan bagaimana mereka terikat dengan konten dokumen untuk saat ini, tapi saya berharap untuk kembali untuk ini kadang-kadang di artikel berikutnya).

Pertanyaan yang sah adalah apa itu? itemProps1.xml dan komponen serupa? Komponen ini menyimpan deskripsi sumber data. Kemungkinan besar, seperti yang dikandung oleh pengembang, selain file xml yang disematkan dalam dokumen, itu seharusnya menggunakan yang lain, tetapi sejauh ini hanya metode ini yang diterapkan.

Apa yang berguna bagi kita? itemPropsX.xml? Fakta bahwa mereka mencantumkan skema xml (mereka targetNamespace) yang digunakan pada induknya itemX.xml. Ini berarti bahwa jika kami telah menyertakan lebih dari satu xml khusus dalam dokumen, maka untuk menemukan yang tepat, kami perlu menjalankannya itemPropsX.xml komponen dan temukan sirkuit yang diinginkan, dan karena itu yang diinginkan itemX.xml.

Sekarang satu momen lagi. Kami tidak akan menganalisis hubungan antar komponen secara manual dan mencari yang tepat hanya dengan menggunakan API Pengemasan dasar! Sebagai gantinya, kami akan menggunakan Open XML SDK (build-nya tersedia melalui NuGet). Tentu saja, kami tidak mengatakan sepatah kata pun tentang API ini sebelumnya, tetapi untuk tugas kami ini membutuhkan minimum dan semua kode akan cukup transparan.

Nah, perkenalan utama sudah selesai, Anda bisa melanjutkan ke contoh.

Menurut tradisi yang mapan, kami akan mengambil "Laporan Rapat" yang sama dengan yang kami gambar di artikel. Biarkan saya mengingatkan Anda bahwa seperti inilah tampilan template dokumen:

Jadi, XML tempat bidang dokumen terikat

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

Langkah 1. Buat model data

Sebenarnya, tugas kita bukan hanya untuk menghasilkan dokumen, tetapi untuk membuat (setidaknya dalam versi draf) alat yang nyaman untuk digunakan oleh pengembang dan pengguna.

Oleh karena itu, kami akan mendeklarasikan model sebagai struktur kelas C#:

MeetingNotes kelas publik ( MeetingNotes publik() ( Peserta = Daftar baru (); Keputusan = Daftar baru (); ) public string Subject ( get; set; ) public DateTime Date ( get; set; ) public string Secretary ( get; set; ) Public List Peserta ( dapatkan; set; ) Daftar publik Keputusan ( get; set; ) ) public class Keputusan ( public string Problem ( get; set ; ) public string Solution ( get; set; ) public string Bertanggung jawab ( get; set; ) public DateTime ControlDate ( get; set; ) ) publik kelas Peserta ( Nama string publik ( get; set; ) )

Secara umum, tidak ada yang istimewa, kecuali bahwa atribut telah ditambahkan untuk mengontrol serialisasi XML (karena nama dalam model dan XML yang diperlukan sedikit berbeda).

Langkah 2: Buat serial model di atas ke XML

Tugasnya, pada prinsipnya, sepele. Apa yang disebut "ambil XmlSerializer favorit kami dan pergi", jika bukan karena satu tetapi

Sayangnya, di versi Office saat ini, ternyata ada bug, yaitu sebagai berikut: jika di custom xml depan mendeklarasikan namespace utama (yang mana Word harus mengambil elemen untuk ditampilkan), mendeklarasikan lebih banyak lagi, kemudian kontrol Konten yang berulang mulai ditampilkan dengan tidak benar (hanya sebanyak elemen yang ditampilkan seperti yang ada di template itu sendiri - yaitu bagian berulang tidak bekerja).

Itu. Inilah xml yang berfungsi:

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

dan yang ini juga:

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

dan yang ini hilang:

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

Saya mencoba mengirimkan bug ke dukungan Microsoft di Connect , tetapi untuk beberapa alasan saya ditolak akses untuk mengirimkan bug melalui Office. Diskusi di forum MSDN juga tidak membantu.

Secara umum, manuver memutar diperlukan. Jika kami membentuk XML dengan tangan, tidak akan ada masalah - kami akan melakukan semuanya sendiri. Namun, dalam kasus ini, saya benar-benar ingin menggunakan XmlSerializer standar, yang secara default menambahkan beberapa ruang nama ke XML keluaran, bahkan jika ruang nama ini tidak digunakan.

Kami akan melakukan penekanan total output dari ruang nama kami sendiri di XmlSerializer. Benar, pendekatan ini hanya akan berhasil jika dia benar-benar tidak membutuhkannya (jika tidak, mereka akan tetap ditambahkan dan SEBELUM milik kita).

Sebenarnya, seluruh kode (asalkan variabel catatan pertemuan berisi objek tipe MeetingNotes yang telah diisi sebelumnya):

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

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

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

Langkah 3. Kami memasukkan XML yang dihasilkan ke dalam dokumen Word.

Di sini kita melakukan hal berikut:

  • salin template dan buka salinannya
  • temukan xml khusus yang diinginkan di dalamnya (cari berdasarkan namespace “guci: Catatan Rapat”)
  • kami mengganti konten komponen dengan XML kami

File.Copy(templateName, resultDocumentName, true ); menggunakan (var document = WordprocessingDocument.Open(resultDocumentName, true )) ( var xmlpart = document.MainDocumentPart.CustomXmlParts .Single(xmlPart => xmlPart.CustomXmlPropertiesPart.DataStoreItem.SchemaReferences.OfType () .Apa saja(sr => sr.Uri.Nilai == "(!LANG:urn:MeetingNotes"!}

Pada artikel sebelumnya dalam seri "Mengotomatiskan Pengisian Dokumen", saya berbicara tentang cara membuat antarmuka pengguna aplikasi, mengatur validasi input, dan mendapatkan angka dalam kata-kata tanpa menggunakan kode VBA. Pada artikel terakhir ini, kita akan berbicara tentang keajaiban - mentransfer semua nilai yang diperlukan dari buku kerja Excel ke dokumen Word. Biarkan saya menunjukkan kepada Anda hasil akhirnya:

Deskripsi mekanisme

Untuk memulainya, saya akan menjelaskan secara umum dengan tepat bagaimana data akan ditransfer ke dokumen Word. Pertama-tama, kita memerlukan template dokumen Word yang berisi semua markup, tabel, dan bagian teks yang tidak akan berubah. Dalam templat ini, Anda perlu menentukan tempat di mana nilai dari buku kerja Excel akan diganti - cara paling mudah untuk melakukannya adalah dengan bantuan bookmark. Setelah itu, Anda perlu mengatur data Excel sedemikian rupa agar sesuai dengan template Word, dan yang tak kalah pentingnya, tulis prosedur transfer itu sendiri di VBA.

Jadi, hal pertama yang pertama.

Buat Template Dokumen Word

Semuanya sangat sederhana di sini - kami membuat dokumen biasa, mengetik dan memformat teks, secara umum, kami mencapai untuk mendapatkan formulir yang diperlukan. Di tempat-tempat di mana Anda perlu mengganti nilai dari Excel, Anda perlu membuat bookmark. Ini dilakukan dengan cara berikut:

Dengan demikian, Anda perlu membuat semua bookmark, yaitu menandai semua tempat di mana data dari Excel akan dimasukkan. File yang dihasilkan harus disimpan sebagai "MS Word Template" menggunakan item menu "File" -> "Save As...".

persiapan data excel

Untuk kenyamanan, saya memutuskan untuk meletakkan semua data yang perlu ditransfer ke dokumen Word pada lembar kerja terpisah yang disebut Bookmark - bookmark. Lembar ini memiliki dua kolom: yang pertama berisi nama-nama penanda (persis seperti namanya dalam dokumen Word), dan yang kedua berisi nilai yang sesuai yang akan ditransfer.

Beberapa dari nilai ini diperoleh langsung dari lembar entri data, dan beberapa dari tabel tambahan yang terletak di lembar Dukungan. Pada artikel ini, saya tidak akan menganalisis rumus yang menghitung nilai yang diinginkan, jika ada yang tidak jelas, ajukan pertanyaan di komentar.

Pada tahap ini, penting untuk menentukan dengan benar semua nama bookmark - kebenaran transfer data tergantung pada ini.

Prosedur pemindahan

Tapi ini yang paling menarik. Ada dua opsi untuk mengeksekusi kode migrasi data:

  • Kode dieksekusi dalam buku kerja Excel, data diteruskan ke Word satu nilai pada satu waktu dan segera ditempatkan di dokumen.
  • Kode dieksekusi dalam dokumen Word terpisah, semua data ditransfer dari Excel dalam satu batch.

Dari sudut pandang kecepatan eksekusi, terutama dengan sejumlah besar bookmark, opsi kedua terlihat jauh lebih menarik, tetapi membutuhkan tindakan yang lebih kompleks. Itu yang saya pakai.

Inilah yang perlu dilakukan:

  • Buat templat dokumen Word berkemampuan makro. Template ini akan berisi kode VBA yang dapat dieksekusi.
  • Dalam template yang dibuat, Anda perlu menempatkan program yang ditulis dalam VBA. Untuk melakukan ini, saat mengedit template, tekan kombinasi tombol Alt + F11 dan masukkan kode program di jendela editor Visual Basic yang terbuka.
  • Di buku kerja Excel, tulis kode yang memanggil prosedur pengisian dari templat Word yang baru dibuat.

Saya tidak akan memberikan teks prosedur dalam artikel - itu dapat dengan mudah dilihat di file FillDocument.dotm yang terletak di folder Template di arsip contoh.

Bagaimana Anda bisa menggunakan semua ini untuk memecahkan masalah khusus Anda?

Saya mengerti bahwa dalam kata-kata semuanya terlihat sangat sederhana, tetapi apa yang terjadi dalam praktik? Saya sarankan Anda hanya menggunakan opsi yang sudah jadi. Unduh arsip dengan contoh, di buku kerja Excel, tekan kombinasi tombol Alt + F11 untuk membuka editor Visual Basic dan membaca semua komentar saya di program. Untuk mengubah program sesuai dengan kebutuhan Anda, Anda hanya perlu mengubah nilai beberapa konstanta, mereka ditempatkan di awal program. Anda dapat dengan bebas menyalin seluruh teks program ke dalam proyek Anda.

Struktur arsip

Arsip yang dilampirkan pada artikel ini berisi beberapa file.

File utama adalah buku kerja Excel yang disebut "Hasilkan Konfirmasi". Ada 4 lembar kerja dalam buku kerja ini, yang hanya dua yang ditampilkan: "Input" - lembar entri data dan "Database" - arsip semua dokumen yang dimasukkan.

Folder Template berisi template dokumen Word. Salah satunya adalah template yang berisi program pengisian bookmark, dan yang kedua adalah formulir untuk diisi. Anda dapat menggunakan template dengan program tanpa perubahan, tetapi formulir yang harus diisi, tentu saja, harus diubah sesuai dengan kebutuhan Anda.

Bagaimana cara mengerjakan ulang contoh "untuk diri sendiri"?

  1. Siapkan template dokumen Word untuk diselesaikan. Buat semua bookmark yang diperlukan di dalamnya dan simpan sebagai "templat MS Word".
  2. Salin file FillDocument.dotm dari arsip yang dilampirkan pada artikel ini ke folder dengan template yang sudah disiapkan. File ini bertanggung jawab untuk mengisi bookmark template, dan tidak ada yang perlu diubah di dalamnya.
  3. Siapkan buku kerja Excel untuk entri data. Terserah Anda untuk memutuskan apakah itu akan memiliki antarmuka pengguna "lanjutan" dan melakukan berbagai perhitungan rumit. Hal utama adalah itu berisi lembar kerja dengan tabel korespondensi antara nama bookmark di templat Word dan nilai yang akan diganti.
  4. Masukkan kode program VBA dari file sampel ke dalam buku kerja yang telah disiapkan. Ganti semua konstanta sesuai dengan proyek Anda.
  5. Tes untuk operasi yang benar.
  6. Nikmati secara aktif!

SEBUAH, nama belakang di kolom B dan profesi di kolom C.

2. Buat dokumen kata (.doc atau .docx)


(SEBUAH), (B) dan (C).

(SEBUAH), (B) dan (C) (SEBUAH)- nama, (B)- nama keluarga, (C)- profesi.

Pengaturan program.

3. Pilih jalur untuk file dan folder


Pilih

4. Atur lembar dan baris data yang diinginkan


lembar data file Excel

Baris data file Excel lembar data file Excel

1 .

Jika Anda ingin semua lembar dan/atau baris file excel Anda dengan data untuk berpartisipasi dalam pembentukan dokumen, klik tombol yang sesuai di sebelah kanan dengan keterangan angka(tulisannya akan berubah menjadi Semua).

5. Atur templat nama untuk file kata baru


Atur templat nama untuk file kata baru:

Templat nama file kata baru adalah templat untuk nama dokumen baru (file kata) yang dihasilkan oleh program. Di sini, templat nama berisi nama-nama kolom file excel, dibingkai oleh kurung kurawal: (SEBUAH) dan (B). Saat membuat dokumen baru, program akan menggantikan semua (SEBUAH) dan (B) nilai sel yang sesuai dari file excel - ini akan menjadi nama dokumen baru (file kata).

Anda dapat mengatur karakter perbatasan Anda sendiri di tab Pengaturan program.

6. Klik "Hasilkan"


Klik tombol Menghasilkan dan kemajuan akan muncul di layar. Dokumen (file kata) akan dibuat persis seperti banyak baris file excel yang terlibat dalam pembentukan.

7. Semuanya


Semua dokumen (file kata) telah dibuat dan terletak di folder yang ditentukan dalam Folder untuk menyimpan file kata baru. Semuanya:)

Exwog- pembuat laporan template dari excel ke word

Pembuat file Word gratis dengan templat (file Word) berdasarkan data file Excel

Bekerja pada Mac OS, Windows dan Linux

Memungkinkan Anda untuk mengatur nama file kata baru yang dihasilkan

Memungkinkan Anda mengatur lembar dan baris data yang diperlukan

Memungkinkan Anda mengatur karakter batas untuk nama kolom Excel

Mudah digunakan

Simpan data Anda dalam format Excel (.xls dan .xlsx) dan hasilkan file Word (.doc dan .docx) dalam beberapa klik :)


Bagaimana itu bekerja?

Lihatlah file excel Anda


Dalam contoh ini, file excel berisi informasi tentang klien. Setiap baris sesuai dengan klien tertentu. Nama ada di kolom SEBUAH, nama belakang di kolom B dan profesi di kolom C.

Klik untuk melihat

Membuat dokumen kata (.doc atau .docx)


Klik untuk melihat

Buat "templat" (file kata) untuk menghasilkan dokumen baru (file kata). Di sini teks "templat" berisi nama-nama kolom file excel, dibingkai oleh kurung kurawal: (SEBUAH), (B) dan (C).

Program akan menghasilkan dokumen baru sesuai dengan "templat" menggantikan semua (SEBUAH), (B) dan (C) nilai sel yang sesuai dari file excel: (SEBUAH)- nama, (B)- nama keluarga, (C)- profesi.

Anda juga dapat mengatur karakter perbatasan Anda sendiri di tab Pengaturan program.

Pilih jalur untuk file dan folder


Pilih jalur untuk file dan folder (tombol berlabel Pilih). Dalam program, Anda menentukan jalur berikut:

File Excel dengan data (*.xls, *.xlsx)- ini adalah jalur ke file excel Anda dengan data (informasi pelanggan);

File templat Word (*.doc, *.docx) adalah jalur ke "templat" Anda (file kata yang dibuat pada langkah sebelumnya);

Folder untuk menyimpan file kata baru- ini adalah jalur ke folder tempat program akan menyimpan dokumen yang baru dibuat.

Klik untuk melihat

Atur lembar dan baris data yang diinginkan


Klik untuk melihat

Atur jumlah lembar dan baris file excel Anda dengan data (informasi tentang klien) yang ingin Anda buat dokumennya:

lembar data file Excel- jumlah lembar file excel Anda yang akan terlibat dalam pembentukan dokumen baru;

Baris data file Excel- nomor baris lembar (lembar ditentukan dalam lembar data file Excel) dari file excel Anda yang akan terlibat dalam pembentukan dokumen baru. Berdasarkan data dari setiap baris yang ditentukan, dokumen terpisah (file kata) akan dibuat.

Penomoran lembaran dan garis dalam program dimulai dengan 1 .