python-docx 库教程

Python-docx 库介绍

官网文档
python-docx 是一个用于创建和修改 Microsoft Word (.docx) 文件的 Python 库。它允许你通过编程方式生成格式化的文档,添加文本、段落、表格、图片等元素,而无需依赖 Microsoft Word 应用程序。

主要功能
  • 创建新的 Word 文档
  • 添加段落、标题和列表
  • 设置文本格式(字体、大小、颜色、加粗、斜体等)
  • 插入表格和处理表格数据
  • 添加图片和图表
  • 管理文档样式和布局
  • 读取和修改现有文档
安装 python-docx 库:当前版本1.1.2
pip install python-docx==1.1.2

一,基本使用示例

docx_basics.py

from docx import Document
from docx.shared import Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT# 创建新文档
doc = Document()# 添加标题
doc.add_heading('Python-docx示例文档', 0)# 添加段落
paragraph = doc.add_paragraph('这是一个使用python-docx库创建的示例文档。')# 添加带有格式的文本
paragraph.add_run(' 这部分文本是粗体').bold = True
paragraph.add_run(',这部分是斜体').italic = True# 添加不同级别的标题
doc.add_heading('一级标题', level=1)
doc.add_heading('二级标题', level=2)# 添加列表
doc.add_paragraph('无序列表项', style='List Bullet')
doc.add_paragraph('有序列表项', style='List Number')# 添加表格
table = doc.add_table(rows=1, cols=3)
table.alignment = WD_TABLE_ALIGNMENT.CENTER
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '姓名'
hdr_cells[1].text = '年龄'
hdr_cells[2].text = '职业'# 添加表格数据
row_cells = table.add_row().cells
row_cells[0].text = '张三'
row_cells[1].text = '30'
row_cells[2].text = '工程师'# 添加图片
doc.add_picture('example.png', width=Inches(4))# 保存文档
doc.save('demo.docx')

docx_reading.py

from docx import Document# 打开现有文档
doc = Document('existing_document.docx')# 读取所有段落
for para in doc.paragraphs:print(para.text)# 修改段落
if len(doc.paragraphs) > 0:doc.paragraphs[0].text = '这是修改后的第一段内容'# 访问表格
if len(doc.tables) > 0:table = doc.tables[0]for row in table.rows:for cell in row.cells:print(cell.text)# 添加新内容
doc.add_paragraph('这是添加到现有文档的新段落')# 保存修改
doc.save('modified_document.docx')

文档样式和格式设置

docx_styles.py

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTdoc = Document()# 设置段落格式
paragraph = doc.add_paragraph('这是一个居中对齐的段落,字体为12磅,颜色为蓝色。')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 设置文本格式
run = paragraph.runs[0]
run.font.name = 'Arial'
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(0, 0, 255)  # 蓝色
run.bold = True
run.italic = True# 创建自定义样式
style = doc.styles.add_style('MyHeading', 1)  # 1表示标题样式
style.font.name = '微软雅黑'
style.font.size = Pt(16)
style.font.bold = True# 使用自定义样式
doc.add_heading('自定义样式标题', level=1).style = doc.styles['MyHeading']doc.save('styled_document.docx')

限制和注意事项

  • python-docx 只能处理.docx格式的文件,不能处理旧版的.doc格式
  • 对于复杂的 Word 文档(如包含高级格式、复杂图表或特殊效果),可能无法完全复制其格式
  • 某些 Word 功能(如脚注、尾注、复杂的页眉页脚)的支持有限
  • 该库主要关注文档内容的操作,对于文档的布局和打印设置支持较少

二, Python-docx 库的类结构

python-docx 库基于 Open XML 标准构建,采用层次化的类结构来表示 Word 文档的各个组件。主要类及其关系如下:

  • Document:代表整个 Word 文档,是所有其他元素的容器
  • Section:文档的节,可包含不同的页面设置
  • Paragraph:段落,包含文本和格式信息
  • Run:文本运行,共享相同格式的文本块
  • Table:表格,由行和单元格组成
  • TableStyle:表格样式
  • Style:文档样式
  • Header/Footer:页眉和页脚
  • Image:图片对象

这些类之间的关系是嵌套的:Document 包含多个 Section,每个 Section 包含多个 Paragraph 和 Table,而 Paragraph 又由一个或多个 Run 组成。

常用类和方法详解

  1. Document 类
    创建和打开文档:
from docx import Document# 创建新文档
doc = Document()# 打开现有文档
doc = Document('existing_document.docx')# 保存文档
doc.save('new_document.docx')

添加内容:

# 添加段落
doc.add_paragraph('这是一个新段落')# 添加标题
doc.add_heading('这是一级标题', level=1)# 添加分页符
doc.add_page_break()
  1. Paragraph 类
    段落操作:
# 获取段落
paragraphs = doc.paragraphs  # 获取所有段落
first_para = doc.paragraphs[0]  # 获取第一个段落# 添加段落
paragraph = doc.add_paragraph('初始文本')# 添加文本到段落
paragraph.add_run('额外的文本')# 设置段落格式
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中对齐
paragraph.paragraph_format.line_spacing = 1.5  # 1.5倍行距
  1. Run 类
    文本格式设置:
