临时需要完成这样一个功能,从excel读取内容生成标准word文档
考虑用python脚本快速完成
首先需要从excel读取内容
其次写入word模板,生成不同的word文件
最后合并所有生成的word文件
excel的每行格式如下:
测试公司 测试地址 测试人员姓名 测试1 测试号 2021/7/22
需要每行对应生成一个word文件,然后将所有的word文件合并到同一个word文件
我们首先手工创建一个word的模板文件dotx,只需要将正常word文件保存成 Word模板(*.dotx) 类型
然后在指定位置插入书签,用不同的名字来命名书签,后面插入数据的时候需要。
下面是具体的python脚本了,注意需要安装os所在的模块才能执行
python大致如下,内容部分做了替换和简单说明
from win32com.client import Dispatch
from datetime import datetime
import os
print("读取创建开始!!")
zpath="F:\\dir1\\dir2\\";
print(zpath)
mergepath="F:\\dir1\\dir2\\merge\\";
if not os.path.exists(mergepath): 无目录创建目录
os.makedirs(mergepath)
app = Dispatch('Word.Application')
#app.Visible = True
xlApp = Dispatch("Excel.Application")
#xlApp.Visible = True
xlBook = xlApp.Workbooks.Open(zpath+'excel名字.xlsx') 在路径zpath下的excel文件
for i in range(1): 读取excel,遍历每行获取所需字段的值
print(i)
#p1=str(xlBook.Worksheets('sheet1').Cells(i+2, 1).Value)
#p1=p1[0:4]+'年' +p1[5:7] + '月' +p1[8:10] +'日'
#print(p1)
p1=xlBook.Worksheets('sheet1').Cells(i+2, 1).Value
print(p1)
p2=xlBook.Worksheets('sheet1').Cells(i+2, 2).Value
print(p2)
p3=xlBook.Worksheets('sheet1').Cells(i+2, 3).Value
p3=p3.strip()
print(p3)
p4=xlBook.Worksheets('sheet1').Cells(i+2, 4).Value
p4=p4.strip()
print(p4)
p5=xlBook.Worksheets('sheet1').Cells(i+2, 5).Value
print(p5)
p6=str(xlBook.Worksheets('sheet1').Cells(i+2, 6).Value) 时间处理
p6=p6[0:4]+'年' +p6[5:7] + '月' +p6[8:10] +'日'
print(p6)
doc = app.Documents.Add(zpath+'创建的word模板.dotx')
doc.Bookmarks("位置名字1").Range.Text = p1 将excle中每行的字段填写到模板中的位置
doc.Bookmarks("位置名字2").Range.Text = p2
doc.Bookmarks("位置名字3").Range.Text = p3
doc.Bookmarks("位置名字4").Range.Text = p5
doc.Bookmarks("位置名字5").Range.Text = p4
doc.Bookmarks("位置名字6").Range.Text = p6
doc.Bookmarks("位置名字7").Range.Text = p1 这个位置使用同样的内容
# doc.Bookmarks("位置6").Range.Text = "{0:%Y}年{0:%m}月{0:%d}日".format(datetime.now())
doc.SaveAs(mergepath+'单个word文档的名字_'+p4+'.docx') p4是每行中一个区别其他行的特殊标记
doc.Close()
#app.Documents.Close()
app.Quit()
xlBook.Close()
xlApp.Quit()
print("读取创建结束!!")
print("开始合并!!")
word = Dispatch('Word.Application')
#word.Visible = False
#需要合并的文件所在路径
files = []
filename = os.listdir(mergepath)
filename.sort(key= lambda x:str(x[:-5]))
for filename in filename:
filename = os.path.join(mergepath,filename)
print(filename)
files.append(filename)
#获取目录下所有文件的路径
output = word.Documents.Add()
#新建空的word文档,
for file in files:
output.Application.Selection.InsertFile(file)
#拼接文档
doc = output.Range(output.Content.Start, output.Content.End)
#获取合并后文档的内容
output.SaveAs(mergepath+'merge.docx')
#把汇总文件保存到指定路径
output.Close()#关闭
word.Quit()
print("合并结束!!")