python从入门到精通(二十六):python文件操作之Word全攻略(基于python-docx)

python文件操作之word技巧大全

  • word技巧基础到高级操作大全
    • A.准备工作
      • 1. 安装python-docx库
      • 2. 导入库
    • B.基础操作
      • 1. 创建Word文档
        • 1.1 创建文档对象
        • 1.2 添加word标题
        • 1.3 添加word段落
        • 1.4 设置段落样式
        • 1.5 创建有序列表
        • 1.6 创建无序列表
        • 1.7添加word分页
        • 1.8 添加word图片
        • 1.9 添加word表格
        • 1.10 word表格处理
        • 1.11 添加超链接
        • 1.12 保存word文档
      • 2.打开现有word文档
        • 2.1 读取段落内容
        • 2.2 修改段落内容
        • 2.3 读取表格内容
        • 2.4 读取表格的值
        • 2.5 写入数据到表格
        • 2.6 插入图表
    • C.内容修改与基础样式
      • 1. 文本格式设置
      • 2. 段落格式设置
      • 3.修改图片尺寸
    • D.插入操作
      • 1. 插入页眉和页脚
      • 2. 插入目录
      • 3. 插入脚注和尾注
    • E.高级复杂操作
      • 遍历所有段落替换文本
      • 清空指定段落
      • 遍历所有表格替换文本
      • 删除第一个表格
    • F. 典型案例分享
      • 1.批量处理文档替换文档内容
      • 2.提取表格中的数据替换到word
      • 3.提取word中的数据替换到表格

word技巧基础到高级操作大全

在本教程中,我们将学习如何使用Python对Word文档进行操作,包括添加、修改、格式化等内容。我们将使用python-docx库来完成这些操作。以下是本教程的内容概览:

A.准备工作

1. 安装python-docx库

首先,确保你的Python环境已经安装了python-docx库。如果没有安装,可以通过以下命令进行安装:

pip install python-docx

2. 导入库

在Python脚本中,首先导入docx库:

from docx import Document

B.基础操作

1. 创建Word文档

学习前请先熟记一下字段代表含义

在这里插入图片描述

1.1 创建文档对象

创建一个新的Word文档:

doc = Document()
1.2 添加word标题
# 添加标题(级别0-4)
doc.add_heading('主标题', level=0)  
doc.add_heading('二级标题', level=2)  # [[3, 6]]
1.3 添加word段落
paragraph = doc.add_paragraph('这是一个普通段落')
run = paragraph.add_run('追加文本今天学习python处理word')  # 支持分段式样式 [[4, 19]]
paragraph.add_run('Bold text').bold = True   #添加一个含有粗体文本的段落
paragraph.add_run(' and italic text.').italic = True  #添加一个含有斜体文本的段落
1.4 设置段落样式
# 设置段落样式
para.style = 'BodyText'# 添加另一个段落并添加编号
numbered_para = doc.add_paragraph('这是编号段落。', style='ListNumber')
1.5 创建有序列表
for i in range(1, 4):doc.add_paragraph(f'列表项 {i}', style='ListNumber')
1.6 创建无序列表
for i in range(1, 4):doc.add_paragraph(f'列表项 {i}', style='ListBullet')
1.7添加word分页
doc.add_page_break()
1.8 添加word图片
doc.add_picture('image.png', width=docx.shared.Inches(4.0))
1.9 添加word表格
table = doc.add_table(rows=2, cols=2)
cell = table.cell(0, 0)
cell.text = '第一行第一列'
cell = table.cell(0, 1)
cell.text = '第一行第二列'
1.10 word表格处理
# 创建3行4列表格
table = doc.add_table(rows=3, cols=4, style='Light Shading Accent 1')# 填充数据
for i in range(3):   row = table.rows[i]for j in range(4):row.cells[j].text = f"第{i+1}{j+1}列"# 合并单元格
table.cell(0, 0).merge(table.cell(0, 3))  # 合并第一行 [[3, 12]]
# 删除单元格
table._tbl.remove(cell._tc)
# 赋值单元格
cell = table.cell(0, 0)
cell.text = 'Hello'
1.11 添加超链接
hyperlink = doc.add_paragraph('点击这里访问')
add_hyperlink(hyperlink, 'http://www.example.com', '访问网站')
1.12 保存word文档
doc.save('python_word_tutorial.docx')

