如何读取表格数据,批量导入WORD模板表格,自动生成文件

在日常工作中,为了统计分析数据,跟进项目进度 , 都会建立各种表格台帐 , 常常需要从表格提取关键数据,撰写WORD文件,进行管理预警通知 。
如果数量较少,手动提取处理 , 应该问题不大,但如果多达几十份,甚至上百份 , 工作量将会很大,且均是重复性的工作,这就是今天的问题:如何实现从表格读取多条数据,自动批量导入WORD表格中,生成通知文件?大家可能使用过WORD的邮件合并功能 , 可以方便实现从EXCEL表中读取数据 , 批量打印WORD文档 , 但它与数据源一一对应,如果满足条件的是多条数据时,就很不方便了 。下面介绍利用python,实现从EXCEL表中读取数据,批量导入WORD模板表格中,自动生成文件并保存 。
1、导入库
【如何读取表格数据,批量导入WORD模板表格,自动生成文件】import pandas as pd
from docx import Document
from docx.shared import Pt
from docx.enum.table import WD_ALIGN_VERTICAL
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
如果运行时,提示没有对应库,使用 pip 在命令行中安装这些库 。
2、读取数据
df = pd.read_excel('example .xlsx',sheet_name=1)
文件位置根据实际替换 , 数据1默认第一个表 。
3、设置字体样式
font_size = 12 # 字体大小
font_name = '仿宋' # 字体名称
可根据需要自行更改
4、生成单位名称列表
#抽取单位名称存为列表 , 用于for循环
xmlist=df['单位名称'].values.tolist()
xmlist=list(set(xmlist)) #名称去重
5、载入Word 模板文件
doc = Document('通知.docx')
target_table = doc.tables[0] # 模板中只有一个表格
target_row = 1 # 要插入数据的目标行
6、替换模板中的单位名称
for run in doc.paragraphs[1].runs:
run.text = run.text.replace('xmname',xmname)
将从列表中读取的单位名称,替换模板指定位置文字 。
7、选择符合特定条件的数据
a.条件根据需要进行设定,注意同时满足的条件用&连接
condition = (df['列1'] == xmname) & (df['列2'] > 0) & (df['列3'] < 1)
filtered_data = https://www.itzhengshu.com/excel/df.loc[condition]
只保留需要的数据列
filtered_data = https://www.itzhengshu.com/excel/filtered_data[["列1","列2","列3"]]
b.设置数据是否为空的判断,因为部分单位不满足条件 , 没有必要生成空的WORD文档,即当为空时,跳出当前循环 。
if filtered_data.empty:
continue
8、将数据插入模板表格的指定位置
for index, row in filtered_data.iterrows():
new_row = target_table.add_row().cells
for col_index, column in enumerate(filtered_data.columns):
cell = new_row[col_index]
cell.text = str(row[column])
9、设置字体样式
导入上面的字体,垂直位置居中,因第三列是数字 , 靠右好看些,所以加了if判断,即前两列靠左 , 第三列靠右 。
cell.paragraphs[0].runs[0].font.size = Pt(font_size)
cell.paragraphs[0].runs[0].font.name = font_name
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
if col_index < 2: # 前两列水平靠左
cell.paragraphs[0].alignment =WD_PARAGRAPH_ALIGNMENT.LEFT
else: # 第三列水平靠右
cell.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
10、增加新行,方便插入下一条数据
target_row= 1
11、保存生成的文件
doc.save("D:\通知\" xmname ".docx")
文件路径注意用双斜杠"\",文件名称用对应数据 。
好了,先向领导报怨工作量太大,然后泡杯茶,坐等下班[捂脸][捂脸]

如何读取表格数据,批量导入WORD模板表格,自动生成文件

相关经验推荐