读取excel表中内容,将内容写进word模板内。
最后一个方法将多个word放在一起,生成了总的word,易于打印
本例子中在word内有两个表格,第一个为0,第二个为1,使用时可以进行增加
在docx库中还有很多对象,段落,格式,样式等可以阅读手册进行使用
import docx
from openpyxl import load_workbook
import os
from docxcompose.composer import Composer
from docx import Document as Document_compose
import time
#加载模板文件以及查找表的路径
for root, dirs, files in os.walk(os.getcwd()):
for file in files :
if file.endswith('.xlsx'):
xlsxpath=os.path.join(root,file)
dirpath=os.path.join(root)
if file.startswith('target'):
docxpath=os.path.join(root,file)
dirpath=os.path.join(root)
#填写 .xlsx 文件所在位置
wb = load_workbook(xlsxpath)
ws = wb.active
#填写表格sheet
sheet=wb.get_sheet_names()
#计算生成文件
count=0
#生成word
def word(title,kind,name,group,phone,email,data1,docnum,datesetnum):
file = docx.Document(docxpath)
table=file.tables[0]
table.cell(0, 1).text = title
table.cell(1, 1).text = kind
table.cell(2, 1).text = name
table.cell(2, 3).text = group
table.cell(3, 1).text = str(phone)
table.cell(3, 3).text = str(email)
table.cell(4, 1).text = data1
table1 = file.tables[1]
table1.cell(2,1).text=str(docnum)
table1.cell(2,3).text=str(datesetnum)
# 添加分页符
file.add_page_break()
file.save('{}_{}_{}_{}.docx'.format(str(docnum),name,title,datesetnum))
#从第一个开始一直到结尾
for row in range(2,58):
count += 1
title = ws.cell(row=row, column=2).value
kind = ws.cell(row=row, column=3).value
name = ws.cell(row=row, column=4).value
group = ws.cell(row=row, column=5).value
phone = ws.cell(row=row, column=6).value
email = ws.cell(row=row, column=7).value
data = ws.cell(row=row, column=8).value
datesetnum = ws.cell(row=row, column=9).value
docnum = ws.cell(row=row, column=1).value
data1=str(data).split(" ")[0]
word(title,kind,name,group,phone,email,data1,docnum,datesetnum)
print("共生成 " + str(count) + " 个word文件")
#查找 .docx 文档
result=[]
def search(path=".", name=""):
for item in os.listdir(path):
item_path = os.path.join(path, item)
if os.path.isdir(item_path):
search(item_path, name)
elif os.path.isfile(item_path):
if name in item:
global result
result.append(item_path)
print (item_path)
search(path=dirpath, name=".docx")
#查看文件
print(result)
files = result
def combine_all_docx(filename_master,files_list):
number_of_sections=len(files_list)
master = Document_compose(filename_master)
composer = Composer(master)
for i in range(1, number_of_sections):
doc_temp = Document_compose(files_list[i])
composer.append(doc_temp)
composer.save("Submission_form_list.docx")#生成总文件
combine_all_docx(result[0],result)