Isi dokumen dalam Microsoft Word menggunakan Python. Bagian 2

Kami menyebarkan dokumen

.
Dalam posting sebelumnya, kami melihat cara mengisi kueri dalam kata menggunakan python. Kali ini akan diperagakan cara mengisi beberapa dokumen kata sekaligus dengan data dari tabel excel.

Sebelum bekerja dengan program ini, kita perlu menyiapkan file excel, yang akan berisi data sumber. Mari kita buat file excel dengan data seperti itu atau gunakan yang sudah jadi:

gambar

Sekarang mari kita beralih ke program.

Karena kita harus membaca file excel, kita perlu mengimpor modul yang sesuai:

import openpyxl 

Selanjutnya, kita perlu membaca tabel dan membaca semua data baris demi baris. Ini akan terlihat seperti ini:

 test=[] wb = openpyxl.load_workbook('zaprosi.xlsx') sheet=wb.get_active_sheet() for row in sheet['B3':'F7']: for cellObj in row: if cellObj.value==None or cellObj.value==" ": continue #print(cellObj.value) test.append(cellObj.value) 

Kami membuat daftar kosong, tempat kami menambahkan nilai dari tabel di masa mendatang. Menambahkan terjadi hanya jika ada entri di dalam sel (tidak batal).

Setelah manipulasi selesai, kami akan menambahkan data yang dikumpulkan ke templat kata:

 doc = DocxTemplate(".docx") context = { 'emitent' : test[0],'address1' : test[1],'' : test[2],'_' : test[3],'director' : test[4] } doc.render(context) doc.save('-final.docx') 

Sebagai hasilnya, kita akan memiliki file kata selesai dengan data dari tabel. Hanya di sini saja, dan ini disebut final-templat. Lalu bagaimana membedakan dokumen satu sama lain?

Mari kita mulai dengan yang sederhana. Untuk menyimpan file dengan nama yang berbeda setiap kali, Anda perlu mengubah yang berikut di akhir kode:

 doc.save(test[x]+'.docx') 

Sekarang file yang disimpan akan memiliki nama perusahaan yang mengirimkan permintaan.

Kesalahan dapat terjadi selama eksekusi program:

gambar

Kesalahan ini disebabkan oleh fakta bahwa nama perusahaan mengandung tanda kutip. Jika Anda menghapus tanda kutip dari tabel excel, file kata akan berhasil disimpan dengan nama Company-1.docx.

Tetap "menduplikasi" dokumen dengan memasukkan data yang tersisa dari tabel.

Semuanya di sini juga sederhana. Kami membuat siklus sesuai dengan data yang dikumpulkan:

 x=0 while x<len(test): doc = DocxTemplate(".docx") context = { 'emitent' : test[x],'address1' : test[x+1],'' : test[x+2],'_' : test[x+3],'director' : test[x+4] } doc.render(context) doc.save(test[x]+'.docx') x+=5 

Di akhir siklus, "lompat" ke nama kolom dengan nama perusahaan sehingga file kata disimpan dengan nama yang benar.

Program sudah siap! Tetap hanya untuk membuat tabel excel dengan perusahaan yang berada dalam layanan.

Unduh program yang sudah selesai di sini .

Unduh tabel excel dengan data uji - di sini .

Templat dokumen kata ada di sini .

--- Perbarui --- 11/08/2019

.
Ditambahkan :
- Templat kata dari respons oleh penerima;
- templat permintaan kata telah diperluas dengan jumlah bidang (posisi direktur);
- sekarang dalam tabel Anda dapat mengisi nama perusahaan dengan tanda kutip,
program akan dicerna;
- saat menyimpan file output permintaan, program menyimpan "indah": direktur perusahaan, yang menambah kejelasan ketika bekerja dengan sejumlah besar file;
- saat menyimpan file respons output, program menyimpan: peserta-direktur-kepada siapa mereka menjawab (karena biasanya peserta dapat menjawab beberapa perusahaan sekaligus dan nama file digandakan).

Unduh program permintaan penerima bantuan - di sini
Unduh program jawaban - di sini
Unduh excel spreadsheet dengan data uji - di sini
Templat kata permintaan penerima - di sini
Templat jawab kata - di sini

Source: https://habr.com/ru/post/id459152/


All Articles