怎么读取一个Excel中的数据,批量替换不同Word中的局部信息
from docxtpl import DocxTemplate
from openpyxl import load_workbook
import os
def replace(obj):
if obj is None:
obj = ''
return obj
# 加载要填入的数据
wb = load_workbook(r"C:\Users\MSI2\data(1).xlsx")
ws = wb['Sheet1']
contexts = []
for row in range(2, ws.max_row + 1):
name = ws["A" + str(row)].value
c_name = ws["B" + str(row)].value
code = ws["C" + str(row)].value
num = ws["D" + str(row)].value
time = ws["E" + str(row)].value
time = str(time)[:-9]
money = ws["F" + str(row)].value
address = ws["G" + str(row)].value
replace_peo = ws["H" + str(row)].value
context = {"name": name, "c_name": c_name, "code": code, "num": num, "time": time,
"money": money, "address": address, "replace_peo": replace_peo}
contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./所有合同")
for context in contexts:
print(context)
tpl = DocxTemplate(r"C:\Users\MSI2\A公司(1).docx")
tpl.render(context)
tpl.save("./所有合同/{}的劳动合同.docx".format(context["name"]))
不知道你这个问题是否已经解决, 如果还没有解决的话:代码如下
from docxtpl import DocxTemplate
from openpyxl import load_workbook
import os
def replace(obj):
if obj is None:
obj = ''
return obj
# 加载要填入的数据
wb = load_workbook(r"C:\Users\MSI2\data(1).xlsx")
ws = wb['Sheet1']
contexts = []
for row in range(2, ws.max_row + 1):
name = ws["A" + str(row)].value
c_name = ws["B" + str(row)].value
code = ws["C" + str(row)].value
num = ws["D" + str(row)].value
time = ws["E" + str(row)].value
time = str(time)[:-9]
money = ws["F" + str(row)].value
address = ws["G" + str(row)].value
replace_peo = ws["H" + str(row)].value
context = {"name": name, "c_name": c_name, "code": code, "num": num, "time": time,
"money": money, "address": address, "replace_peo": replace_peo}
contexts.append(context)
contexts
# 创建要保存的文件夹
os.mkdir("./所有合同")
for context in contexts:
print(context)
tpl = DocxTemplate(r"C:\Users\MSI2\A公司(1).docx")
tpl.render(context)
tpl.save("./所有合同/{}的劳动合同.docx".format(context["name"]))
效果
由参考资料可以看出,针对这个问题的解决方案是使用Python读取Excel文件中的数据并使用DocxTemplate将数据批量替换到多个Word文件中的不同位置。具体步骤如下:
from openpyxl import load_workbook
from docxtpl import DocxTemplate
#加载Excel文件并获取Sheet数据
wb = load_workbook('data.xlsx')
ws = wb['Sheet1']
#获取Sheet中所有行的数据
rows = []
for row in ws.iter_rows(min_row=2):
rows.append([cell.value for cell in row])
#加载Word文件模板
tpl = DocxTemplate('template.docx')
#循环读取每一行Excel数据并渲染到Word模板中
for row in rows:
context = {
'name': row[0],
'age': row[1],
'gender': row[2],
'address': row[3],
'email': row[4]
}
tpl.render(context)
tpl.save('output/{}.docx'.format(row[0]))
完整代码如下:
from openpyxl import load_workbook
from docxtpl import DocxTemplate
# 加载Excel文件并获取Sheet数据
wb = load_workbook('data.xlsx')
ws = wb['Sheet1']
# 获取Sheet中所有行的数据
rows = []
for row in ws.iter_rows(min_row=2):
rows.append([cell.value for cell in row])
# 加载Word文件模板
tpl = DocxTemplate('template.docx')
# 循环读取每一行Excel数据并渲染到Word模板中
for row in rows:
context = {
'name': row[0],
'age': row[1],
'gender': row[2],
'address': row[3],
'email': row[4]
}
tpl.render(context)
tpl.save('output/{}.docx'.format(row[0]))
最后,将Excel文件、Word文件模板和Python脚本放在同一个目录下,运行脚本即可生成渲染后的Word文件,保存在output文件夹中。