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二分法实现实例
Nov 21 Python
Python基类函数的重载与调用实例分析
Jan 12 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
Mar 02 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
Jun 04 Python
python命令行工具Click快速掌握
Jul 04 Python
python单线程下实现多个socket并发过程详解
Jul 27 Python
python pillow模块使用方法详解
Aug 30 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
python实现监控阿里云账户余额功能
Dec 16 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
May 22 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制作的简单验证码识别代码
2016/01/26 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
webpack写jquery插件的环境配置
2017/12/21 jQuery
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
深入Python函数编程的一些特性
2015/04/13 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
selenium 安装与chromedriver安装的方法步骤
2019/06/12 Python
python科学计算之narray对象用法
2019/11/25 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
python request 模块详细介绍
2020/11/10 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
Python eval函数原理及用法解析
2020/11/14 Python
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
小小的船教学反思
2014/02/21 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
JavaScript实现班级抽签小程序
2021/05/19 Javascript
Vue的过滤器你真了解吗
2022/02/24 Vue.js
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL