我的理解

为什么会用到python-docx,因为近段时间下载了大量网文,但格式都是html的,我个人习惯使用word处理文字,于是就想法设法把html文档转换为word,首先要考虑的问题就是从html中提取的文字怎么存word里呢,之前用了pandoc直接转换,带转换后的效果太不理想,没什么格式,不符合我这种对word格式有严格要求强迫症人的需要,于是就到处搜寻其他方法,终于功夫不负有心人,通过几天研究python-docx,感觉很适合我,就一边分析html文档,一边思考怎么用python-docx存想要的格式word,因为我的word排版,一般习惯 页面要设置成5678页边距的,大小A4的,正文主标题 方正小标宋,其他标题要么黑体,要么加粗,正文要首行缩进2字符 仿宋_GB2312,页脚要加页码显示,大概这些样式。

python-docx 创建一篇文档也差不多是这么个思路,一篇文档也就是Document()对象 首先要分成不同的节,也就是由sections对象控制,然后每节中又分成不同的段落paragraphs对象,每段又由不同的块run对象组成,针对不同的节(section)可以设置页面的一些属性,针对不同的段落(paragraph),可以设置间距和缩进、换行和分页等,针对不同块(run)可以设置字体的字型、颜色、大小等。可以先设置好整篇文章的大致段落、字体等格式,然后针对不同段落和块可以单独再进行设置。

我主要讲讲自己用到的几个内容是怎么设置的。

安装库:

pip install python-docx  

用到的库

from docx import Document(文档读写)
from docx.shared import Pt,Cm,Inches (字体大小,不一定全用到)
from docx.oxml.ns import qn(设置字体格式,分栏等用到)
from docx.shared import RGBColor (设置字体颜色)
from docx.enum.text import WD_ALIGN_PARAGRAPH (设置对其方式)
from docx.enum.section import WD_ORIENTATION (纸张方向用到)

  

设置大致格式

这样设置完了之后有一个好处就是,后往里面写入文档的时候回自动按这个格式,如果有需要改动的再单独写入时改。

    docment = docx.Document(docx_tamplate) # 读取模板文档,这里可以不用模板文档,因为python-docx没法设置页码,所以我先建了一个有页码的空白文档作为模板文档
# 设置正文默认格式
# 字体大小三号字(16)
docment.styles['Normal'].font.size = Pt(16)
# 字体仿宋_GB2312
docment.styles['Normal'].font.name = u'仿宋_GB2312'
docment.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'仿宋_GB2312')
# 行间距 28磅 段前、段后不留空
docment.styles['Normal'].paragraph_format.line_spacing = Pt(29)
docment.styles['Normal'].paragraph_format.space_before = Pt(0)
docment.styles['Normal'].paragraph_format.space_after = Pt(0)
# 首行缩进2字符
docment.styles['Normal'].paragraph_format.first_line_indent = 406400
# 关闭孤行控制
docment.styles['Normal'].paragraph_format.widow_control = False
# 设置页面大小
docment.sections[0].page_height = Cm(29.7) # 设置A4纸的高度
docment.sections[0].page_width = Cm(21) # 设置A4纸的宽
# 设置页边距
docment.sections[0].top_margin = Cm(3.7)
docment.sections[0].bottom_margin = Cm(3.4)
docment.sections[0].left_margin = Cm(2.8)
docment.sections[0].right_margin = Cm(2.6)

  

单独设置段格式

doc=Document() #创建一个空白文档
p1=doc.add_paragraph() #初始化建立一个自然段
p1.alignment=WD_ALIGN_PARAGRAPH.CENTER #对齐方式为居中,没有这句话默认左对齐。另外右对齐:RIGHT,两端对齐:JUSTIFY,分散对齐:DISTRIBUTE p1.paragraph_format.line_spacing=1.5 #设置该段落,行间距为1.5倍,也可以像上面设默认值那样用Pt单位来设置
p1.paragraph_format.first_line_indent=Inches(0.5) #段落缩进0.5英寸,我还是习惯设置2字符 值为:406400
p1.paragraph_format.left_line_indent=Inches(0.5) #设置左缩进0.5英寸。一般用不到
p1.paragraph_format.right_line_indent=Inches(0.5) #设置右缩进0.5英寸,一般用不到
p1.paragraph_format.keep_together = False # 段前分页
p1.paragraph_format.keep_with_next = False # 与下段同页
p1.paragraph_format.page_break_before = True # 段中不分页
p1.paragraph_format.widow_control = False # 孤行控制
p1.space_after=Pt(5) #设置段后距离为5磅
p1.space_before=Pt(5) #设置段前距离为5磅 run1=p1.add_run('你好') #写入段落的中的文本“你好”
run1.font.size=Pt(12) #单独设置字体大小为24
run1.font.bold=True #样式设置加粗
run1.italic=True #字形设置斜体
run1.font.underline = True # 下划线
run1.font.color.rgb = RGBColor(255, 0, 0) # 颜色

  