2.打开现有word文档

doc = Document('existing.docx') 
2.1 读取段落内容
for paragraph in doc.paragraphs:   #doc.paragraphs 获取word中所有的段落 返回一个列表print(paragraph.text)for paragraph in doc.paragraphs:for run in paragraph.runs  # run段落中的最小标签  print(run.text)
2.2 修改段落内容
paragraph = doc.paragraphs[0]
paragraph.text = '这是修改后的段落。'
2.3 读取表格内容
for table in doc.tables:for row in table.rows:for cell in row.cells:print(cell.text)# 遍历文档中的所有表格
for table in doc.tables:  # doc.tables获取word中所有表格 # 遍历表格的每一行for row in table.rows:# 存储当前行的单元格内容row_data = []# 遍历行中的每个单元格for cell in row.cells:# 获取单元格的文本内容并添加到列表中row_data.append(cell.text)# 打印当前行的内容print(row_data)
2.4 读取表格的值
table_data = []
for row in doc.tables[0].rows:for cell in row.cells:table_data.append(cell.text)print(table_data)
2.5 写入数据到表格
doc.tables[0].cell(0, 0).text = "New Value"
doc.save("example.docx")
2.6 插入图表
from docx.shared import Incheschart = doc.add_chart({"type": "column"})
chart.add_series({"name": "Series 1", "categories": ["Sheet1", 1, 1], "values": ["Sheet1", 1, 2]})
doc.add_chart(chart, "A1")
doc.save("example.docx")

C.内容修改与基础样式

1. 文本格式设置

run = paragraph.runs[0]
run.font.name = '微软雅黑'    # 字体
run.font.size = Pt(14)       # 字号
run.bold = True              # 加粗
run.italic = False           # 斜体
run.underline = True         # 下划线
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)  # 红色 [[11, 13, 19]]

2. 段落格式设置

from docx.shared import Inchespara_format = paragraph.paragraph_format
para_format.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 居中对齐
para_format.left_indent = Inches(0.5)              # 左缩进
para_format.line_spacing = 1.5                     # 1.5倍行距
para_format.space_before = Pt(12)                  # 段前间距 [[6, 12]]

3.修改图片尺寸

for rel in doc.part.rels.values():if "image" in rel.reltype:target = rel.targettarget.width = docx.shared.Inches(2.0)target.height = docx.shared.Inches(2.0)

D.插入操作

1. 插入页眉和页脚

section = doc.sections[0]
header = section.header
footer = section.footer
header.paragraphs[0].text = '这是页眉内容'
footer.paragraphs[0].text = '这是页脚内容'

2. 插入目录

doc.add_heading('目录', level=1)
doc.add_paragraph('请在此处插入目录(手动或使用Word的目录功能)')

3. 插入脚注和尾注

paragraph = doc.add_paragraph('这是一个包含脚注的段落。')
footnote = paragraph.add_footnote('这是脚注内容。')

E.高级复杂操作

遍历所有段落替换文本

for para in doc.paragraphs:if '占位符' in para.text:para.text = '实际内容'  # 直接替换文本para.runs[0].bold = True  # 设置粗体

清空指定段落

for para in doc.paragraphs:if '需要删除的内容' in para.text:para.clear()

遍历所有表格替换文本

# 遍历所有表格
for table in doc.tables:for row in table.rows:for cell in row.cells:if cell.text == "旧数据":cell.text = "新数据"

删除第一个表格

if len(doc.tables) > 0:tbl = doc.tables[0]tbl._element.getparent().remove(tbl._element)

F. 典型案例分享

1.批量处理文档替换文档内容

import docx# 读取Word文档
doc = docx.Document("example.docx")# 批量替换文本
for para in doc.paragraphs:if "keyword" in para.text:para.text = para.text.replace("keyword", "new_value")# 保存修改后的文档
doc.save("updated_example.docx")

2.提取表格中的数据替换到word

excel数据模版:

在这里插入图片描述
word文本模版:
在这里插入图片描述
效果模版:
在这里插入图片描述

