实例演示python-docx 读写word文档 段落、图片、表格
python-docx 读写word文档 段落、图片、表格
- 简介
- 运行环境与配置
- 成果物展示
- 模板word
- 输出word
- python-docx库安装
- Python-docx 的使用技巧
- 关于文档编写和样式
- 设置页眉页脚
- 代码展示
- 0 库引用
- 1 辅助程序
- 2 读取模板与查看模板内容
- 2.1 读取模板
- 2.2 查看模板内容
- 段落内容
- 表格内容
- 模板样式查询
- 3 写入内容
- 4 保存文件
- 总结和心得
简介
最近在工作中一直接触到统计月报这块的文档,之前一直是把结果打印在Jupyter lab上,然后通过复制粘贴的方式放入Word文档里,但是最近统计月报的数量越来越多,作者连复制粘贴也懒得想做了 ,遂学习了python-docx的使用,将所有结果直接写入word,最后写了这个文章,希望也能帮助到大家解放自己的双手~
完整Github码源地址,有帮助到大家的话欢迎点一下星星:Python-docx_Sample
运行环境与配置
环境 | 信息 |
---|---|
系统 | WIN10 |
软件 | Jupyter Lab 2.2.6 |
语言 | Python 3.8.5 |
python-docx | 0.8.10 |
完整Github码源 | Python-docx_Sample |
成果物展示
模板word
输出word
python-docx库安装
为什么要单独把库的安装单独列一块,因为作者一开始没注意名称,直接pip install docx,结果发现根本没法使用,最后查了半天才发现作者像个智障一样 下了一个“同名”的库,原来这个库写作python-docx
,用作docx
。
什么叫写作和用作,请大家分别看安装语句和引用语句就能理解了。
安装语句
pip install python-docx
引用语句
from docx import Document
Python-docx 的使用技巧
关于文档编写和样式
在作者这里,其实十分不推荐大家直接用python-docx直接生成新的Word文档,因为这样不仅会增加开发的难度(例如:页眉页脚、创建样式、创建样式和创建样式),如果文档需要修改,代码的修改会更加困难!因此作者推荐的方式是,先手动制作一份Word模板,再使用python-docx通过修改内容的方式去编写Word文档。
设置页眉页脚
作者设置页眉页脚的方法是在模板里就提前设置好,原因很简单,就像普通编辑word文档一样,在使用 python-docx 修改和插入段落、图片和表格的时候是不会影响页眉页脚的。
页眉示例:
页脚示例:
代码展示
0 库引用
from docx import Document,shared
import random #这里只是为生成一些数据用,使用时记得去掉哦
1 辅助程序
由于 python-docx 返回的的表格是一个特殊的 table 格式,所以读取和写入都需要一定的步骤才能完成 (和pandas比起来真是差远了) 。因此作者特地配备了一个自己写的_docx类来辅助表格的读写(包括一个pandas数据的转换功能),在这里也开放给大家供大家方便使用,使用的时候可以根据需要对 table_writer 模块进行调整。
class _docx:def table_reader(table):table_list = []for i, row in enumerate(table.rows): # 读每行row_content = []for cell in row.cells: # 读一行中的所有单元格c = cell.textif '\n' in c: c=c.replace('\n','') # 删除换行符row_content.append(c)table_list.append(row_content)return table_listdef table_filler(table,table_list):for i, row in enumerate(table.rows): # 读每行if i==0: continue # 跳过首行for j,cell in enumerate(row.cells): # 读一行中的所有单元格par = cell.paragraphs[0]par.text = str(table_list[i][j]) # 写入内容par.style.name = '表内容' # 添加样式def table_transfer(pd_df):array = np.array(pd_df.reset_index())array_list = array.tolist()return array_listdef table_writer(table,pd_df):table_data = _docx.table_transfer(pd_df)table_list = _docx.table_reader(table)table_list[1:] = table_data_docx.table_filler(table,table_list)
2 读取模板与查看模板内容
2.1 读取模板
filename = 'Sample_Template.docx'
document = Document(filename)
2.2 查看模板内容
在配置内容的时候往往需要对比,因此打印段落号和内容能很好的协助读写内容。
此外,document.paragraphs
无法读取到图片和表格,如果需要查看图片和表格,可以使用 document.tables) 和
document.inline_shapes`。
段落内容
for i,parag in enumerate(document.paragraphs):print('段落{}'.format(i),parag.text)
打印结果:
表格内容
table = document.tables[0]
table_list = _docx.table_reader(table)
table_list
打印结果:
模板样式查询
查询了模板里的样式后,在添加段落、表格、图片的时候就可以通过给.style.name
赋值直接使用已有的样式,十分方便实用!
查询方式:
for s in document.styles:print(s.type,s.name)
打印结果:
3 写入内容
i = 8 # 总标题行
document.paragraphs[i].text,i = '程序员种菜指南',i+1 # 写入内容,i=i+1
i += 1 # 再加一行到标题一行document.paragraphs[i].text,i = '一、程序员为什么种菜',i+1 # 写入内容,i=i+1
document.paragraphs[i].text,i = '1.1、种菜的好处',i+1 # 写入内容,i=i+1
content = '种菜可以吃。'
document.paragraphs[i].text,i = content,i+1 # 写入内容,i=i+1
document.paragraphs[i].text,i = '1.2、程序员种菜的好处',i+1 # 写入内容,i=i+1
content = '程序员可以批量种菜。'
document.paragraphs[i].text,i = content,i+1 # 写入内容,i=i+1document.paragraphs[i].text,i = '二、种菜流程',i+1 # 写入内容,i=i+1
document.paragraphs[i].text,i = '2.1、种菜流程图',i+1 # 写入内容,i=i+1
content = '程序员种菜主要流程是播种、施肥、浇水和收割。'
document.paragraphs[i].text,i = content,i+1 # 写入内容,i=i+1picture = '程序员种菜指南.png'
document.paragraphs[i].add_run().add_picture(picture,height=shared.Cm(6),width=shared.Cm(10)) # 在段落内插入图片
i += 1document.paragraphs[i].text,i = '2.2、种菜成果表',i+1 # 写入内容,i=i+1for row in range(1,len(table_list)):for col in range(1,len(table_list[row])):table_list[row][col] = random.randint(0,10) # 程序员'收集'并填写结果
_docx.table_filler(table,table_list) # 将结果写入表格
4 保存文件
document.save('Sample_Result.docx')
总结和心得
- 设置和调整模板
- 设置和调整模板
- 设置和调整模板
重要的话要说三次!只要把模板Word文档的页眉、页脚、样式设置好,必要的时候可以多设置几个样式。那么剩下的只需要在读取之后往对应的段落或者表格塞东西就好了,真的很方便哦!!
实例演示python-docx 读写word文档 段落、图片、表格相关推荐
- python操作替换word文档段落及表格table指定内容,不改变格式
from docx import Document##读取文件 doc = Document('D:/pywenjian/word/2023年2月月报.docx')# 2023年2月 year = & ...
- 办公室小姐姐的福利!用Python批量提取word文档中的表格和图片内容
点上方"菜鸟学Python",选择"星标" 第491篇原创干货,第一时间送达 最近有许多小伙伴想要一些自动化办公的福利小程序,今天就满足大家的需求.日常的办公过 ...
- Python读取Word文档段落或者表格
Python解析word文档 1 .安装并导依赖包 2.word的doc格式转docx格式 3.解析word_doc文档段落.表格内容 4.word读取表格存列表封装优化,节省读取时间 1 .安装并导 ...
- python docx修改word文档格式
修改word文档格式,包括修改目录字体字号间距,修改一级标题字体字号间距,二级标题字体字号间距....正文字体字号间距,表格中的文字的字体字号间距,以图或表开头的图名称和表名称的字体字号间距. wor ...
- Freemarker下载Word文档(文字+图片+表格)Idea示例 (附word展示图片异常解决方案)(附JPEG格式图片通过imageio.read方法读取为null解决方案)
流程:拿到word模板 转为ftl格式并填充占位符参数,调用java代码填充参数即可 (文末附word打开图片显示异常,wps打开却显示正常的解决方案) (文末附Jpeg格式图片获取为null解决方案 ...
- python 合并word文件_使用python docx合并word文档
合并包含所有样式的两个文档的另一种方法是使用python库docxcompose(https://pypi.org/project/docxcompose/).我们不需要明确定义样式,也不必逐段阅读文 ...
- python docx处理word文档中表格合并问题
问题描述 python中用docx库读取word文件,若word文件中包含合并的表格表格 则通过docx读取显示: file = docx.Document(path) for table in fi ...
- python 给word添加背景图片_Python如何使用word文档插入图片和表格
Python如何使用word文档插入图片和表格 发布时间:2020-10-26 13:49:29 来源:亿速云 阅读:101 作者:挣扎的蓝藻 这篇文章运用简单易懂的例子给大家介绍Python如何使用 ...
- Python 操作Word文档插入图片和表格实例演示
Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...
最新文章
- python入门编程软件免费-Python编程干货免费领取!!!
- 根据文字计算Label的尺寸
- SAP中用json数据格式调用http接口发送短信邮件案例
- python websocket服务器https_Socket与WebSocket以及http与https重新总结
- 六时出行 App 隐私政策
- linux备份和还原设置密码,AnyBackup Linux操作系统备份与恢复最佳实践手册(33页)-原创力文档...
- 如何避免腾讯云彻底搞丢“天价数据”事件再次发生?
- 本周测试服务器角色转移系统仅开放转入,梦幻西游10月8日更新内容一览
- TCP粘包问题的解决方案01——自定义包体
- react navigation传值给上一页面
- C# 电子白板软件开发
- eplan连接定义点不显示_CAD和EPLAN!电气制图你会选择哪个?
- ThoughtWorks面试篇
- vue 强制清理浏览器缓存
- 使用mpvue实现动态图片波浪图效果
- Sql Server 03
- 天文学 python_4个天文学入门Python工具
- python如何群控手机_python调用adb脚本来实现群控安卓手机初探
- Python编程之求数列20项和
- 【5G网络优化工程师课程5——5G空中接口物理层(物理信道/信号——PDCCH】
热门文章
- redis自动持久化到mysql,redis笔记-数据库之持久化策略
- java 判断文件是否存在 存在就删除_java中如何判断文件是否存在,不存在则新建文件...
- 用11行Python代码,实现动态二维码制作
- Azure ARM (13) 从现有VHD文件,创建新的ARM VM
- Python数据分析(二): Numpy技巧 (4/4)
- 明年新iphone使用增强版5nm芯片_三星5nm旗舰手机芯片新爆料!性能超高通骁龙875,明年量产...
- 爱开源的微软是如何击败 Facebook、Google 成为 GitHub No.1 的?
- 基本的信号——阶跃信号与阶跃序列
- Linux服务器基本命令
- Java基础方法重写