本例目標:隨機生成100道100以內的加法試卷。
最終效果:以word文件方式生成試卷并放置到相應目錄下。
技術點:docxtpl模板的使用、Word文件數據的組裝、隨機函數的使用、列表中嵌套字典等。
代碼編寫方式:采用函數、面向過程方式編寫。
接下來我們一起進行代碼編寫,通過2步搞定這個案例。
(1)模板文件。
模板文件見docxtpltemplate加法模板.docx,打開模板文件,可以看到,有3處內容需要更換。分別是頁眉、標題、循環體。其中循環體為嵌套結構,外循環根據tbl_contents序列進行迭代,內循環根據cols列表進行迭代。tr代表行,tc代表列。請讀者對照學習。
(2)案例代碼。
build_data()函數循環讀取模板,找到相應的值,然后渲染生成文件。
from docxtpl import DocxTemplate
import os
import random
import pyMySQL
cur_path = os.path.dirname(__file__)
tempfilename = os.path.join(cur_path, 'template', '加法模板.docx')
savefilename = os.path.join(cur_path, '加法.docx')
tpl = DocxTemplate(tempfilename)
list1 = []
def build_data():
for x in range(25):
items = {}
list2 = []
for y in range(4):
num1 = random.randint(0,99)
num2 = random.randint(0,99)
list2.Append(f'{num1}+{num2}=')
items.setdefault('cols', list2)
list1.append(items)
context = {
'title': '100以內加法試卷(100道)',
'tbl_contents': list1,
'header': '加法試卷',
'footer': '2020-09-13',
}
tpl.render(context)
tpl.save(savefilename)
if __name__ == "__main__":
build_data()
代碼執行結果如圖所示。你還可以制作任意數量的加減乘除試卷,動動手就好。