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爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
pandas Dataframe行列读取的实例
Jun 08 Python
selenium+python设置爬虫代理IP的方法
Nov 29 Python
python networkx 根据图的权重画图实现
Jul 10 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
使用Python的开发框架Brownie部署以太坊智能合约
May 28 Python
Python包argparse模块常用方法
Jun 04 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
使用GD库生成带阴影文字的图片
2015/03/27 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
Jquery解析json数据详解
2013/12/26 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
jQuery+css实现炫目的动态块漂移效果
2016/01/28 Javascript
[原创]jQuery常用的4种加载方式分析
2016/07/25 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
深入理解Node module模块
2018/03/26 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
python 实现矩阵按对角线打印
2019/11/29 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
Yahoo-PHP面试题1
2016/07/20 面试题
神路信息Java面试题目
2013/03/31 面试题
小学门卫岗位职责
2013/12/17 职场文书
法务专员岗位职责
2014/01/02 职场文书
安全责任书
2015/01/29 职场文书
会计求职自荐信
2015/03/26 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
导游词之无锡唐城
2019/12/12 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA