小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Flask后端實踐 連載十四 Flask輸出Word報表

 看見就非常 2020-04-29

tips:

  • 簡單實現(xiàn)Flask輸出Word報表
  • 本文基于python3編寫
  • 代碼倉庫

項目場景

由于項目是工程上的使用,不僅需要對采集的數(shù)據(jù)進(jìn)行分析,也需要輸出報表,使用程序輸出報表極大的簡化了報表制作流程。

Python處理Word的包

  1. python-docx

    python-docx是一個用于創(chuàng)建和更新Microsoft Word(.docx)文件的Python庫。文檔地址

  2. docxtpl

    主要包含兩個包,分別是python-docx用于讀取,編寫和創(chuàng)建子文檔。jinja2用于管理插入模板docx的標(biāo)簽。通過預(yù)先設(shè)定的模板文件,生成需要的文件。文檔地址

docxtpl的簡單使用

項目上的Word報表定制化比較高。通常由用戶提供模板,我們這邊只需要在對應(yīng)位置填寫數(shù)據(jù)。因此項目上采用docxtpl來定制化Word報表

  1. 安裝pip install docxtpl

  2. 簡單使用,更多詳細(xì)內(nèi)容請看官方文檔。

    • 新建測試模板test.docx,設(shè)置模板樣子,并填入相關(guān)參數(shù)。

    • 編寫渲染測試代碼test.py

      from docxtpl import DocxTemplate, InlineImage
      from docx.shared import Mm
      
      # 讀取指定位置的模板文件
      doc = DocxTemplate("test.docx")
      # 渲染的內(nèi)容
      context = {
          # 標(biāo)題
          'title': "人員信息",
          # 表格
          'table': [
              {"name": "小李", "age": 11},
              {"name": "小張", "age": 21},
              {"name": "小張", "age": 20},
              {"name": "小張1", "age": 10},
              {"name": "小張2", "age": 30},
              {"name": "小張3", "age": 40},
          ],
          # 頁眉
          'header': 'xxx公司人員信息管理',
          # 頁腳
          'footer': '1',
          # 圖片
          'image': InlineImage(doc, 'test.jpg', height=Mm(10)),
      }
      # 渲染模板
      doc.render(context)
      # 保存渲染的文件
      doc.save("generated_doc.docx")
      
  3. 關(guān)于表格動態(tài)合并、表格設(shè)置可以參考這里

Flask結(jié)合docxtpl使用

  • 測試代碼

    from docxtpl import DocxTemplate, InlineImage
    from docx.shared import Mm
    from flask import Flask
    
    
    def write():
        path = "generated_doc.docx"
        # 讀取指定位置的模板文件
        doc = DocxTemplate("test.docx")
        # 渲染的內(nèi)容
        context = {
            # 標(biāo)題
            'title': "人員信息",
            # 表格
            'table': [
                {"name": "小李", "age": 11},
                {"name": "小張", "age": 21},
                {"name": "小張", "age": 20},
                {"name": "小張1", "age": 10},
                {"name": "小張2", "age": 30},
                {"name": "小張3", "age": 40},
            ],
            # 頁眉
            'header': 'xxx公司人員信息管理',
            # 頁腳
            'footer': '1',
            # 圖片
            'image': InlineImage(doc, 'test.jpg', height=Mm(10)),
        }
        # 渲染模板
        doc.render(context)
        # 保存渲染的文件
        doc.save(path)
        return path
    
    
    app = Flask(__name__)
    
    
    @app.route('/testWord', methods=["GET"])
    def test_word():
        """
        測試輸出word
        :return:
        """
        path = write()
        return path
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
  • 啟動app,訪問http://127.0.0.1:5000/testWord 返回生成路徑generated_doc.docx。然后配合nginx轉(zhuǎn)發(fā)即可下載文件

總結(jié)

  • 本篇文章簡單介紹了docxtpl的使用,具體的使用場景應(yīng)該與項目需求相結(jié)合。
  • 下一篇將解決自關(guān)聯(lián)無限層級生成目錄樹的問題

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多