从excel读取内容生成标准word文档


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM