使用Python由Excel表格中采集数据填充至Word表格特定单元格并批量生成文件

       工作中我们经常会遇到,从EXCEL表格中大量复制粘贴数据至WORD表格中,再存为一个个单独文件,这种枯燥乏味的重复性工作不仅效率低下,还特别容易出错。本人试着做了一个小项目,仅用了19.441秒就自动填写了30张表格并存为单独文件,数据丝毫不差,现分享如下:

一、项目需求

使用Python由Excel表格中采集数据填充至Word表格特定单元格并批量生成文件_第1张图片

        由上述Excel表中的第4行开始,逐行采集C、D、G、K、L、AW、AV、AU共7列信息填入以模板文件XX公司三级安全教育卡中【数据1】、【数据2】、【数据3】、【数据4】【数据5】、【数据6】【数据7】栏目中,共计采集30人次。

使用Python由Excel表格中采集数据填充至Word表格特定单元格并批量生成文件_第2张图片

二、定位分析

         1.因模板文件表格(tables)包含行(rows),行包含单元格(cell),需要调用docx库,使用doc.tables读取文件中第一个表格(doc.tables[0]),读取所有的行,再读取单元格,并打印显示出来,用以确定指定单元格位置(用 table.cell(x,y).text来表示),以便精确定位赋值。

for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                print(cell.text)

          2.运行以上语句后确定【数据1】、【数据2】、【数据3】、【数据4】【数据5】、【数据6】【数据7】为: table.cell(1,6).text、table.cell(1,9).text 、table.cell(2,1).text 、table.cell(2,9).text 、table.cell(4,3).text 、table.cell(5,3).text 、table.cell(5,7).text 。

三、代码实现

#键之前为源代码,#键之后为代码说明

import time#调用时间函数
start = time.clock()#开始时刻
import docx#调用docx库用于读取docx格式文件
from docx import Document#调用docx库中Document模块
from openpyxl import load_workbook#调用openpyxl库用于读取excel格式文件
wb = load_workbook("C:\\Users\\Administrator\\BaiduNetdiskDownload\\python练手17/XX公司员工入职培训教务管理信息汇总表.xlsx")#读取excel格式数据源文件
ws = wb.active#选取当前活动工作表
for row in range(4,ws.max_row+1):#遍历读取表格中每一行数据
    doc = Document("C:\\Users\\Administrator\\BaiduNetdiskDownload\\python练手17/XX公司员工入职培训三级安全教育卡(模板).docx")#打开docx格式填充数据目标文件

    table = doc.tables[0]#打开数据目标文件第一张表格
    table.cell(1,1).text = ws["C"+str(row)].value#Excel-word表间赋值语句1
    table.cell(1,6).text = ws["D"+str(row)].value#Excel-word表间赋值语句2
    table.cell(1,9).text = ws["G"+str(row)].value#Excel-word表间赋值语句3
    table.cell(2,1).text = ws["K"+str(row)].value#Excel-word表间赋值语句4
    table.cell(2,9).text = ws["L"+str(row)].value#Excel-word表间赋值语句5
    table.cell(4,3).text = ws["AW"+str(row)].value#Excel-word表间赋值语句6
    table.cell(5,3).text = ws["AV"+str(row)].value#Excel-word表间赋值语句7
    table.cell(5,7).text = ws["AU"+str(row)].value#Excel-word表间赋值语句8
    doc.save("C:\\Users\\Administrator\\BaiduNetdiskDownload\\python练手17/XX公司员工入职培训三级安全教育卡.docx({}).docx".format(str(ws.cell(row=row,column=3).value))) #以第三列员工姓名为括号备注存储为新 docx格式文件 
    print("XX公司员工入职培训三级安全教育卡({})已自动生成!".format(str(ws.cell(row=row,column=3).value)))#打印显示文件生成进度

end = time.clock()#结束时刻
print("程序运行总计用时: %.03f seconds" %(end-start))#打印显示运行时间

四、运行效果

XX公司员工入职培训三级安全教育卡(王XX)已自动生成!

XX公司员工入职培训三级安全教育卡(庞XX)已自动生成!

XX公司员工入职培训三级安全教育卡(卢XX)已自动生成!

XX公司员工入职培训三级安全教育卡(苏XX)已自动生成!

XX公司员工入职培训三级安全教育卡(欧XX)已自动生成!

XX公司员工入职培训三级安全教育卡(伏XX)已自动生成!

XX公司员工入职培训三级安全教育卡(柴XX)已自动生成!

XX公司员工入职培训三级安全教育卡(刘XX)已自动生成!

XX公司员工入职培训三级安全教育卡(孙XX)已自动生成!

XX公司员工入职培训三级安全教育卡(李XX)已自动生成!

XX公司员工入职培训三级安全教育卡(蒲XX)已自动生成!

XX公司员工入职培训三级安全教育卡(张XX)已自动生成!

XX公司员工入职培训三级安全教育卡(李XX)已自动生成!

XX公司员工入职培训三级安全教育卡(孙XX)已自动生成!

XX公司员工入职培训三级安全教育卡(梁XX)已自动生成!

XX公司员工入职培训三级安全教育卡(秦XX)已自动生成!

XX公司员工入职培训三级安全教育卡(魏XX)已自动生成!

XX公司员工入职培训三级安全教育卡(兰XX)已自动生成!

XX公司员工入职培训三级安全教育卡(唐XX)已自动生成!

XX公司员工入职培训三级安全教育卡(李XX)已自动生成!

XX公司员工入职培训三级安全教育卡(胡XX)已自动生成!

XX公司员工入职培训三级安全教育卡(阔汶XX)已自动生成!

XX公司员工入职培训三级安全教育卡(左XX)已自动生成!

XX公司员工入职培训三级安全教育卡(翟XX)已自动生成!

XX公司员工入职培训三级安全教育卡(尹XX)已自动生成!

XX公司员工入职培训三级安全教育卡(江XX)已自动生成!

XX公司员工入职培训三级安全教育卡(何XX)已自动生成!

XX公司员工入职培训三级安全教育卡(胡XX)已自动生成!

XX公司员工入职培训三级安全教育卡(王XX)已自动生成!

XX公司员工入职培训三级安全教育卡(方XX)已自动生成!

程序运行总计用时: 19.441 seconds

五、延伸运用

       自动生成30份格式相同数据各异的文件,仅用时19.441秒!!!理论上for循环语句在未设定中止条件的情况下,可无限次运行,生成成百上千份文件也只是几分钟的事。以上代码用autopytuexe打包封装成exe格式可执行程序后,可以任意电脑上脱机运行。

你可能感兴趣的