只要是简单重复的工作,就想办法用 Python 来帮你解决吧,人生苦短,你需要 Python。

Word 是办公软件中使用频率非常高的软件之一了,假如你需要调整 100 个 Word 文档的格式保持统一,或者要把 100 个 Word 全部转换为 pdf,那么你就需要 Python 来帮忙了。

本文分享如何用 Python 来读取 Word、写入 Word、将 Word 转换为 pdf。学会之后,如果遇到大量 Word 文件需要处理的时候,就不慌了。

python-docx 库简介

python-docx 是一个可以对 Word 进行读写操作的第三方库,可以读取 Word 内容,可以为 Word 文档添加段落、表格、图片、标题,应用段落样式、粗体和斜体、字符样式。

执行如下安装命令即可完成安装:

pip install python-docx

官方文档: https://python-docx.readthedocs.io/

读取 Word

这里我先创建了一个样例,里面有标题、正文、表格:

读取 Word 内容的代码如下:

from docx import Documentdef view_docs(docx_file):# 打开文档1doc = Document(docx_file)# 读取每段内容pl = [ paragraph.text for paragraph in doc.paragraphs]# 输出读取到的内容for i in pl:print(i)def view_docs_table(docx_file):# 打开文档1doc = Document(docx_file)# 读取每段内容tables = [table for table in doc.tables]for table in tables:for row in table.rows:for cell in row.cells:print(cell.text, end='  ')print()print('\n')if __name__ == '__main__':view_docs("Python自动化办公实战课.docx")view_docs_table("Python自动化办公实战课.docx")

运行结果如下:

写入 Word

现在,用 Python 创建一个和刚才一样的 Word 文档:

from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.table import _Cell
from docx.oxml import OxmlElementdef set_cell_border(cell: _Cell, **kwargs):"""Set cell`s borderUsage:set_cell_border(cell,top={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},bottom={"sz": 12, "color": "#00FF00", "val": "single"},start={"sz": 24, "val": "dashed", "shadow": "true"},end={"sz": 12, "val": "dashed"},)"""tc = cell._tctcPr = tc.get_or_add_tcPr()# check for tag existnace, if none found, then create onetcBorders = tcPr.first_child_found_in("w:tcBorders")if tcBorders is None:tcBorders = OxmlElement('w:tcBorders')tcPr.append(tcBorders)# list over all available tagsfor edge in ('start', 'top', 'end', 'bottom', 'insideH', 'insideV'):edge_data = kwargs.get(edge)if edge_data:tag = 'w:{}'.format(edge)# check for tag existnace, if none found, then create oneelement = tcBorders.find(qn(tag))if element is None:element = OxmlElement(tag)tcBorders.append(element)# looks like order of attributes is importantfor key in ["sz", "val", "color", "space", "shadow"]:if key in edge_data:element.set(qn('w:{}'.format(key)), str(edge_data[key]))document = Document()
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')##标题def add_header(text, level, align='center'):title_ = document.add_heading(level=level)if align == 'center':title_.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER  # 标题居中elif align == 'right':title_.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT  # 标题居中title_run = title_.add_run(text)  # 添加标题内容# title_run.font.size = Pt(24)  # 设置标题字体大小title_run.font.name = 'Times New Roman'  # 设置标题西文字体title_run.font.color.rgb = RGBColor(0, 0, 0)  # 字体颜色title_run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')  # 设置标题中文字体add_header(text='Python自动化办公实战', level=1)
add_header(text='Python基础', level=2, align='left')document.add_paragraph('Python 是一门面向对象的高级编程语言,易学易用,是自动化办公首选的工具。')add_header('Python玩转图片', level=2, align='left')document.add_paragraph('图片是工作中接触较多的媒体文件了,你可能需要图片压缩,加水印,文字识别等操作')records = (('Python 基础', '00:30', '2021-08-01', ''),('Python 玩转图片', '01:00', '2021-08-01', ''),('Python 玩转 Word', '01:00', '2021-08-01', ''),
)table = document.add_table(rows=1, cols=4)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '章节'
hdr_cells[1].text = '时长'
hdr_cells[2].text = '日期'
hdr_cells[3].text = '备注'for cell in hdr_cells:set_cell_border(cell,top={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},bottom={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},start={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},end={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},)for chapter, time, date, note in records:row_cells = table.add_row().cellsrow_cells[0].text = chapterrow_cells[1].text = timerow_cells[2].text = daterow_cells[3].text = notefor cell in row_cells:set_cell_border(cell,top={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},bottom={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},start={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},end={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},)
document.save('Python自动化办公实战.docx')

其中,为表格添加边框的代码由于比较复杂,单独做为一个函数来调用。

生成的 Word 文档如下所示,其中表格边框的颜色,标题的颜色,字体大小,样式都是可以设置的:

其他操作

添加分页符:

document.add_page_break()

添加图片:

document.add_picture('monty-truth.png', width=Inches(1.25))

设置表格的列宽和行高

'''
设置列宽
可以设置每个单元格的宽,同列单元格宽度相同,如果定义了不同的宽度将以最大值准
'''
table.cell(0,0).width=Cm(10)#设置行高
table.rows[0].height=Cm(2)

表格字体的设定:

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT#设置整个表格字体属性
table.style.font.size=Pt(18)
table.style.font.color.rgb=RGBColor(255, 0, 0)
table.style.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER

合并单元格

cell_1=table.cell(1, 0)
cell_2=table.cell(2, 1)
cell_1.merge(cell_2)

修改文档字体:

