临时需要完成这样一个功能,从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("合并结束!!")