使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档

背景:博主在银行实习期间进行过一段时间的实习,期间有档案整理的工作,这其中一项就是为每份(不同的姓名、时间和档案编号)档案制作相同的封面,上千份的档案实在繁重,所以想到使用一下程序,此程序的用途可以修改衍生,解决其他重复性劳动。 

环境:Python3.7.6,Pycharm,Win10 64位系统     

材料:

使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档_第1张图片

使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档_第2张图片

使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档_第3张图片

 

from docxtpl import DocxTemplate,InlineImage
from openpyxl import load_workbook
import os


def replace(obj):
    if obj is None:
        obj = ''
        return obj


# 加载要填入的数据
wb = load_workbook(r"E:\Desktop\szl.xlsx")  #需要填入Word的Excel工作簿的地址
ws = wb['ydk']  #工作簿中表格的名称
contexts = []
for row in range(2, ws.max_row + 1):
    name = ws["A" + str(row)].value  #字母代表表格中对应的列,顺序和列名一定要对应上
    year = ws["B" + str(row)].value
    mon = ws["C" + str(row)].value
    day = ws["D" + str(row)].value
    number = ws["E" + str(row)].value


    context = {"name": name, "year": year, "number": number,"mon":mon,"day":day} #变量名称与Word文档中的占位符要一一对应
    contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./合同封面")
num=0   #在文件名称前加入序号,保证生成的文档顺序与Excel中的顺序保持一致,方便查找
for context in contexts:
    print(context)
    num=num+1
    tpl = DocxTemplate(r"E:\Desktop\Users\fm.docx")  #需要填入的Word文档的的地址
    tpl.render(context)
    tpl.save("./合同封面/%d{}的封面.docx".format(context["name"])%num)





 

注意事项:

1、Excel的文件后缀是.xlsx,Word文档的后缀是.docx

2、确保Excel和Word文档的路径地址正确

3、注意表格名称、列名、占位符与参数的一一对应

4、特别注意:Excel中每一列的数据都必须转换成文本格式,这样Word中呈现的才会和Excel中一模一样(如果有时间格式会精确到秒)

5、占位符的含义:在英文的双层大括号{ {}}中添加的占位符,即程序运行后Excel中对应的数据会填入这个位置。

结果:

使用python将Excel中的数据自动填入Word文档指定位置并独立生成docx文档_第4张图片

更新-----程序2.0:档案有很多种类,所以封面种类也不同,但是每种封面上的内容都是姓名、日期、和编号,所以对程序进行了改进,根据不同的label(Excel文档第一列增加label列,说明是那种档案封面)选择对应的封面模板生成封面。

#将Excel表格中的数据自动填入Word指定位置

from docxtpl import DocxTemplate,InlineImage
from openpyxl import load_workbook
import os


def replace(obj):
    if obj is None:
        obj = ''
        return obj


# 加载要填入的数据
wb = load_workbook(r"E:\Desktop\123\test.xlsx")
ws = wb['xindai'] #表格的名称
contexts = []
for row in range(1, ws.max_row + 1): #从第1行开始
    label = ws["A" + str(row)].value
    name = ws["B" + str(row)].value  #字母代表Excel中的列
    year = ws["C"+str(row)].value
    mon = ws["D" + str(row)].value
    day = ws["E" + str(row)].value
    number = ws["F" + str(row)].value


    context = {"label":label,"name": name, "year": year,"mon":mon,"day":day, "number": number}
    contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./合同封面")
num=0
for context in contexts:
    print(context)
    num=num+1
    if context.get('label') == '不分类':
        tpl = DocxTemplate(r"E:\Desktop\123\bufenlei.docx")
    elif context.get('label') == '基本':
        tpl = DocxTemplate(r"E:\Desktop\123\jiben.docx")
    elif context.get('label') == '贷后':
        tpl = DocxTemplate(r"E:\Desktop\123\daihou.docx")
    elif context.get('label') == '担保':
        tpl = DocxTemplate(r"E:\Desktop\123\danbao.docx")
    elif context.get('label') == '发放':
        tpl = DocxTemplate(r"E:\Desktop\123\fafang.docx")
    tpl.render(context)
    tpl.save("./合同封面/%d{}的{}封面.docx".format(context["name"],context["label"])%num)


 

你可能感兴趣的:(程序应用,Python,自动化,Excel,Word)