from docx import Document
import pandas as pd
import osdf = pd.read_excel(r"C:\Users\liyang\Desktop\2.xlsx")
for i in range(len(df)):doc = Document(r'C:\Users\liyang\Desktop\2.docx')for j in df.columns:# print(df.loc[i,j])for pargs in doc.paragraphs:for run in pargs.runs:# print(run.text)run_text = run.text.replace(j,str(df.loc[i,j]))run.text = run_textfor table in doc.tables:for row in table.rows:for cell in row.cells:cell_text = cell.text.replace(j,str(df.loc[i,j]))cell.text = cell_textdoc.save("%d%s绩效合同.docx" % (df.loc[i,'员工ID'],df.loc[i,'员工姓名']))

优化版

from docx import Document
import pandas as pd
import osdf = pd.read_excel(r"C:\Users\liyang\Desktop\2.xlsx")
for i in range(len(df)):doc = Document(r'C:\Users\liyang\Desktop\2.docx')# 遍历所有数据列for j in df.columns:# 获取当前单元格的值cell_value = str(df.loc[i,j])# 段落替换逻辑(新增占位符格式)for para in doc.paragraphs:for run in para.runs:# 构造标准占位符{{字段名}}placeholder = f'{{{{{j}}}}}'# 执行带格式的替换run.text = run.text.replace(placeholder, cell_value)# 表格替换逻辑(新增占位符格式)for table in doc.tables:for row in table.rows:for cell in row.cells:# 构造标准占位符{{字段名}}placeholder = f'{{{{{j}}}}}'# 执行替换cell.text = cell.text.replace(placeholder, cell_value)# 保存文档(保持原文件名格式)doc.save("%d%s绩效合同.docx" % (df.loc[i,'员工ID'],df.loc[i,'员工姓名']))

3.提取word中的数据替换到表格

word数据模版:
在这里插入图片描述
提取到表格数据:
在这里插入图片描述

# 使用Python自动化处理(适合批量操作)
import pandas as pd
from docx import Documentdoc = Document('数据.docx')
data = []
for para in doc.paragraphs:if ':' in para.text:items = dict(item.split(': ') for item in para.text.split(' | '))data.append(items)pd.DataFrame(data).to_excel('output.xlsx', index=False)

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

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

相关文章

Debian二次开发一体化工作站:提升科研效率的智能工具

在科研领域,数据处理是实验成功的关键环节之一。随着实验数据的复杂性和规模不断增加,传统的数据处理方法已经难以满足科研人员的需求。这时,一体化工作站应运而生,成为科研实验数据处理的 “智能大脑”。 一体化工作站&#xff…

linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)

服务器审查 在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置,以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux 以其稳定性和安全性而闻名…

Redis- 大key

大key 什么是大key问题大key的危害大key的识别方法大key问题的解决方案数据结构优化与拆分压缩与序列化优化预防与监控机制 什么是大key问题 大Key问题是指在Redis等内存数据库中,某个Key对应的value数据结构过大,通常是指单个Key的大小超过10KB甚至达到…

C语言_数据结构总结6:链式栈

纯c语言代码&#xff0c;不涉及C 顺序栈的实现&#xff0c;欢迎查看这篇文章&#xff1a;C语言_数据结构总结5&#xff1a;顺序栈-CSDN博客 0. 结构单元 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType…

新品速递 | 多通道可编程衰减器+矩阵系统,如何破解复杂通信测试难题?

在无线通信技术快速迭代的今天&#xff0c;多通道可编程数字射频衰减器和衰减矩阵已成为测试领域不可或缺的核心工具。它们凭借高精度、灵活配置和强大的多通道协同能力&#xff0c;为5G、物联网、卫星通信等前沿技术的研发与验证提供了关键支持。从基站性能测试到终端设备校准…

AI自动化应用的影响

生产力的迭代也终将伴随着一代人的落幕。 2025年是AI应用爆发的开局之年&#xff0c;预计3-5年现有生产关系将出现颠覆性改革。 AI自动化对经济和就业的影响是一个复杂且多维的问题&#xff0c;其长期影响取决于技术进步、政策调控、社会适应能力等多重因素的综合作用。以下从技…

润开鸿重磅首发基于“RISC-V+OpenHarmony+星闪”的“鸿锐”AI开发平台

