<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用Python制作WORD報告

          共 2509字,需瀏覽 6分鐘

           ·

          2020-03-25 23:28

          0223cbf5aae80c18863ef0b21a01bd60.webp


          ? ? ?作者:大鄧


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

          8d3952ac46d84a1aa0535cbef47892aa.webp

          在前面一期文章?使用Pandas、Jinja和WeasyPrint制作pdf報告 中我分享了如何使用HTML模板來創(chuàng)建pdf報告的方法。雖然pdf很不錯,但更多的人實際上在用微軟的WORD來操作文檔。實際上對于用戶來說,創(chuàng)建所需的模板會更加簡單,該模板支持Word中所需的所有自定義格式,而不是嘗試使用HTML + CSS。幸運的是,有一個庫支持在python中進行MS Word 郵件合并。這種方法的優(yōu)點是可以在任何系統(tǒng)上運行 - 即使沒有安裝Word。?


          背景




          使所有這一切成為可能的包叫做?docx-mailmerge它是一個成熟的包,可以解析MS Word docx文件,找到?合并字段?并將您需要的任何值填充給它們。該包還支持一些輔助函數(shù),用于填充表并生成具有多個分頁符的單個文件。我知道標準的Word方法是將此進程稱為?mailmerge?,但本文中的這個?“mailmerge”?可以是一個有用的模板系統(tǒng),可以用于更復雜的解決方案,而不僅僅是填充文檔中的?名稱和地址

          安裝

          docx-mailmerge?需要依賴?lxml?,所以需要先安裝lxml,再安裝 docx-mailmerge
          pip install lxml
          pip install docx-mailmerge



          Word合并字段




          為了使docx-mailmerge正常工作,您需要創(chuàng)建標準Word文檔,并定義適當?shù)?合并字段?。以下示例適用于Word 2016.其他版本的Word應該類似。實際上花了我一段時間來弄清楚這個過程,但是一旦你做了幾次,這很簡單。啟動Word并創(chuàng)建基本文檔結(jié)構(gòu)。然后將光標放在應插入?數(shù)據(jù)的位置,并選擇插入 - > 域

          5fe084eac828693e0c0fcff44f6f6ce5.webp

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

          41206b7f497b3ed560847873f9883462.webp

          簡單的合并




          創(chuàng)建Word文檔后,填充字段值是一項很簡單的操作。

          from mailmerge import MailMerge
          import datetime

          template = "PracticalPython.docx"

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

          958e72d20a4eee2b8aad0d81e9182f4e.webp

          下面我們先看看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文檔填充效果

          39849aebb47733fa58582a2a4f3621fa.webp

          插入表格




          生成模板時的另一個常見需求是有效地填充值表格中的值。在我們的示例中,我們可以在包含客戶購買歷史的信件上附上展覽。在完成模板時,我們不知道要包含多少行,并且?每個字段?的填充將會非常快。使用merge_rows可以使表格填充更容易。在本部分構(gòu)建模板,請創(chuàng)建一個包含1行的標準Word表,并將字段插入相應的列中。無需特殊格式。它應該看起來像這樣:

          d3465c99d324f283fae54f283d6b966a.webp

          現(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é)果是每行填充了我們需要的值,并保留了我們在模板文檔中定義的默認表格式:

          879e790598a5c09e1ecd56a31356bc22.webp

          ◆?◆?◆ ?◆?




          長按二維碼關(guān)注我們



          數(shù)據(jù)森麟公眾號的交流群已經(jīng)建立,許多小伙伴已經(jīng)加入其中,感謝大家的支持。大家可以在群里交流關(guān)于數(shù)據(jù)分析&數(shù)據(jù)挖掘的相關(guān)內(nèi)容,還沒有加入的小伙伴可以掃描下方管理員二維碼,進群前一定要關(guān)注公眾號奧,關(guān)注后讓管理員幫忙拉進群,期待大家的加入。


          管理員二維碼:



          猜你喜歡

          ?笑死人不償命的知乎沙雕問題排行榜

          ?用Python扒出B站那些“驚為天人”的阿婆主!

          ?互聯(lián)網(wǎng)大佬學歷&背景大揭秘,看看是你的老鄉(xiāng)還是校友

          ?上萬條數(shù)據(jù)撕開微博熱搜的真相!

          ?你相信逛B站也能學編程嗎?

          瀏覽 79
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲一区福利在线 | 大香蕉伊人在线看 | jiZZJIZZ成熟丰满少妇 | 亚洲日韩欧美在线观看 | 先锋资源在线 |