Python制作WORD報(bào)告

實(shí)際上對(duì)于用戶來(lái)說(shuō),創(chuàng)建所需的模板會(huì)更加簡(jiǎn)單骚腥,該模板支持Word中所需的所有自定義格式敦间,而不是嘗試使用HTML + CSS。幸運(yùn)的是束铭,有一個(gè)庫(kù)支持在python中進(jìn)行MS Word 郵件合并廓块。這種方法的優(yōu)點(diǎn)是可以在任何系統(tǒng)上運(yùn)行 - 即使沒(méi)有安裝Word。 背景使所有這一切成為可能的包叫做 docx-mailmerge契沫。它是一個(gè)成熟的包带猴,可以解析MS Word docx文件,找到 合并字段 并將您需要的任何值填充給它們懈万。該包還支持一些輔助函數(shù)拴清,用于填充表并生成具有多個(gè)分頁(yè)符的單個(gè)文件。我知道標(biāo)準(zhǔn)的Word方法是將此進(jìn)程稱為 mailmerge 钞速,但本文中的這個(gè) “mailmerge” 可以是一個(gè)有用的模板系統(tǒng)贷掖,可以用于更復(fù)雜的解決方案,而不僅僅是填充文檔中的 名稱和地址渴语。

安裝

docx-mailmerge 需要依賴 lxml 苹威,所以需要先安裝lxml,再安裝 docx-mailmerge

pip install lxmlpip 
install docx-mailmerge

Word合并字段為了使docx-mailmerge正常工作驾凶,您需要?jiǎng)?chuàng)建標(biāo)準(zhǔn)Word文檔牙甫,并定義適當(dāng)?shù)?合并字段 掷酗。以下示例適用于Word 2016.其他版本的Word應(yīng)該類似。實(shí)際上花了我一段時(shí)間來(lái)弄清楚這個(gè)過(guò)程窟哺,但是一旦你做了幾次泻轰,這很簡(jiǎn)單。啟動(dòng)Word并創(chuàng)建基本文檔結(jié)構(gòu)且轨。然后將光標(biāo)放在應(yīng)插入 數(shù)據(jù)的位置浮声,并選擇插入 - >文檔部件 - > 域


從“字段”對(duì)話框中旋奢,從“字段名稱”列表中選擇“MergeField”選項(xiàng)泳挥。在“字段名稱”中,輸入字段所需的名稱至朗。在這種情況下屉符,我們使用的是商業(yè)名稱。
單擊確定后锹引,您應(yīng)該在Word文檔中看到類似這樣的內(nèi)容:<< From >>矗钟。您可以繼續(xù)創(chuàng)建包含所有必填字段的文檔。

image

簡(jiǎn)單的合并

創(chuàng)建Word文檔后嫌变,填充字段值是一項(xiàng)很簡(jiǎn)單的操作吨艇。

from mailmerge import MailMerge
import datetime

template = "PracticalPython.docx"

我們的 PracticalPython.docx 文件可以看做是用來(lái)給大家發(fā)祝福郵件模板。

下面我們先看看docx文檔中有哪些合并字段

document = MailMerge(template)

print(document.get_merge_fields())
{'Date', 'FromUserName', 'From', 'To', 'ToUserName'}

我們發(fā)現(xiàn) PracticalPython.docx 文檔中有我們上圖郵件模板中設(shè)計(jì)的幾個(gè) 合并字段,如 From, date, FromUserName, To, ToUserName 初澎。下面我們對(duì)這幾個(gè)變量進(jìn)行填充秸应。

document.merge(
    From='1008611@qq.com',
    FromUserName='羋小米',
    To = '1101011@qq.com',
    ToUserName='關(guān)注者的昵稱',
    Date='{:%d-%b-%Y}'.format(datetime.date.today())
)

#輸出的docx文件
document.write('output.docx')

這是簡(jiǎn)單的Word文檔填充效果

