python文件操作之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)