from docx import Document
from docx.shared import Pt  #设置像素、缩进等
from docx.shared import RGBColor #设置字体颜色
from docx.oxml.ns import qndoc = Document("xxx.docx")for paragraph in doc.paragraphs:for run in paragraph.runs:run.font.bold = Truerun.font.italic = Truerun.font.underline = Truerun.font.strike = Truerun.font.shadow = Truerun.font.size = Pt(18)run.font.color.rgb = RGBColor(255,0,255)run.font.name = "黑体"# 设置像黑体这样的中文字体,必须添加下面 2 行代码r = run._element.rPr.rFontsr.set(qn("w:eastAsia"),"黑体")doc.save("xxx.docx")

行间距调整:

paragraph.paragraph_format.line_spacing = 5.0

段前与段后间距调整:

#段前
paragraph.paragraph_format.space_before = Pt(12)#段后
paragraph.paragraph_format.space_after = Pt(10)

Word 转 pdf

只需要两行代码就可以将 Word 转 pdf,这里使用的是三方库 docx2pdf 使用前先 pip install docx2pdf

具体代码如下所示:

from docx2pdf import convert
convert("Python自动化办公实战.docx", "Python自动化办公实战.docx.pdf")

如果要对某个目录下的 Word 批量转换为 pdf,可以这样:

from docx2pdf import convert
convert("目录路径/")

批量转换为 pdf 时是否非常方便?

知道了这些小操作,就可以组装大操作,比如后面可以用 Python 将 Word 转换为 pdf 后作为附件发送邮件给其他人。

最后的话

本文分享了一种读写 Word 的方式,在日常工作中如果是重复性的 Word 操作,可考虑 Python 自动化,有问题请留言交流。阅读原文可以查看 gitee 上的代码。

留言

Python 自动化办公-玩转 Word相关推荐

  1. python与word交互_[Python] 自动化办公 邮件/Excel/Word交互快速生成介绍信

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: imbox 读取邮件解析附件 openp ...

  2. 〖Python自动化办公篇⑥〗- word文件自动化 - word操作与读取word文件

    说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取 ...

  3. 【python自动化办公02】word操作-word转pdf

    点击上方"AI搞事情"关注我们 清明 Python调用Win32com实现Office批量转PDF https://www.cnblogs.com/lolipop2019/p/14 ...

  4. 【python自动化办公04】word操作-word文字颜色修改

    点击上方"AI搞事情"关注我们 思路 主要先运用Find.Execute定位需要替换的文档文字内容,再对选中的文字区域app.Selection设置字体格式Font.Color = ...

  5. 【python自动化办公03】word操作-文档内容替换

    点击上方"AI搞事情"关注我们 有时候,我们需要将word中特定的内容进行批量替换为新的内容,那么如何应用python win32com 实现word文档内容的批量替换呢?下面就介 ...

  6. 【python自动化办公01】word操作-新建文档

    点击上方"AI搞事情"关注我们 Python操作Word(Win32com)https://zhuanlan.zhihu.com/p/67543981 Office VBA 参考h ...

  7. python办公代码_[Python] 自动化办公 docx操作Word基础代码

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 文中的截图均为原创,转载请注明来源 安装 docx 是一个非标准库, ...

  8. python自动化办公入门-[Python] 自动化办公 docx操作Word基础代码

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 文中的截图均为原创,转载请注明来源 安装 docx 是一个非标准库, ...

  9. 〖Python自动化办公篇⑨〗- word文件自动化 - 设置Word全局样式和文本样式

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

最新文章

  1. 【运筹学】运输规划、表上作业法总结 ( 运输规划模型 | 运输规划变量个数 | 表上作业法 | 最小元素法 | 差额 Vogel 法 ★ | 闭回路法 ) ★★★
  2. poj 2769 感觉♂良好 (单调栈)
  3. 改革收入分配体制 网络电话成通信省钱先锋
  4. 14 对于移动类型561和账户xxxxxx Ext. GA本币计的金额(023)的不同的字段
  5. 流行-Manifold【0】-维基百科中文版本解释
  6. Linux内存管理学习资料
  7. 蓝桥杯B组省赛预赛第一题2013(高斯日记)
  8. ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
  9. 解决QT编程出现 C2001错误
  10. windows与linux多线程对比
  11. 程序员应该坚持写博客
  12. Linux内核源代码阅读
  13. 圣诞帽php,微信小程序“圣诞帽”的实现思路详解
  14. 红米note3总显示无服务器,红米note3死机了怎么办 具体解决措施【图文】
  15. 女巫小屋的指令Java_我的世界女巫小屋详介绍 我的世界女巫小屋种子代码一览...
  16. python画狗_Python 画一只单身狗作为情人节礼物
  17. 毕业设计 - 基于人工智能的图像分类算法研究与实现 - 深度学习卷积神经网络图像分类
  18. Mycat生产实践---Mycat实施指南
  19. 【软件工程】实验4:校园二手物品交易过程的UI设计
  20. Windows语音朗读

热门文章

  1. 单片机中断的基本概念
  2. html模块 码工助手,码工助手在线布局使用注意事项
  3. 【文本分析】基于粤港澳大湾区博物馆访客评价的文本分析
  4. 关于在多重积分以及曲线曲面积分中对称性的应用
  5. html用于排版标题标签,HTML常用标签(示例代码)
  6. 基于单片机的水塔水位检测系统
  7. 如何在基于vue-cli的项目中,使用精灵图 css sprite
  8. linux c/c++使用sqlite3读取数据
  9. 锤子手机便签导入另一个手机云便签中怎么操作?
  10. TIM腾讯聊天(即时通信 IM)(咨询客服业务)