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自动化测试之setUp与tearDown实例
Sep 28 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
Python中类的初始化特殊方法
Dec 01 Python
Opencv实现抠图背景图替换功能
May 21 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
Jun 28 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
python识别验证码的思路及解决方案
Sep 13 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Django使用echarts进行可视化展示的实践
Jun 10 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
destoon二次开发入门示例
2014/06/20 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
Javascript window对象详解
2014/11/12 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python反转列表的三种方式解析
2019/11/08 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
CSS3实现各种图形的示例代码
2016/10/19 HTML / CSS
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
建筑学推荐信
2013/11/03 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
车辆安全检查制度
2014/01/12 职场文书
运动会宣传稿50字
2015/07/23 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js
python中 .npy文件的读写操作实例
2022/04/14 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android