润开鸿重磅首发基于“RISC-VOpenHarmony星闪”的“鸿锐”AI开发平台 2月28日&#xff0c;2025中国RISC-V生态大会在北京中关村国际创新中心隆重召开。作为领先的鸿蒙生态专业技术公司和终端操作系统发行版提供商&#xff0c;以及不断推进基于RISC-V与OpenHarmony全栈开源生态构…

Java 深度复制对象:从基础到实战

目录 一、深度复制的概念二、实现深度复制的方法1. 使用序列化2. 手动实现深度复制 三、总结 在 Java 编程中&#xff0c;对象的复制是一个常见的需求。然而&#xff0c;简单的复制操作&#xff08;如直接赋值&#xff09;只会复制对象的引用&#xff0c;而不是创建一个新的对象…

C++ Primer 交换操作

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图 流程&#xff1a;首先&#xff0c;通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体&#xff0c;然后使用 avcodec_parameters_to_context 将参数复制到上下文中&#xff0c;接着通过 avcodec_find_decoder 查找指定的解码器&#xff0c;并…

2025 docker安装TiDB数据库

1.确保安装了docker和docker-compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod x /usr/local/bin/docker-compose2.编写 Docker Compose 文…

定制化开发的WooCommerce独立站商城更安全

定制化开发的WooCommerce独立站商城在安全性、交易风险控制以及整体用户体验方面有显著优势。以下是定制化开发在这些方面的具体表现&#xff1a; 1. 安全性更高 定制化开发允许开发者从底层架构开始设计和优化&#xff0c;确保网站的安全性。以下是具体表现&#xff1a; (1…

CSS【实战】模拟 html 的 title 属性(鼠标悬浮显示提示文字)

效果 原理 提示内容的定位&#xff1a;子绝父相鼠标悬浮前&#xff0c;提示内容visibility: hidden;通过 :hover 触发鼠标悬浮样式&#xff0c;提示内容变为 visibility: visible; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

K8s控制器Deployment详解

回顾 ReplicaSet 控制器,该控制器是用来维护集群中运行的 Pod 数量的&#xff0c;但是往往在实际操作的时候&#xff0c;我们反而不会去直接使用 RS&#xff0c;而是会使用更上层的控制器&#xff0c;比如说 Deployment。 Deployment 一个非常重要的功能就是实现了 Pod 的滚动…

【MYSQL数据库异常处理】执行SQL语句报超时异常

MYSQL执行SQL语句异常&#xff1a;The last packet successfully received from the server was 100,107 milliseconds ago. The last packet sent successfully to the server was 100,101 milliseconds ago. 这个错误表明 MySQL 服务器与 JDBC 连接之间的通信超时了。通常由…

HJ C++11 Day2

Initializer Lists 对于一个类P class P{P(int a, int b){cout << "P(int, int), a" << a << ", b " << b << endl;}P(initializer_list<int> initlist){cout << "P(initializer_list<int>), val…

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

第一次开机详细步骤 步骤一&#xff1a;树莓派系统烧录1 搜索打开烧录软件“Raspberry Pi Imager”2 选择合适的设备、系统、SD卡3 烧录配置选项 步骤二&#xff1a;SSH远程树莓派1 树莓派插电2 网络连接&#xff08;有线或无线&#xff09;3 确定树莓派IP地址 步骤三&#xff…

装饰器模式--RequestWrapper、请求流request无法被重复读取

目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码&#xff0c;能看出来是把request又重新包装了一下&#xff0c;核心信息都不会改变 后面了解到这叫 装饰器模式&#xff08;Decorator Pattern&#xff09; &#xff1a;也称为包装模式(Wrapper Pat…

大语言模型进化论:从达尔文到AI的启示与展望

文章大纲 引言大语言模型中的“进化论”思想体现遗传变异过度繁殖和生存斗争大模型“过度繁殖”与“生存竞争”机制解析**一、过度繁殖:技术迭代的指数级爆发****二、生存竞争:计算资源的达尔文战场****三、生存竞争胜出关键要素****四、行业竞争格局演化趋势**核心结论自然选…

监听 RabbitMQ 延时交换机的消息数、OpenFeign 路径参数传入斜杠无法正确转义

背景 【MQ】一套为海量消息和高并发热点消息&#xff0c;提供高可用精准延时服务的解决方案 我现在有一个需求&#xff0c;就是监听 RabbitMQ 一个延时交换机的消息数&#xff0c;而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交…