tips:
項(xiàng)目場(chǎng)景
由于項(xiàng)目是工程上的使用,不僅需要對(duì)采集的數(shù)據(jù)進(jìn)行分析,也需要輸出報(bào)表,,使用程序輸出報(bào)表極大的簡(jiǎn)化了報(bào)表制作流程,。
Python處理Word的包
-
python-docx
python-docx是一個(gè)用于創(chuàng)建和更新Microsoft Word(.docx)文件的Python庫(kù),。文檔地址
-
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)表
-
安裝pip install docxtpl
-
簡(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")
-
關(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í)生成目錄樹的問題
|