插入图片

#添加图片,设置图片大小
doc.add_picture(r"图片路径", width=Cm(10))

  

插入表格

tab = doc.add_table(rows=5, cols=8, style='Table Grid') # 创建一个5行8列的表格,样式为Table Grid
tab.cell(0, 0).text = '表角' # 0行0列的内容为表角
cell=tab.cell(0, 1).merge(tab.cell(0, 3)) # 合并0行1列到0行3列
p = cell.paragraphs[0]
run = p.add_run(‘合并’) #在单元格内容创建一个段落,并写入‘合并’文本
run.font.size = Pt(10.5) # 字体大小设置,和word里面的字号相对应5号字
run.bold = True
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置为加粗 居中显示

  

python-docx处理Word必备工具的更多相关文章

  1. 最全总结 | 聊聊 Python 办公自动化之 Word(中)

    1. 前言 上一篇文章,对 Word 写入数据的一些常见操作进行了总结 最全总结 | 聊聊 Python 办公自动化之 Word(上) 相比写入数据,读取数据同样很实用! 本篇文章,将谈谈如何全面读取 ...

  2. python如何转换word格式、读取word内容、转成html

    # python如何转换word格式.读取word内容.转成html? import docx from win32com import client as wc # 首先将doc转换成docx wo ...

  3. 十大PHP程序员必备工具

    十大PHP程序员必备工具 1.Notepad++ 总结来说就是小而精,7.4版本的软件包只有2.9M,比一般的IDE小数十倍,但是Notepad++的功能确是很全面的,代码高亮,语法折叠,宏功能,内置 ...

  4. Python中调用自然语言处理工具HanLP手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  5. Mac开发必备工具(一)—— Homebrew

    Homebrew 简介 macOS 缺失的软件包管理器.使用 Homebrew 安装 Apple 没有预装但 你需要的东西.官网有中文说明. 安装与配置 Homebrew 的安装非常简单,将下面这条命 ...

  6. 利用python批量修改word文件名的方法示例

    利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...

  7. 最全总结 | 聊聊 Python 办公自动化之 Word(下)

    1. 前言 关于 Word 文档的读写,前面两篇文章分别进行了一次全面的总结 最全总结 | 聊聊 Python 办公自动化之 Word(上) 最全总结 | 聊聊 Python 办公自动化之 Word( ...

  8. Python批量创建word文档(2)- 加图片和表格

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...

  9. Python批量创建word文档(1)- 纯文字

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...

随机推荐

  1. ES6扩展——数组的新方法(Array.from、Array.of、Array.fill、Array.includes、keys values entries 、find)

    1.Array.from(objec,回调函数)将一个ArrayLike对象或者Iterable对象(类数组对象)转换成一个数组 1)该类数组对象必须具有length属性,用于指定数组的长度.如果没有 ...

  2. Matlab实现BP神经网络预测(附实例数据及代码)

    BP神经网络介绍 神经网络是机器学习中一种常见的数学模型,通过构建类似于大脑神经突触联接的结构,来进行信息处理.在应用神经网络的过程中,处理信息的单元一般分为三类:输入单元.输出单元和隐含单元. 顾名 ...

  3. 干货:详解C++ sort函数的cmp参数!

    学算法的第一天你在学冒泡.桶排 在你还没搞明白快排和归并的时候 你已经学到了数据结构最后的堆排序和希尔排序 可以说排序是很多竞赛生的噩梦-- 于是它诞生了 void std::sort() Sort ...

  4. skynet 开启 https 配置

    修改 Makefile Mac 下: # https : turn on TLS_MODULE to add https support TLS_MODULE=ltls TLS_LIB="$ ...

  5. scikit-learn 1.0 版本新特性及变动前瞻性预览

    1 简介 就在几天前,著名的机器学习框架scikit-learn在pypi上释放了其1.0rc1版本,这里给大家科普一下,版本号中的rc是Release Candidate的简称,代表当前的版本是一个 ...

  6. EL-ADMIN学习笔记

    一,支持接口限流,避免恶意请求导致服务层压力过大 常见的限流功能一般有两个关注点: 1.限流原则,即以什么样的条件对请求进行识别以及放行.常见的作法是给予每个调用API的系统不同的唯一编码,用于监控某 ...

  7. excel中快速删除空白行/区域

    选中要删除的空白所在的列 按Ctrl+G 选择空值 右键->删除->整行

  8. RMQ区间最值查询

    RMQ区间最值查询 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A, 回答若干询问RMQ(A,i,j)(i,j<= ...

  9. DFS与DFS迷宫问题

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数n 和 ...

  10. PHP中的MySQLi扩展学习(四)mysqli的事务与预处理语句

    对于 MySQLi 来说,事务和预处理语句当然是它之所以能够淘汰 MySQL(原始) 扩展的资本.我们之前也已经学习过了 PDO 中关于事务和预处理语句相关的内容.所以在这里,我们就不再多讲理论方面的 ...