python办公自动化之批量生成docx——根据excel生成word
系列文章
第一章 python办公自动化之批量修改docx——以修改含有表格的word文件为例
第二章 python办公自动化之批量生成docx——根据excel (word)生成word (excel)
第三章 python办公自动化之python-docx,openpyxl——根据excel(word表格)填写word表格(excel)
本文目录
一、从excel读取
使用pandas读取excel数据。
import pandas as pd
Excel_1=pd.read_excel("样例详情.xlsx",sheet_name=0)
Excel_2=pd.read_excel("样例详情.xlsx",sheet_name=1)
print(Excel_1)
输出:
乙方 合同金额 工期
0 刘一 10000 10
1 陈二 20000 20
2 张三 30000 30
3 李四 40000 40
4 王五 50000 50
5 赵六 60000 60
6 钱七 70000 70
7 周八 80000 80
8 吴九 90000 90
9 郑十 100000 100
二、写入docx
假设word文件已经给定了,可以是合同、工资条、通知等等,但格式需得是.docx, 否则python-docx包无法操作。
1. 导入模块,读取指定文件
from docx import Document
import re #re模块用于确定写入的位置
#读取word文件实例
document = Document("建设工程勘察合同.docx")
2. 定义操作word文档的函数
#定义函数,查找关键字出现的段落
def find_index_paragraph(pattern,document):
i=0
id_=[]
for paragraph in document.paragraphs:
result = re.findall(pattern,paragraph.text)
if result:
print("Line",i,"Exist:",paragraph.text)
id_.append([i,paragraph.text])
i+=1
print("*"*20)
return id_ #返回paragraph的索引,以及该paragraph的内容
#定义函数,查找段落中关键字出现的sentence(python-docx称之为run)
def find_index_run(line_number,document):
idx_=[]
for j in line_number:
i=0
for run in document.paragraphs[j].runs:
print("line_number",j,"Run",i,"Content:",run.text)
idx_.append([j,i,run.text])
i+=1
print("*"*20)
return idx_ #返回paragraph的索引,run的索引,以及对应run的内容
#定义函数,在指定位置插入需要的字符串
def change_paragraph_value(line_run_number,change,document,bold=True,underline=True):
for i in line_run_number:
document.paragraphs[i[0]].runs[i[1]].bold=bold #设置加粗
document.paragraphs[i[0]].runs[i[1]].underline=underline #设置下划线
document.paragraphs[i[0]].runs[i[1]].text=change
3. 使用定义的函数确定需要修改的位置
find_paragraph=find_index_paragraph("勘察人(全称):",document)
print(find_paragraph)
输出:
Line 2 Exist: 勘察人(全称):_______________________________
********************
[[2, '勘察人(全称):_______________________________']]