- A+
所属分类:Python技术
问题-来源
工作重需要重复从excel表格中不断复制数据到word模板中,相当繁琐,于是我百度了一下,借鉴了相关博主的博文,结合自己的需求,最终解决了该问题。特在此记录一下。文中代码是CSDN博主的源代码,根据工作实际需求,已经进行了修改!
问题-困难
问题1:一直无法导入docxptl库,一直尝试仍无法解决。直到第二天,下定决心下载最新版本的python,该问题解决。
问题2:读取excel的xlrd一直读取不了我的数据源,多次百度最终寻得解决办法:因为我的表格是以xlsx结尾的,1.2.0之后的xlrd库版本只能读取xls结尾的表格,所以,我在pycharm中下载的xlrd库版本为1.2.0,该问题解决。
问题-代码解决
word模板需要用{{}}进行占位。
以下是源码:
# coding:<encoding name> : # coding: utf-8
import xlrd
from docxtpl import DocxTemplate
def main():
data = xlrd.open_workbook(r'C:\Users\22815\Desktop\打印\数据表.xlsx')
for x in range(0, 1):#这儿可以循环多张表
print(x)
table = data.sheets()[x]
names = data.sheet_names()[x] # 获取表名
nrows = table.nrows
print(names)
for i in range(nrows):
name = table.row_values(i)[0] # 姓名
idCard = table.row_values(i)[3] # 身份证
smallMoney = table.row_values(i)[1] # 金额小写
bigMoney = table.row_values(i)[2] # 金额大写
month = table.row_values(i)[5] # 月份
day = table.row_values(i)[6] # 天
SMoney = str(smallMoney).replace(".0", "")#上面的数据打印出来会有.0,但是我们不需要,所以剔除。
SMonth = str(month).replace(".0", "")
Sday = str(day).replace(".0", "")
context = {
"name": name, # 姓名
"idCard": idCard, # 身份证号码
"smallMoney": SMoney, # 金额小写
"bigMoney": bigMoney, # 金额大写
"month": SMonth, # 月
"day": Sday # 天
}
word = DocxTemplate(r'C:\Users\22815\Desktop\打印\个人工资结清承诺书.docx')
print(context)
word.render(context)
word.save(names + "-" + "{}".format(name) + ".docx")
print("保存成功")
if __name__ == '__main__':
main()
根据CSDN博主的这个源码,本人进行了符合工作的实际的相关修改,我的源代码就不放出来了!