久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Flask后端實(shí)踐 連載十四 Flask輸出Word報(bào)表

 看見就非常 2020-04-29

tips:

項(xiàng)目場(chǎng)景

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

Python處理Word的包

  1. python-docx

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

  2. docxtpl

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

docxtpl的簡(jiǎn)單使用

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

  1. 安裝pip install docxtpl

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

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

    • 編寫渲染測(cè)試代碼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},
          ],
          # 頁(yè)眉
          'header': 'xxx公司人員信息管理',
          # 頁(yè)腳
          'footer': '1',
          # 圖片
          'image': InlineImage(doc, 'test.jpg', height=Mm(10)),
      }
      # 渲染模板
      doc.render(context)
      # 保存渲染的文件
      doc.save("generated_doc.docx")
      
  3. 關(guān)于表格動(dòng)態(tài)合并、表格設(shè)置可以參考這里

Flask結(jié)合docxtpl使用

  • 測(cè)試代碼

    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},
            ],
            # 頁(yè)眉
            'header': 'xxx公司人員信息管理',
            # 頁(yè)腳
            '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():
        """
        測(cè)試輸出word
        :return:
        """
        path = write()
        return path
    
    
    if __name__ == '__main__':
        app.run()
    
    
    
  • 啟動(dòng)app,,訪問http://127.0.0.1:5000/testWord 返回生成路徑generated_doc.docx,。然后配合nginx轉(zhuǎn)發(fā)即可下載文件

總結(jié)

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多