以下是一篇关于使用
python-docx
库(通过
from docx import Document
导入)来创建和操作 DOCX 文件的内容。
使用 Python 的 python-docx
库创建和操作 DOCX 文件
引言
在现代办公环境中,处理文档是一个常见的任务。虽然 Microsoft Word 提供了强大的文档编辑功能,但在自动化文档生成和批量处理方面,编程工具往往更加高效。Python 的 python-docx
库就是一个强大的工具,它允许你通过代码来创建、修改和保存 Word 文档(.docx 格式)。
安装 python-docx
在使用 python-docx
之前,你需要先安装它。你可以通过 pip
来完成安装:
pip install python-docx
创建一个简单的 DOCX 文件
安装完成后,我们可以开始创建一个简单的 DOCX 文件。以下是一个基本的示例:
from docx import Document
# 创建一个新的 Document 对象
doc = Document()
# 添加一个标题
doc.add_heading('这是一个标题', level=1)
# 添加一个段落
doc.add_paragraph('这是一个段落。你可以在这里添加任何文本内容。')
# 添加一个带有格式的段落
p = doc.add_paragraph('这是一个带有格式的段落。')
run = p.add_run('粗体文本')
run.bold = True
run = p.add_run(' 和 ')
run = p.add_run('斜体文本')
run.italic = True
# 保存文档
doc.save('example.docx')
上述代码会创建一个名为 example.docx
的文件,其中包含一个一级标题、一个普通段落以及一个带有粗体和斜体格式的段落。
添加图片和表格
除了文本,python-docx
还支持向文档中添加 图片
和表格。以下是添加图片和表格的示例:
# 添加图片
doc.add_picture('path/to/your/image.jpg', width=Inches(1.25))
# 添加表格
table = doc.add_table(rows=2, cols=2)
table.cell(0, 0).text = '单元格1,1'
table.cell(0, 1).text = '单元格1,2'
table.cell(1, 0).text = '单元格2,1'
table.cell(1, 1).text = '单元格2,2'
# 保存文档
doc.save('example_with_image_and_table.docx')
注意,在添加图片时,你需要从 docx.shared
中导入 Inches
或 Cm
来设置图片的宽度和高度(可选)。
from docx.shared import Inches
样式和格式
python-docx
还允许你自定义文档的样式和格式,包括字体、段落对齐方式、行间距等。例如:
p = doc.add_paragraph('这是一个自定义格式的段落。')
p.style.font.name = 'Arial'
p.style.font.size = Pt(14)
p.alignment = 2 # 2 表示居中对齐
p.space_after = Pt(12) # 段落后的间距
同样,你需要从 docx.shared
中导入 Pt
来设置字体大小和间距。
from docx.shared import Pt
结论
通过 python-docx
库,Python 程序员可以轻松地创建和操作 DOCX 文件,实现文档的自动化生成和批量处理。无论是简单的文本段落,还是复杂的图片和表格,python-docx
都提供了直观易用的 API。如果你需要处理大量的文档或者需要自动化一些文档生成任务,python-docx
绝对是一个值得学习和使用的工具。
最后
附上我的一个小demo
直接开箱即用的,主要实现的功能是
- 插入表格
- 标题字体设置宋体
- 段落字体设置为宋体
'''
@Project :langchain_excel_doc
@File :pythondoc-test.py
@IDE :PyCharm
@Author :xzy
@Date :2024/12/30 9:06
@explain:
'''
from docx import Document
from docx.shared import RGBColor
from docx.oxml.ns import qn
# 创建一个新的Word文档
doc = Document()
# 设置字体为宋体
def set_font_to_songti(run):
run.font.name = '宋体'
run._r.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
# 添加标题
heading = doc.add_heading('故障分析报告', 0).runs[0]
set_font_to_songti(heading)
heading.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('故障分析报告', 0).runs[0].font.color.rgb = RGBColor(0, 0, 0)
# 添加背景
background = doc.add_heading('1.背景', 1).runs[0]
set_font_to_songti(background)
background.font.color.rgb = RGBColor(0, 0, 0)
paragraph = doc.add_paragraph('本报告旨在分析 2023 年与 2024 年的设备故障情况,评估故障原因及其对运营的影响。通过同比和环比分析,识别趋势并提出改进建议,以提高系统的稳定性和可靠性。')
set_font_to_songti(paragraph.runs[0])
# 添加故障的详细情况
fault_info = doc.add_heading('2.故障的详细情况', 1).runs[0]
set_font_to_songti(fault_info)
fault_info.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('2.故障的详细情况', 1).runs[0].font.color.rgb = RGBColor(0, 0, 0)
fault_info1 = doc.add_heading('2.1 按机组分类的故障数量', 2).runs[0]
set_font_to_songti(fault_info1)
fault_info1.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('2.1 按机组分类的故障数量', 2).runs[0].font.color.rgb = RGBColor(0, 0, 0)
doc.add_table(rows=6, cols=2).style = 'Table Grid'
table = doc.tables[0]
table.cell(0, 0).text = '机组'
table.cell(0, 1).text = '故障数'
table.cell(1, 0).text = 'F-01 组'
table.cell(1, 1).text = '2'
table.cell(2, 0).text = 'F-02 组'
table.cell(2, 1).text = '1'
table.cell(3, 0).text = 'F-03 组'
table.cell(3, 1).text = '4'
table.cell(4, 0).text = 'F-04 组'
table.cell(4, 1).text = '2'
table.cell(5, 0).text = 'F-05 组'
table.cell(5, 1).text = '1'
fault_info2 = doc.add_heading('2.2 按月份分类的故障数量', 2).runs[0]
set_font_to_songti(fault_info2)
fault_info2.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('2.2 按月份分类的故障数量', 2).runs[0].font.color.rgb = RGBColor(0, 0, 0)
doc.add_table(rows=5, cols=2).style = 'Table Grid'
table = doc.tables[-1]
table.cell(0, 0).text = '月份'
table.cell(0, 1).text = '故障数'
table.cell(1, 0).text = '2023-07'
table.cell(1, 1).text = '1'
table.cell(2, 0).text = '2023-08'
table.cell(2, 1).text = '3'
table.cell(3, 0).text = '2024-07'
table.cell(3, 1).text = '4'
table.cell(4, 0).text = '2024-08'
table.cell(4, 1).text = '2'
# 添加分析
analyse = doc.add_heading('3 分析', 1).runs[0]
set_font_to_songti(analyse)
analyse.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('3 分析', 1).runs[0].font.color.rgb = RGBColor(0, 0, 0)
yoy = doc.add_heading('3.1 同比分析:', 2).runs[0]
set_font_to_songti(yoy)
yoy.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('3.1 同比分析:', 2).runs[0].font.color.rgb = RGBColor(0, 0, 0)
paragraph = doc.add_paragraph('2023 年故障次数:4 次')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('2024 年故障次数:6 次')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('比较 2024 年与 2023 年的设备故障次数,得出 2024 年相对于 2023 年的设备故障同比增长 50%。')
set_font_to_songti(paragraph.runs[0])
qoq = doc.add_heading('3.2 环比分析:', 2).runs[0]
set_font_to_songti(qoq)
qoq.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('3.2 环比分析:', 2).runs[0].font.color.rgb = RGBColor(0, 0, 0)
paragraph = doc.add_paragraph('2024 年 7 月故障次数:4 次')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('2024 年 8 月故障次数:2 次')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('比较 2024 年 7 月与 2024 年 8 月的设备故障次数,得出 2024 年 7 月相对于 2024 年 8 月的设备故障环比减少了 50%。')
set_font_to_songti(paragraph.runs[0])
# 添加建议
suggestion=doc.add_heading('4.建议', 1).runs[0]
set_font_to_songti(suggestion)
suggestion.font.color.rgb = RGBColor(0, 0, 0)
# doc.add_heading('4.建议', 1).runs[0].font.color.rgb = RGBColor(0, 0, 0)
paragraph = doc.add_paragraph('2024 年设备故障频发,主要原因包括信号丢失、风扇故障和过热。针对这些问题,建议采取以下改进措施:')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('对于信号丢失,应检查传感器连接和电源,确认传感器未损坏。')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('对于风扇故障,应更换故障风扇,确保通风系统正常运行。')
set_font_to_songti(paragraph.runs[0])
paragraph = doc.add_paragraph('对于过热现象,应增加散热措施,清理散热器上的灰尘,检查冷却液是否充足。')
set_font_to_songti(paragraph.runs[0])
# 保存文档
doc.save('故障分析报告.docx')