使用Python制作WORD報告

? ? ?作者:大鄧
? ? ?來源:大鄧和他的Python

使所有這一切成為可能的包叫做?
docx-mailmerge。它是一個成熟的包,可以解析MS Word docx文件,找到?合并字段?并將您需要的任何值填充給它們。該包還支持一些輔助函數(shù),用于填充表并生成具有多個分頁符的單個文件。我知道標準的Word方法是將此進程稱為?mailmerge?,但本文中的這個?“mailmerge”?可以是一個有用的模板系統(tǒng),可以用于更復雜的解決方案,而不僅僅是填充文檔中的?名稱和地址。安裝
docx-mailmerge?需要依賴?lxml?,所以需要先安裝lxml,再安裝 docx-mailmergepip install lxml
pip install docx-mailmerge為了使docx-mailmerge正常工作,您需要創(chuàng)建標準Word文檔,并定義適當?shù)?
合并字段?。以下示例適用于Word 2016.其他版本的Word應該類似。實際上花了我一段時間來弄清楚這個過程,但是一旦你做了幾次,這很簡單。啟動Word并創(chuàng)建基本文檔結(jié)構(gòu)。然后將光標放在應插入?數(shù)據(jù)的位置,并選擇插入 - > 域
單擊確定后,您應該在Word文檔中看到類似這樣的內(nèi)容:<< From >>。您可以繼續(xù)創(chuàng)建包含所有必填字段的文檔。

創(chuàng)建Word文檔后,填充字段值是一項很簡單的操作。
from mailmerge import MailMerge
import datetime
template = "PracticalPython.docx"我們的?PracticalPython.docx?文件可以看做是用來給大家群發(fā)新年祝福郵件模板。

下面我們先看看docx文檔中有哪些合并字段
document = MailMerge(template)
print(document.get_merge_fields()){'From', 'date', 'FromUserName', 'To', 'ToUserName'}我們發(fā)現(xiàn)?PracticalPython.docx?文檔中有我們上圖郵件模板中設(shè)計的幾個?合并字段,如?From, date, FromUserName, To, ToUserName?。下面我們對這幾個變量進行填充。
document.merge(
? ?From='[email protected]',
? ?FromUserName='大鄧',
? ?To = '[email protected]',
? ?ToUserName='關(guān)注者的昵稱',
? ?date='{:%d-%b-%Y}'.format(datetime.date.today())
)
#輸出的docx文件
document.write('output.docx')這是簡單的Word文檔填充效果

生成模板時的另一個常見需求是有效地填充值表格中的值。在我們的示例中,我們可以在包含客戶購買歷史的信件上附上展覽。在完成模板時,我們不知道要包含多少行,并且?
每個字段?的填充將會非常快。使用merge_rows可以使表格填充更容易。在本部分構(gòu)建模板,請創(chuàng)建一個包含1行的標準Word表,并將字段插入相應的列中。無需特殊格式。它應該看起來像這樣:
document2 = MailMerge('purchasehistory.docx')
sales_history = [{
? ?'prod_desc': 'Red Shoes',
? ?'price': '$10.00',
? ?'quantity': '2500',
? ?'total_purchases': '$25,000.00'}, {
? ?'prod_desc': 'Green Shirt',
? ?'price': '$20.00',
? ?'quantity': '10000',
? ?'total_purchases': '$200,000.00'}, {
? ?'prod_desc': 'Purple belt',
? ?'price': '$5.00',
? ?'quantity': '5000',
? ?'total_purchases': '$25,000.00'}]
document2.merge_rows('prod_desc', sales_history)
document2.write('output-table.docx')最終結(jié)果是每行填充了我們需要的值,并保留了我們在模板文檔中定義的默認表格式:
◆?◆?◆ ?◆?◆
長按二維碼關(guān)注我們
數(shù)據(jù)森麟公眾號的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以掃描下方管理員二維碼,進群前一定要關(guān)注公眾號奧,關(guān)注后讓管理員幫忙拉進群,期待大家的加入。
管理員二維碼:
評論
圖片
表情
