python 读取excel表格数据,然后写入word模板,批量生成

Python 读取excel及批量生成word模板

问题-来源

前几天,我姐遇见了一个难题:需要从excel表格中不断复制数据到word模板中,相当繁琐,询问我有没有解决的办法。于是我百度了一下,借鉴了相关博主的博文,结合自己的需求,最终解决了该问题。特在此记录一下。

问题-困难

问题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()

问题-总结

以上便是关于该问题的解决代码,仍有许多完善之处:如保存路径和目录的生成等,仍需继续改进。
新手小白,刚上路,有许多知识不清楚,还望大家多多指点一下我,谢谢啦。

  • 17
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值