|
tips:
- 簡單實現(xiàn)Flask輸出Word報表
- 本文基于python3編寫
- 代碼倉庫
項目場景
由于項目是工程上的使用,不僅需要對采集的數(shù)據(jù)進(jìn)行分析,也需要輸出報表,使用程序輸出報表極大的簡化了報表制作流程。
Python處理Word的包
-
python-docx
python-docx是一個用于創(chuàng)建和更新Microsoft Word(.docx)文件的Python庫。文檔地址
-
docxtpl
主要包含兩個包,分別是python-docx用于讀取,編寫和創(chuàng)建子文檔。jinja2用于管理插入模板docx的標(biāo)簽。通過預(yù)先設(shè)定的模板文件,生成需要的文件。文檔地址
docxtpl的簡單使用
項目上的Word報表定制化比較高。通常由用戶提供模板,我們這邊只需要在對應(yīng)位置填寫數(shù)據(jù)。因此項目上采用docxtpl來定制化Word報表
-
安裝pip install docxtpl
-
簡單使用,更多詳細(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")
-
關(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)無限層級生成目錄樹的問題
|