python办公自动化之批量生成docx——根据excel生成word

  • 系列文章
  • 本文目录
  • 一、从excel读取
  • 二、写入docx
  • 三、批量生成docx
  • 四、反向操作,根据word生成excel

系列文章

第一章 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=0id_=[]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+=1print("*"*20)return id_   #返回paragraph的索引,以及该paragraph的内容
#定义函数,查找段落中关键字出现的sentence(python-docx称之为run)
def find_index_run(line_number,document):idx_=[]for j in line_number:i=0for run in document.paragraphs[j].runs:print("line_number",j,"Run",i,"Content:",run.text)idx_.append([j,i,run.text])i+=1print("*"*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, '勘察人(全称):_______________________________']]

原文只有一个段落(Line 2)出现了字符串 “勘察人(全称):”,此处即为要修改的段落。

#确定需要修改的段落之中的具体句子( paragraph ---> run)
line_number=[x[0] for x in find_paragraph]
find_run=find_index_run(line_number,document)
print(find_run)

输出:

line_number 2 Run 0 Content: 勘察人(全称):
line_number 2 Run 1 Content: _______________________________
********************
[[2, 0, '勘察人(全称):'], [2, 1, '_______________________________']]

段落2的第0个run是字符串 ‘勘察人(全称):’,第1个run是字符串 ‘_______________________________’,段落2的第0处run( [2,1] )即为要修改的第一处。

同理,分别以“元)”、“(总日历天数)”为字符串确定需要修改的位置[17,5]以及[12,3]。此三值即为需要修改的位置,记为Location.

Location=[[2,1],[17,5],[12,3],]

3. 使用定义的函数修改指定的位置并保存

print(Excel_1.iloc[0,:])

输出:

乙方         刘一
合同金额    10000
工期         10
Name: 0, dtype: object

修改并保存文件:

change_paragraph_value(Location[0],str(Excel_1.iloc[0,0]),document)
change_paragraph_value(Location[1],str(Excel_1.iloc[0,1]),document)
change_paragraph_value(Location[2],str(Excel_1.iloc[0,2]),document)
document.save("Sample."+str(i)+str(Excel_1.iloc[i,0])+".docx")

三、批量生成docx

import os
file_path=os.getcwd()+'\\Sample'
if not os.path.exists(file_path): #如果文件目录不存在try:os.mkdir(file_path) #生成Sample文件夹用于存放系列word文件except Exception as e:print(e)for i in range(Excel_1.shape[0]):document = Document("建设工程勘察合同.docx")change_paragraph_value([Location[0]],str(Excel_1.iloc[i,0]),document)change_paragraph_value([Location[1]],str(Excel_1.iloc[i,1]),document)change_paragraph_value([Location[2]],str(Excel_1.iloc[i,2]),document)document.save(file_path+"\\Sample"+str(i)+str(Excel_1.iloc[i,0])+".docx")

输出:

四、反向操作,根据word生成excel

Location=[[2,1],[17,5],[12,3],] #已知需要提取信息的位置[paragraph,run]
files=os.listdir(file_path)
#os.walk()也可以,且功能更强大
excel_file=[]
for file in files:document = Document(os.path.join(file_path,file))in_run=[]for i in Location:in_run.append(document.paragraphs[i[0]].runs[i[1]].text)    excel_file.append(in_run)
print(excel_file)

输出:

[['刘一', '10000', '10'],['陈二', '20000', '20'],['张三', '30000', '30'],['李四', '40000', '40'],['王五', '50000', '50'],['赵六', '60000', '60'],['钱七', '70000', '70'],['周八', '80000', '80'],['吴九', '90000', '90'],['郑十', '100000', '100']]

接下来加上表头写入excel即可。

output=pd.DataFrame(excel_file, columns=['乙方', '金额', '工期'])
output.to_excel(os.path.join(file_path,"sample.xlsx"))

相关资源已上传至CSDN, 请点击0积分下载

