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文档 段落、图片、表格相关推荐

  1. python操作替换word文档段落及表格table指定内容,不改变格式

    from docx import Document##读取文件 doc = Document('D:/pywenjian/word/2023年2月月报.docx')# 2023年2月 year = & ...

  2. 办公室小姐姐的福利!用Python批量提取word文档中的表格和图片内容

    点上方"菜鸟学Python",选择"星标" 第491篇原创干货,第一时间送达 最近有许多小伙伴想要一些自动化办公的福利小程序,今天就满足大家的需求.日常的办公过 ...

  3. Python读取Word文档段落或者表格

    Python解析word文档 1 .安装并导依赖包 2.word的doc格式转docx格式 3.解析word_doc文档段落.表格内容 4.word读取表格存列表封装优化,节省读取时间 1 .安装并导 ...

  4. python docx修改word文档格式

    修改word文档格式,包括修改目录字体字号间距,修改一级标题字体字号间距,二级标题字体字号间距....正文字体字号间距,表格中的文字的字体字号间距,以图或表开头的图名称和表名称的字体字号间距. wor ...

  5. Freemarker下载Word文档(文字+图片+表格)Idea示例 (附word展示图片异常解决方案)(附JPEG格式图片通过imageio.read方法读取为null解决方案)

    流程:拿到word模板 转为ftl格式并填充占位符参数,调用java代码填充参数即可 (文末附word打开图片显示异常,wps打开却显示正常的解决方案) (文末附Jpeg格式图片获取为null解决方案 ...

  6. python 合并word文件_使用python docx合并word文档

    合并包含所有样式的两个文档的另一种方法是使用python库docxcompose(https://pypi.org/project/docxcompose/).我们不需要明确定义样式,也不必逐段阅读文 ...

  7. python docx处理word文档中表格合并问题

    问题描述 python中用docx库读取word文件,若word文件中包含合并的表格表格 则通过docx读取显示: file = docx.Document(path) for table in fi ...

  8. python 给word添加背景图片_Python如何使用word文档插入图片和表格

    Python如何使用word文档插入图片和表格 发布时间:2020-10-26 13:49:29 来源:亿速云 阅读:101 作者:挣扎的蓝藻 这篇文章运用简单易懂的例子给大家介绍Python如何使用 ...

  9. Python 操作Word文档插入图片和表格实例演示

    Python 操作Word文档插入图片和表格实例演示 效果图 实现过程 ① python-docx 库安装 ② word 文档插入图片演示 ③ word 文档插入表格演示 [ 文章推荐 ] Pytho ...

最新文章

  1. python入门编程软件免费-Python编程干货免费领取!!!
  2. 根据文字计算Label的尺寸
  3. SAP中用json数据格式调用http接口发送短信邮件案例
  4. python websocket服务器https_Socket与WebSocket以及http与https重新总结
  5. 六时出行 App 隐私政策
  6. linux备份和还原设置密码,AnyBackup Linux操作系统备份与恢复最佳实践手册(33页)-原创力文档...
  7. 如何避免腾讯云彻底搞丢“天价数据”事件再次发生?
  8. 本周测试服务器角色转移系统仅开放转入,梦幻西游10月8日更新内容一览
  9. TCP粘包问题的解决方案01——自定义包体
  10. react navigation传值给上一页面
  11. C# 电子白板软件开发
  12. eplan连接定义点不显示_CAD和EPLAN!电气制图你会选择哪个?
  13. ThoughtWorks面试篇
  14. vue 强制清理浏览器缓存
  15. 使用mpvue实现动态图片波浪图效果
  16. Sql Server 03
  17. 天文学 python_4个天文学入门Python工具
  18. python如何群控手机_python调用adb脚本来实现群控安卓手机初探
  19. Python编程之求数列20项和
  20. 【5G网络优化工程师课程5——5G空中接口物理层(物理信道/信号——PDCCH】

热门文章

  1. redis自动持久化到mysql,redis笔记-数据库之持久化策略
  2. java 判断文件是否存在 存在就删除_java中如何判断文件是否存在,不存在则新建文件...
  3. 用11行Python代码,实现动态二维码制作
  4. Azure ARM (13) 从现有VHD文件,创建新的ARM VM
  5. Python数据分析(二): Numpy技巧 (4/4)
  6. 明年新iphone使用增强版5nm芯片_三星5nm旗舰手机芯片新爆料!性能超高通骁龙875,明年量产...
  7. 爱开源的微软是如何击败 Facebook、Google 成为 GitHub No.1 的?
  8. 基本的信号——阶跃信号与阶跃序列
  9. Linux服务器基本命令
  10. Java基础方法重写