# 创建带有格式的文本
run = paragraph.add_run('这是粗体斜体文本')
run.bold = True
run.italic = True
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(255, 0, 0)  # 红色
run.font.name = 'Arial'
  1. Table 类
    表格操作:
# 添加表格
table = doc.add_table(rows=3, cols=3)# 访问单元格
cell = table.cell(0, 0)  # 第一行第一列
cell.text = '单元格内容'# 遍历表格
for row in table.rows:for cell in row.cells:print(cell.text)# 设置表格样式
table.style = 'Table Grid'
  1. 样式操作
    应用和创建样式:
# 应用现有样式
paragraph.style = doc.styles['Heading 1']# 创建自定义样式
from docx.shared import Pt
from docx.enum.style import WD_STYLE_TYPEstyle = doc.styles.add_style('MyStyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.name = 'Arial'
style.font.size = Pt(12)
style.font.bold = True
  1. 图片和媒体
    插入图片:
from docx.shared import Inches# 添加图片
doc.add_picture('image.jpg', width=Inches(4))
  1. 页眉和页脚
    页眉页脚操作:
# 获取第一个节的页眉
header = doc.sections[0].header# 添加内容到页眉
header.paragraphs[0].text = '这是页眉'# 获取页脚
footer = doc.sections[0].footer
footer.paragraphs[0].text = '这是页脚'

示例:创建复杂文档,包含多种元素文档的完整示例

complex_document.py

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE# 创建文档
doc = Document()# 添加标题
title = doc.add_heading('示例文档', level=0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加段落
doc.add_paragraph('这是一个使用python-docx创建的示例文档。')# 添加带格式的段落
paragraph = doc.add_paragraph('这是一个包含 ')
paragraph.add_run('粗体').bold = True
paragraph.add_run(' 和 ')
paragraph.add_run('斜体').italic = True
paragraph.add_run(' 文本的段落。')# 添加图片
doc.add_picture('sample.jpg', width=Inches(4))# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'# 设置表头
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '项目'
hdr_cells[1].text = '描述'
hdr_cells[2].text = '价格'# 添加数据行
data = [('产品A', '这是产品A的描述', '$100'),('产品B', '这是产品B的描述', '$200'),('产品C', '这是产品C的描述', '$300')
]for item, desc, price in data:row_cells = table.add_row().cellsrow_cells[0].text = itemrow_cells[1].text = descrow_cells[2].text = price# 添加分页符
doc.add_page_break()# 添加列表
doc.add_paragraph('项目列表:', style='List Bullet')
doc.add_paragraph('项目1', style='List Bullet 2')
doc.add_paragraph('项目2', style='List Bullet 2')# 添加自定义样式
style = doc.styles.add_style('MyQuote', WD_STYLE_TYPE.PARAGRAPH)
style.base_style = doc.styles['Quote']
style.font.size = Pt(11)
style.font.italic = True# 使用自定义样式
doc.add_paragraph('这是一个引用段落', style='MyQuote')# 保存文档
doc.save('complex_document.docx')

注意事项

  • python-docx 的 API 设计遵循 Word 文档的逻辑结构,但某些高级功能可能需要更复杂的操作
  • 文档格式(如样式、对齐方式)通常应用于段落或运行对象,而非单个字符
  • 对于复杂的文档操作,可能需要结合使用多个类和方法
  • 建议在开发过程中参考官方文档以获取最新的 API 信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/909039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible小试牛刀

注意事项 除了安装的zabbix相关组件 使用此脚本安装的所有软件版本均为系统默认版本 安装软件 zabbix相关组件,包括server,agent等 MySQL Redis NGINX openjdk maven nodejs keepalived iptables ipvsadm 使用剧本 --- - hosts: allname…

MCP使用

什么是MCP Model Context Protocol (MCP) 是由 Anthropic 公司于 2024 年 11 月推出的一种开放协议标准,目的在于标准化LLM 与外部数据源、工具及服务之间的交互方式。MCP 被广泛类比为“AI 领域的 USB-C 接口” MCP与Function Calling的区别 MCP 的核心概念 1.…

边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染

过去十年,前端项目架构经历了从简单 HTML 文件到复杂框架的飞跃,但很多开发者忽略了**“渲染位置”与“资源交付方式”**对体验与性能的根本性影响。 从最初的浏览器渲染,到现在“在离用户最近的地方动态返回 HTML”,架构正在悄悄…

linux学习记录(六)三个常用命令介绍

1.vim命令 Vim是由Vi发展过来的文本编译器,其代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 1.1 语法 vim filename 1.2 vi/vim的使用 vi/vim 共分为三种模式,命令模式(Command Mode)、…

用Python获取京东关键字接口的用户指南

在电商数据分析和市场研究中,获取京东平台的关键字搜索结果数据具有重要意义。本文将详细介绍如何使用Python调用京东开放平台的API接口,获取关键字相关的商品数据,并进行解析和处理。 一、准备工作 (一)注册京东开发…

观测云,全球领先的监控观测平台亮相亚马逊云科技中国峰会!

观测云每年都不会缺席亚马逊云科技峰会 忙完一整季的产品发布,我们终于将目光投向这场全球顶尖的云技术盛会——2025亚马逊云科技中国峰会。如果你也在这个领域,应该已经感觉到了:这不只是一场大会,而是一个信号。AI、可观测性、…

消息队列处理模式:流式与批处理的艺术

🌊 消息队列处理模式:流式与批处理的艺术 📌 深入解析现代分布式系统中的数据处理范式 一、流式处理:实时数据的"活水" 在大数据时代,流式处理已成为实时分析的核心技术。它将数据视为无限的流,…

一起学习swin-transformer(一)

Transform学习链接 从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention-CSDN博客 Transformer-PyTorch实战项目——文本分类_transformer文本分类 pytorch-CSDN博客 从零开始设计Transformer模型(2/2)——…

PyQt常用控件的使用:QFileDialog、QMessageBox、QTreeWidget、QRadioButton等

文章目录 一、控件常用函数介绍二、QFileDialog(文件类操作)三、QMessageBox(对话框)四、QTreeWidget(树结构类操作)4.1 树结构的初始化4.2 递归读取完整树结构4.3 两QTreeWidget滑轮同步滑动4.4 信号槽绑定 五、QCombox改写下拉多…

校园导航系统核心技术解析:高精度定位与 AR 实景导航的应用实践

本文面向校园信息化建设者、技术开发者及教育行业数字化转型关注者,旨在解析如何通过 “高精度定位 AR/VR 场景化服务” 技术体系,破解校区因建筑复杂、人流密集导致的寻路效率低下问题,探讨如何利用现有技术解决校园内导航难题,…

java大文件分段下载

后端代码 package com.jy.jy.controller;import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.a…

antd-vue - - - - - a-table排序

antd-vue - - - - - a-table排序 1. 重点代码:2. 代码示例:3. 进阶版写法 1. 重点代码: sorter: {compare: (a, b) > a.columnsKeys - b.columnsKeys,multiple: 1, },解析: compare: 自定义排序函数,用于比较两个对象。 multiple: 排序优…

【AI】模型vs算法(以自动驾驶为例)

模型vs算法(以自动驾驶为例) 一、自动驾驶的核心任务二、以自动驾驶为例,模型vs算法的实际分工1. 感知环节:“看懂”周围环境(如识别行人、车道线、车辆)2. 预测环节:“预判”其他交通参与者的行…

机器学习与深度学习19-线性代数02

目录 前文回顾6.协方差矩阵与主成分分析7.矩阵的奇异值分解8.神经网络的前向传播和反向传播9.矩阵的迹10.特征工程的多项式特征扩展 前文回顾 上一篇文章链接:地址 6.协方差矩阵与主成分分析 协方差矩阵是一个对称矩阵,用于衡量随机变量之间的线性相关…

青藏高原ASTER_GDEM数据集(2011)

共享方式:开放获取数据大小:73.69 GB数据时间范围:2012-04-08 — 2012-05-08元数据更新时间:2021-10-15 数据集摘要 ASTER Global Digital Elevation Model (ASTER GDEM)是美国航空航天局 (NAS…

代码随想录训练营二十六天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树的搜索 98.验证二叉搜索树

654.最大二叉树: 文档讲解:代码随想录|654.最大二叉树 视频讲解:又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili 状态:已做出 思路: 这道题目要求使用给定…

临时抱佛脚v2

术语解释 多范式 (Multi-paradigm) 指支持多种编程范式,如面向对象编程和函数式编程,允许开发者根据需求选择最合适的风格。 函数式编程 (Functional Programming) 一种编程范式,将计算视为数学函数的求值,强调不变性、无副作用…

MCGS和1200plc变量表格式编辑

设备编辑窗口---设备信息导出---另存为xx.CSV文件 在上面导出的表格基础上编辑 本体位的编辑: db数据块位编辑 db数据块int类型 (4.14应改为4.140,0不省略) db数据块real类型 通道号,地址均按顺序排列 ,寄存期地址最后一位0不能省略&#…

Android高性能音频与图形开发:OpenSL ES与OpenGL ES最佳实践

引言 在移动应用开发中,音频和图形处理是提升用户体验的关键要素。本文将深入探讨Android平台上两大核心多媒体API:OpenSL ES(音频)和OpenGL ES(图形),提供经过生产环境验证的优化实现方案。 …

GaussDB分布式数据库调优方法总结:从架构到实践的全链路优化指南

GaussDB分布式数据库调优方法总结:从架构到实践的全链路优化指南 GaussDB作为华为自主研发的分布式数据库,基于MPP(大规模并行处理)架构设计,支持存储与计算分离、列存/行存混合引擎、向量化执行等核心技术&#xff0…