python办公自动化之批量生成docx——根据excel生成word、根据word生成excel相关推荐

  1. python办公自动化之批量修改docx——以修改含有表格的word文件为例

    文章目录 系列文章 前言 一.docx类的包很多,但docx一个就够用 二.快速熟悉docx 三.代码 1. python-docx修改段落中的内容 2. python-docx修改表格中的内容 总结 ...

  2. 使用Python办公自动化:将文本、表格及图片写入到Word

    使用Python办公自动化:将文本.表格及图片写入到Word,其中包含写入文本到Word中的一些常用函数,并含有写入表格与图片到Word中的常用函数,还有控制段落.字体样式的相关语句. 代码如下: f ...

  3. Python办公自动化|批量生成请假条

    大家好,我是早起. 本文就将基于一个真实的办公案例进行讲解如何提取Excel内容并创建Word,主要将涉及以下三个知识点 " openpyxl 读取 Excel 文件 python-docx ...

  4. Python办公自动化(四) | 批量处理文件

    用同样的方式处理一堆文件夹中文件,这并不难,但就是繁.所以在遇到机械式的操作时一定要记得使用Python来合理偷懒!今天我将以处理微博热搜数据来示例如何使用Python批量处理文件夹中的文件,主要将涉 ...

  5. python 批量打印文档_使用python将Excel数据填充Word模板并生成Word

    [项目需求] Excel中有一万多条学生学平险数据,需要给每位学生打印购买回执单,回执单包括学生姓名,身份证号,学校等信息,目前只能从Excel拷贝数据到Word模板中,然后打印,效率及其低下,寻求帮 ...

  6. python办公自动化实例(二):批量生成派工单

    场景: 实现效果: 如下图1所示,有如下多条工单,需要向施工单位派发,每条工单都有一个相同模板,如图2所示 图1 图2 通过使用python程序,批量生成这些工单,并转为pdf文件,方便打印,效果如下 ...

  7. Python办公自动化(二)|从Excel到Word

    前言 在前几天的文章中我们讲解了如何从Word表格中提取指定数据并按照格式保存到Excel中,今天我们将再次以一位读者提出的真实需求来讲解如何使用Python从Excel中计算.整理数据并写入Word ...

  8. Python办公自动化--Word、Excel、PDF

    一.Python自动化之Excel python操作excel主要用到openpyxl库.其主要针对xlsx格式的excel进行读取和编辑.下面简单介绍其使用方法及命令.除openpyxl库外,还有x ...

  9. Python办公自动化|光速对比并提取两份Word/Excel中的不同元素

    如果你经常与Excel或Word打交道,那么从两份表格/文档中找到不一样的元素是一件让人很头疼的工作,当然网上有很多方法.第三方软件教你如何对比两份文件.本文就将以两份真实的Excel/Word文件为 ...

最新文章

  1. SpringBoot高级消-息-RabbitMQ基本概念简介
  2. JAVA入门[22]—thymeleaf
  3. 在Linux下编译安装Apache2(2)
  4. linq to xml 操作sitemap
  5. 简单解释 MapReduce 算法
  6. java在线找错_平台配置及测试错误提示及解决方案
  7. 这样才是代码管理和 Commit 的正确姿势 | 研发效能提升36计
  8. 新疆特岗计算机考试题,2020新疆特岗教师笔试资料领取(小学信息技术)
  9. emule学习与分析二 上 建立连接过程分析
  10. 大数运算(加减乘除)
  11. 超有用的word宏代码——批量裁剪图片
  12. 小米4进入开发者模式
  13. 为知笔记Markdown笔记里的插入代码怎么实现/为知笔记怎怎么插入代码段
  14. 2015出现神曲空挡期,玖月奇迹接棒筷子兄弟?
  15. c语言cast的用法,static_cast 用法
  16. [数据库] mysql
  17. PS新手如何快速抠白色背景的玻璃瓶
  18. MySQL卸载后,服务仍然存在的解决方案
  19. [VisionPro] CogPMAlignTool 工具详解
  20. 消息中间件 - MQ的相关概念

热门文章

  1. Docker快速上手
  2. 解决nohup: ignoring input and appending output to 'nohup.out'
  3. INIT_DELAYED_WORK() 函数剖析
  4. 机器学习博士自救指南(严肃者慎入)
  5. SpringBoot Elasticsearch
  6. 清华自研时间序列数据库Apache IoTDB原理解析
  7. 借助三大举措 IBM GBS启动全新咨询模式
  8. smartforms例子
  9. 诚之和:警惕不良剧本推理游戏伤害未成年人
  10. 2021年全国职业院校技能大赛(中职组)网络安全竞赛试题(7)(总分100分)