当前位置: 首页 > article >正文

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 Inches
 
chart = 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 Inches

para_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.target
  target.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 os

df = 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_text



        for 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_text

    doc.save("%d%s绩效合同.docx" % (df.loc[i,'员工ID'],df.loc[i,'员工姓名']))

优化版

from docx import Document
import pandas as pd
import os

df = 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 Document

doc = 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.kler.cn/a/577632.html

相关文章:

  • 算法006——和为S 的两个数
  • 智能合约中权限管理不当
  • 系统架构设计师—系统架构设计篇—微服务架构
  • 基于PyTorch的深度学习3——基于autograd的反向传播
  • 恢复IDEA的Load Maven Changes按钮
  • dify通过ollama简单配置deepseek模型
  • 如何禁用移动端页面的多点触控和手势缩放
  • 【Gaussian Model】高斯分布模型
  • 新手学习爬虫的案例
  • Centos8部署mongodb报错记录
  • Linux 基础---重定向命令(>、>>)、echo
  • 正版Windows10/11系统盘制作详细教程
  • Linux设备驱动开发之摄像头驱动移植(OV5640)
  • 尚硅谷爬虫note14
  • 【后端开发面试题】每日 3 题(九)
  • PDF 分割工具
  • 请谈谈 HTTP 中的重定向,如何处理 301 和 302 重定向?
  • 在Go语言中,判断变量是否为“空”(零值或未初始化状态)的方法总结
  • K8s 1.27.1 实战系列(六)Pod
  • 穿梭车与机器人协同作业:构建高效仓储物流系统的关键