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.rhkb.cn/news/30481.html

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

相关文章

Android Configuration相关问题如何定位分析(中英文切换、黑夜白天模式等)

Android Configuration相关问题如何定位分析(中英文切换、黑夜白天模式等). Configuration的常见问题场景: app的size position不正确中英文显示不正确白天黑夜模式不正确 Configuration信息如下: mFullConfiguration{1.0 ?mc…

SCI1区TOP:自适应学习粒子群算法SLPSO,深度解析+性能实测

目录 1.摘要2.改进策略3.自适应学习粒子群算法4.结果展示5.参考文献6.获取代码 1.摘要 粒子群算法(PSO)是一种基于种群的随机搜索方法,广泛应用于科学和工程领域的连续空间优化问题,并已证明其高效性和有效性。许多实际问题的往往…

kotlin协程之CoroutineScope 与 CoroutineContext 详解

前言 在使用协程时,不管是看协程的源码还是日常使用,会经常看到 CoroutineScope 和 CoroutineContext, 这两个到底是什么东西呢?作用是什么? 本篇文章我们就来深入的理解一下 CoroutineScope 和 CoroutineContext。 …

win11编译llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系显卡最低支持cuda128,llama_cpp_python官方源只有cpu版本,没有cuda版本,所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…

正向代理与反向代理

代理: 通常称为代理、代理服务器或 Web 代理,代理一般是指正向代理,是位于一组客户端计算机之前的服务器。当这些计算机向 Internet 上的站点和服务发出请求时,代理服务器将拦截这些请求,然后代表客户端与 Web服务器进行通信&…

Vue _总结

文章目录 一 Vue介绍1 什么是Vue.js2 MVVM二 第一个例子1 引入vue2 html中用法3 创建vue实例对象三 Vue基本语法1 v-text2 v-bind3 v-on4 v-model5 v-if6 v-for7 计算属性8 组件化全局注册本地注册9 生命周期10 员工程序使用vue.js重构list.htmladd.htmlupdate.html四 使用vue-…

理解梯度下降、链式法则、梯度消失/爆炸

第一章:人工智能之不同数据类型及其特点梳理 第二章:自然语言处理(NLP):文本向量化从文字到数字的原理 第三章:循环神经网络RNN:理解 RNN的工作机制与应用场景(附代码) 第四章:循环神经网络RNN、LSTM以及GR…

笔记四:C语言中的文件和文件操作

Faye:只要有正确的伴奏,什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…

mysql下载与安装、关系数据库和表的创建

一、mysql下载: MySQL获取: 官网:www.mysql.com 也可以从Oracle官方进入:https://www.oracle.com/ 下载地址:https://downloads.mysql.com/archives/community/ 选择对应的版本和对应的操作系统&#xff…

(数据结构)双向链表

(数据结构)带头双向循环链表 前言 前面链表部分,咱们着重讲解了不带头单向不循环链表,简称单链表。那么链表其实也分很多种类适用于各种各样的场景。通过单链表的学习,其实我们已经大致了解了链表的绝大多数的内容,所以接下来我通…

考研英语语法全攻略:从基础到长难句剖析​

引言 在考研英语的备考之旅中,语法犹如一座灯塔,为我们在浩瀚的英语知识海洋中指引方向。无论是阅读理解中复杂长难句的解读,还是写作时准确流畅表达的需求,扎实的语法基础都起着至关重要的作用。本文将结合有道考研语法基础入门课的相关内容,为大家全面梳理考研英语语法…

【计算机网络入门】应用层

目录 1.网络应用模型 1.1 C/S模型(客户端服务器模型) 1.2 P2P模型(对等模型) 2. DNS系统 2.1 域名 2.2 域名解析流程 3. FTP文件传输协议 4. 电子邮件系统 4.1 SMTP协议 4.2 pop3协议 4.3 IMAP协议 4.4 基于万维网的电…

【GoTeams】-3:构建api、重构错误码

本文目录 1. 构建api梳理调用关系api包的作用路由梳理注册Register代码语法 2. 重构错误码 1. 构建api 首先复制project-user,改名为project-api,放在总的路径下,然后在工作区中进行导入。 运行命令go work use .\project-api\新建工作区之…

游戏引擎学习第145天

仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前,我们正在完成遗留的工作。当时我们已经将声音混合器(sound mixer)集成到了 SIMD 中,但由于一个小插曲,没有及时完成循环内部的部分。这个小插曲主要是…

Qt 实现绘图板(支持橡皮擦与 Ctrl+Z 撤销功能)[特殊字符]

作业&#xff1a; 1&#xff1a;实现绘图的时候&#xff0c;颜色的随时调整 2&#xff1a;追加橡皮擦功能 3&#xff1a;配合键盘事件&#xff0c;实现功能 当键盘按 ctrlz的时候&#xff0c;撤销最后一次绘图 头文件.h #ifndef WIDGET_H #define WIDGET_H#include <QWidge…

打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手

DeepSeek AI 聊天助手集成指南 先看完整效果&#xff1a; PixPin_2025-02-19_09-15-59 效果图&#xff1a; 目录 项目概述功能特点环境准备项目结构组件详解 ChatContainerChatInputMessageBubbleTypeWriter 核心代码示例使用指南常见问题 项目概述 基于 Vue 3 TypeScrip…

JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据

一、背景 课程管理界面&#xff0c;查询前&#xff0c;需要把查询元数据给出。 学科列表、学段列表和分类列表&#xff0c;我们把它定义为查询元数据。 一般的业务需求是&#xff1a; 系统维护好多个字典&#xff0c;比如学科、学段等等&#xff0c;相当于属性库。 但是&…

MySQL语法总结

本篇博客说明&#xff1a; &#xff01;&#xff01;&#xff01;.注意此系列都用的是MySQL语句&#xff0c;和SQLServer&#xff0c;PostgreSQL有些细节上的差别&#xff01;&#xff01;&#xff01; 1.每个操作都是先展示出语法格式 2.然后是具体例子 3.本篇注脚与文本顺讯息…

C++ Primer 交换操作

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

go切片定义和初始化

1.简介 切片是数组的一个引用&#xff0c;因此切片是引用类型&#xff0c;在进行传递时&#xff0c;遵守引用传递的机制。切片的使用和数组类似&#xff0c;遍历切片、访问切片的元素和切片的长度都一样。。切片的长度是可以变化的&#xff0c;因此切片是一个可以动态变化的数…