插入表格生成模板時(shí)的另一個(gè)常見(jiàn)需求是有效地填充值表格中的值。在我們的示例中碑宴,我們可以在包含客戶購(gòu)買歷史的信件上附上展覽。在完成模板時(shí)桑谍,我們不知道要包含多少行延柠,并且 每個(gè)字段 的填充將會(huì)非常快锣披。使用merge_rows可以使表格填充更容易贞间。在本部分構(gòu)建模板,請(qǐng)創(chuàng)建一個(gè)包含1行的標(biāo)準(zhǔn)Word表雹仿,并將字段插入相應(yīng)的列中增热。無(wú)需特殊格式。它應(yīng)該看起來(lái)像這樣:

現(xiàn)在我們定義了一連串的字典胧辽,用于填充到表格中去

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é)果是每行填充了我們需要的值峻仇,并保留了我們?cè)谀0逦臋n中定義的默認(rèn)表格式:

學(xué)習(xí)來(lái)源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邑商,隨后出現(xiàn)的幾起案子摄咆,更是在濱河造成了極大的恐慌凡蚜,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吭从,死亡現(xiàn)場(chǎng)離奇詭異朝蜘,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涩金,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門谱醇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人步做,你說(shuō)我怎么就攤上這事副渴。” “怎么了辆床?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵佳晶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讼载,道長(zhǎng)轿秧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任咨堤,我火速辦了婚禮菇篡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘一喘。我一直安慰自己驱还,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布凸克。 她就那樣靜靜地躺著议蟆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萎战。 梳的紋絲不亂的頭發(fā)上咐容,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音蚂维,去河邊找鬼戳粒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛虫啥,可吹牛的內(nèi)容都是我干的蔚约。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涂籽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼苹祟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苔咪,失蹤者是張志新(化名)和其女友劉穎锰悼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體团赏,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡箕般,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舔清。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丝里。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖体谒,靈堂內(nèi)的尸體忽然破棺而出杯聚,到底是詐尸還是另有隱情,我是刑警寧澤抒痒,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布幌绍,位于F島的核電站,受9級(jí)特大地震影響故响,放射性物質(zhì)發(fā)生泄漏傀广。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一彩届、第九天 我趴在偏房一處隱蔽的房頂上張望伪冰。 院中可真熱鬧,春花似錦樟蠕、人聲如沸贮聂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吓懈。三九已至,卻和暖如春靡狞,著一層夾襖步出監(jiān)牢的瞬間骄瓣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工耍攘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畔勤。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓蕾各,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親庆揪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子式曲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 雖說(shuō)Excel制表功能是超級(jí)強(qiáng)大,但是當(dāng)我們?cè)谑褂脀ord制作文檔時(shí)難免會(huì)用一些表格功能。其實(shí)一些不復(fù)雜的表格操作...
    Jeck_merlin閱讀 3,490評(píng)論 1 28
  • 工作中正好接到個(gè)小項(xiàng)目需要將Excel數(shù)據(jù)導(dǎo)出組成word表格并合并所有表格成一個(gè)word文檔吝羞,這個(gè)流程涉及到Ex...
    茄子星人閱讀 3,852評(píng)論 0 5
  • PDFelement 6 Pro Mac 破解版是一款大家十分熟悉的pdf編輯器兰伤。PDFelement 6 Pro...
    希希的莫斯呱閱讀 13,839評(píng)論 0 2
  • 你好敦腔! 二零二零 引領(lǐng) 我 向前方 奔跑! 二零二零 你能 帶給 我 希望恨溜! 讓我 更加努力 去拼搏 點(diǎn)燃 心中的...
    一切美好閱讀 373評(píng)論 6 10
  • 我給自己起過(guò)很多QQ昵稱符衔,很多年后想起來(lái)都不忍直視。就一個(gè)QQ昵稱用了好幾年都沒(méi)改糟袁,看上去也沒(méi)什么特別判族,卻是...
    Felicia張閱讀 6,300評(píng)論 1 1