python3处理word文档实例分析


Posted in Python onDecember 01, 2020

直接使用word文档已经难不倒大家了,有没有想过用python构建一个word文档写点文章呢?当然这个文章的框架需要我们用代码一点点的建立,在过程上有一点繁琐,一下子看不懂的小伙伴可以把它拆分成几个部分来看。下面就在python3处理word文档的代码给大家带来讲解,还会有一些设置文章格式的技巧。

一个Word文档,主要由下面这些内容元素构成,每个元素都有对应的方法处理:

  • 标题:add_heading()
  • 段落:add_paragraph()
  • 文本:add_run(),其返回对象支持设置文本属性
  • 图片:add_picture()
  • 表格:add_table()、add_row()、add_col()
import pathlib

from docx import Document
from docx.shared import Inches, Pt
from docx.oxml.ns import qn
 
path = list(pathlib.Path.cwd().parents)[1].joinpath('data/automate/003word')
out_path = path.joinpath('003word_create.docx')
img_path = path.joinpath('dance.jpg')
document = Document()
document.add_heading('Python1024_自动生成标题', 0)
document.add_heading('基本:文本', level=1)
p = document.add_paragraph('测试文本\n测试内容\n')
p.add_run('粗体部分内容\n').bold = True
p.add_run('斜体部分\n').italic = True
p.add_run('下划线部分\n').underline = True
p.add_run('字体设置\n').font.size = Pt(24)
# 测试第三方字体
x = p.add_run('三方字体测试\n')
x.font.name = 'Source Han Sans CN' # 思源字体
x.element.rPr.rFonts.set(qn('w:eastAsia'), 'Source Han Sans CN')
# 段落和引用
document.add_heading('标题一:段落', level=1)
document.add_paragraph('引用块', style='Intense Quote')
document.add_heading('标题1.1、无序列表', level=2)
opts = ['选项1','选项2', '选项3']
# 无需列表
for opt in opts:
  document.add_paragraph(opt, style='List Bullet')
document.add_heading('标题1.2、有序列表', level=2)
# 有序列表
  document.add_paragraph(opt, style='List Number')
document.add_heading('标题二:图片', level=1)
document.add_picture(str(img_path), width=Inches(5))
document.add_page_break()
document.add_heading('标题三:表格', level=1)
records = (
  (1, '电风扇', '无叶风扇'),
  (2, '吹风机', '离子风机'),
  (3, 'Macbook pro', 'Apple macbook pro 15寸')
)
# 表格
table = document.add_table(rows=1, cols=3)
# 表头
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '数量'
hdr_cells[1].text = 'ID'
hdr_cells[2].text = '描述信息'
# 表格数据
for qty, cid, desc in records:
  row_cells = table.add_row().cells
  row_cells[0].text = str(qty)
  row_cells[1].text = cid
  row_cells[2].text = desc
# 保存文档
document.save(out_path)

设置段落样式,

如下:

document.add_paragraph('这是一个样式为 ListBullet 的段落', style='ListBullet')

paragraph = document.add_paragraph('这是一个样式为 ListBullet 的段落')
paragraph.style = 'List Bullet'

设置段落间距

分为 段前 和 段后 ,设置值用 Pt 单位是 磅 ,如下:

paragraph_format.space_before = Pt(18)
paragraph_format.space_after = Pt(12)

设置段落行距 

当行距为 最小值 和 固定值 时,设置值单位为 磅 ,需要用 Pt ;当行距为 多倍行距 时,设置值为数值,如下:

from docx.shared import Length

#SINGLE     => 单倍行距(默认)

#ONE_POINT_FIVE => 1.5倍行距

#DOUBLE2    => 倍行距

#AT_LEAST    => 最小值

#EXACTLY    => 固定值

#MULTIPLE    => 多倍行距

paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY #固定值

paragraph_format.line_spacing = Pt(18) # 固定值18磅

paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE #多倍行距

paragraph_format.line_spacing = 1.75 # 1.75倍行间距

到此这篇关于python3处理word文档实例分析的文章就介绍到这了,更多相关python3处理word文档代码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
python之Socket网络编程详解
Sep 29 Python
Python3中简单的文件操作及两个简单小实例分享
Jun 18 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
对python中的logger模块全面讲解
Apr 28 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Python importlib动态导入模块实现代码
Apr 16 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
python爬取天气数据的实例详解
Nov 20 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
python3中布局背景颜色代码分析
Dec 01 #Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 #Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 #Python
python录音并调用百度语音识别接口的示例
Dec 01 #Python
用python爬虫批量下载pdf的实现
Dec 01 #Python
python3字符串输出常见面试题总结
Dec 01 #Python
python3中数组逆序输出方法
Dec 01 #Python
You might like
php 过滤器实现代码
2010/08/09 PHP
PHP实现懒加载的方法
2015/03/07 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
使用Python生成随机密码的示例分享
2016/02/18 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python logging设置和logger解析
2019/08/28 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
Django如何批量创建Model
2020/09/01 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
测绘工程专业个人自我评价
2013/12/01 职场文书
工程招投标邀请书
2014/01/26 职场文书
小学生秋游活动方案
2014/02/23 职场文书
售后服务经理岗位职责
2014/02/25 职场文书
运动会开幕式主持词
2014/03/28 职场文书
大学生个人求职信例文
2014/07/07 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
公司地址变更通知
2015/04/25 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android
python开发的自动化运维工具ansible详解
2021/08/07 Python
拙作再改《我的收音机情缘》
2022/04/05 无线电
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
Redis过期数据是否会被立马删除
2022/07/23 Redis