本例目標(biāo):隨機(jī)生成100道100以內(nèi)的加法試卷。
最終效果:以word文件方式生成試卷并放置到相應(yīng)目錄下。
技術(shù)點(diǎn):docxtpl模板的使用、Word文件數(shù)據(jù)的組裝、隨機(jī)函數(shù)的使用、列表中嵌套字典等。
代碼編寫方式:采用函數(shù)、面向過程方式編寫。
接下來我們一起進(jìn)行代碼編寫,通過2步搞定這個案例。
(1)模板文件。
模板文件見docxtpltemplate加法模板.docx,打開模板文件,可以看到,有3處內(nèi)容需要更換。分別是頁眉、標(biāo)題、循環(huán)體。其中循環(huán)體為嵌套結(jié)構(gòu),外循環(huán)根據(jù)tbl_contents序列進(jìn)行迭代,內(nèi)循環(huán)根據(jù)cols列表進(jìn)行迭代。tr代表行,tc代表列。請讀者對照學(xué)習(xí)。
(2)案例代碼。
build_data()函數(shù)循環(huán)讀取模板,找到相應(yīng)的值,然后渲染生成文件。
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以內(nèi)加法試卷(100道)',
'tbl_contents': list1,
'header': '加法試卷',
'footer': '2020-09-13',
}
tpl.render(context)
tpl.save(savefilename)
if __name__ == "__main__":
build_data()
代碼執(zhí)行結(jié)果如圖所示。你還可以制作任意數(shù)量的加減乘除試卷,動動手就好。






