Python 第三方库之docx

日常上官网 https://python-docx.readthedocs.io/en/latest/

一、安装

pip install python-docx

二、写入word

word 中主要有两种用文本格式等级:块等级(block-level)和内联等级(inline-level)word 中大部分内容都是由这两种等级的对象组成的(其他的诸如眉页、引脚等,docx 库的作者还在开发中)

块等级(block-level):也就是段落

块对象一般包括:段落(paragraph)、图片(inline picture)、表(table)、标题(heading)、有序列表(numbered lists)、无序列表(bullets lists)

段落是 word 文件中的主要块对象(block-level object),块等级项(block-level item)主要任务是将文本格式从左边界向右边界展示(flows);对于段落而言,边界就是分段标识,或者是文本的列边界,列表(table)也是块对象(block-level object)

内联等级(inline-level):也就是字体

内联对象(inline-level object)是块对象(block-level object)的组成部分,块对象的所有内容都包含在内联对象中,一个块对象由一个或多个内联对象组成,run 是常用的内联对象,例如:

p = document.add_paragraph('This is paragraph')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True

这个例子中一个段落(块对象)包含三个 run(内联对象),每一个 run 都设置有不同属性

写word示例:

# coding:utf-8
import sysfrom docx import Document
from docx.shared import Inchesdef main():reload(sys)sys.setdefaultencoding('utf-8')# 创建文档对象document = Document()# 新增样式(第一个参数是样式名称,第二个参数是样式类型:1代表段落;2代表字符;3代表表格)style = doc.styles.add_style('style name 1', 2)# 从样式库中选取 'Normal' 样式,并设置 'Normal' 样式的字符属性(font)style = document.styles['Normal']style.font.name = "Microsoft YaHei UI"style.font.size = Pt(50)# 将设置好字符属性的样式运用到段落中# p = document.add_paragraph("change font attribution", style = 'Normal')# 从样式库中选取 'Heading 2'' 样式,并设置段落格式(paragraph format)style = document.styles['Heading 2']style.paragraph_format.left_indent = Pt(20)style.paragraph_format.widow_control = True# 将设置好段落格式的 style 运用到段落中# p = document.add_paragraph('This is Heading, level 1', style = style)# 设置文档标题,中文要用unicode字符串document.add_heading(u'我的一个新文档',0)from docx.shared import RGBColor,Inches,Ptfrom docx.enum.text import WD_ALIGN_PARAGRAPH# 往文档中添加段落p = document.add_paragraph('This is a paragraph having some ')p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER # WD_ALIGN_PARAGRAPH.LEFT,左对齐;WD_ALIGN_PARAGRAPH.RIGHT,右对齐p.paragraph_format.left_indent = Inches(0.5)  # 设置段落从左开始缩进,使用Inches来衡量p.paragraph_format.right_indent = Pt(20)      # 设置段落从右开始缩进,使用Pt来衡量p.paragraph_format.first_line_indent = Inches(0.5)  # 设置段落第一行缩进,可以与上两个缩进叠加p.paragraph_format.space_after = Pt(5)    # 设置与上一段间隔 Pt(5)p.paragraph_format.space_before = Pt(10)  # 设置与下一段间隔 Pt(10)p.paragraph_format.line_spacing = Pt(18)  # 行距p_run = p.add_run('xxx')p_run.font.italic = True   # 设置为斜体p_run.font.size = Pt(12)   # 设置字体大小p_run.font.color.rgb = RGBColor(0, 0, 0)  # 设置字体颜色p_run.font.name = u"宋体"  # 设置字体样式p_run.font._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')  # 设置字体样式p_run.font.underline = False  # 不设置下划线p_run.font.bold = None  # 设置粗体为继承上一个字体的格式# 这一类属性,每个有三种状态:True 为使用属性;False 为不使用属性;None 默认属性继承自上一个字体# 添加一级标题document.add_heading(u'一级标题, level = 1',level = 1)document.add_paragraph('Intense quote',style = 'IntenseQuote')# 添加无序列表document.add_paragraph('first item in unordered list',style = 'ListBullet')# 添加有序列表document.add_paragraph('first item in ordered list',style = 'ListNumber')document.add_paragraph('second item in ordered list',style = 'ListNumber')document.add_paragraph('third item in ordered list',style = 'ListNumber')# 添加图片,并指定宽度document.add_picture('e:/docs/pic.png',width = Inches(1.25))# 添加表格: 1行3列table = document.add_table(rows = 1,cols = 3)# 获取第一行的单元格列表对象hdr_cells = table.rows[0].cells# 为每一个单元格赋值,值都要为字符串类型hdr_cells[0].text = 'Name'hdr_cells[1].text = 'Age'hdr_cells[2].text = 'Tel'# 为表格添加一行new_cells = table.add_row().cellsnew_cells[0].text = 'Tom'new_cells[1].text = '19'new_cells[2].text = '12345678'# 添加分页符document.add_page_break()# 往新的一页中添加段落p = document.add_paragraph('This is a paragraph in new page.')# 保存文档document.save('e:/docs/demo1.docx')if __name__ == '__main__':main()

运行程序会得到一个下面的文档

三、读文档 

对于文件名是中文的读取时会报错

  • doc.paragraphs  # 段落集合
  • doc.tables          # 表格集合
  • doc.sections      # 节  集合
  • doc.styles          # 样式集合
  • doc.inline_shapes # 内置图形 等等...

读取已有的word文档示例

# coding:utf-8
import sysfrom docx import Documentdef main():reload(sys)sys.setdefaultencoding('utf-8')# 创建文档对象,写自己的 word 路径document = Document('e:/docs/demo2.docx')# 读取文档中所有的段落列表ps = document.paragraphs# 每个段落有两个属性:style和textps_detail = [(x.text,x.style.name) for x in ps]with open('out.tmp','w+') as fout:fout.write('')# 读取段落并写入一个文件with open('out.tmp','a+') as fout:for p in ps_detail:fout.write(p[0] + '\t' + p[1] + '\n\n')# 读取文档中的所有段落的列表tables = document.tables# 遍历table,并将所有单元格内容写入文件中with open('out.tmp','a+') as fout:for table in tables:for row in table.rows:for cell in row.cells:fout.write(cell.text + '\t')fout.write('\n')if __name__ == '__main__':main()

四、其他事项

1、如果段落中是有超链接的,那么段落对象是读取不出来超链接的文本的,需要把超链接先转换成普通文本,方法:全选word文档的所有内容,按快捷键Ctrl+Shift+F9即可。

2、读取某些文件时会报错,docx.opc.exceptions.PackageNotFoundError: Package not found。原因:docx无法识别doc,需要先手动或者使用win32com转换

from win32com import client as wc
import docxdef doSaveAas():word = wc.Dispatch('Word.Application')doc = word.Documents.Open(u'E:\old.doc')        # 目标路径下的文件doc.SaveAs(u'E:\\new_path.docx', 12, False, "", True, "", False, False, False, False)  # 转化后路径下的文件    doc.Close()word.Quit()doSaveAas()

链接https://www.cnblogs.com/jiayongji/p/7290410.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity AI副总裁Danny Lange:如何用AI助推游戏行业?

本文讲的是Unity AI副总裁Danny Lange:如何用AI助推游戏行业? ,10月26日,在加州山景城举办的ACMMM 2017大会进入正会第三天。在会上,Unity Technology负责AI与机器学习的副总裁Danny Longe进行了题为《Bringing Gaming…

SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解

SPI概述Serial Peripheral interface 通用串行外围设备接口是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高…

oracle并发执行max,跪求大量并发执行insert into select语句的方案

现在有数十万张表要从A库通过insert into tablename select * from tablenamedblink的方式导入到B库中。B机上80个cpu,160G内存。希望能够大量并发执行。怎么写脚本呢?谁有这方面的经验,麻烦指点一下。谢谢。下面是我的脚本:#!/us…

20162314 《Program Design Data Structures》Learning Summary Of The First Week

20162314 2017-2018-1 《Program Design & Data Structures》Learning Summary Of The First Week Summary of teaching materials Algorithm analysis is the basic project of the computer science.Increasing function prove that the utilization of the time and spa…

高并发解决方法

2019独角兽企业重金招聘Python工程师标准>>> 高并发来说,要从实际项目的每一个过程去考虑,页面,访问过程,服务器处理,数据库访问每个过程都可以处理。(前端-宽带-后端-DB) 集群&…

MySQL 之 存储过程

一、初识存储过程 1、什么是存储过程 存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集,存储在数据库中。存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一些存储过程定义的参数来使用它。…

C/C++面试感受和经验以及面试题收藏

http://topic.csdn.net/u/20080924/15/3b00a84e-970f-4dea-92f2-868c5d1ad825.html 前段时间刚参加了n多公司的C/C软件工程师的面试,有国企,外企,私企(moto,飞思卡尔,港湾,中国卫星XXX&#xf…

oracle存储过程季度方法,Oracle存储过程、触发器实现获取时间段内周、月、季度的具体时间...

欢迎技术交流。 QQ:138986722创建table:create table tbmeetmgrinfo(id number primary key, /*主键,自动增加 */huiyishi number, /*会议室编号 */STARTTIME varchar2(30), /*会议开始时间 */ENDTIME varchar2(30), /*会议结束时间 */CREATE…

如何root安卓手机_安卓Root+卡开机画面救砖教程丨以一加手机为例

一加手机买到手已经用了1个多月了,还有很多朋友在问我怎么Root、怎么替换Recovery、怎么安装Magisk、有时候刷Magisk模块变砖怎么解救。小编统一整理一下,其他安卓手机也可以参考,很多思路都是通用的。一加手机刷入TWRP并RootTWRP大概是现在安…

Linux用ctrl + r 查找以前(历史)输入的命令

在Linux系统下一直用上下键查找以前输入的命令,这个找刚输入不久的命令还是很方便的,但是比较久远的命令,用上下键效率就不高了。那个history命令也是个花架子,虽然功能多,但不好用,网上找了下,…

敬畏生产环境

生产环境即是运行用户正在使用的系统环境。有时,一些粗心的用户会把他们的生产环境交给我们,希望我们来进行变更操作,如部署Agent等。但我们实际上并不清楚这些生产环境有多重要,有时也不清楚我们的变更操作有多危险,其…

unity消息队列判断字符串相等有错误_Python3十大经典错误及解决办法

◆ ◆ ◆ ◆ ◆接触了很多Python爱好者,有初学者,亦有转行人。不论大家学习Python的目的是什么,总之,学习Python前期写出来的代码不报错就是极好的。下面,严小样儿为大家罗列出Python3十大经典错误及解决办法&#xf…

php qmqp 没有方法,CentOS7 php 安装 amqp扩展

继续安装完 rabbitmq后,安装phpqmqp扩展1.安装rabbitmq-c安装最新版wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gztar zxf rabbitmq-c-0.8.0.tar.gzcd rabbitmq-c-0.8.0./configure --prefix/usr/local/rabbitmq…

如何提高UDP的可靠性

TCP是通过确认机制和超时重传机制实现可靠传输 UDP UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结…

CentOS 7镜像下载

方式一 官网下载 官网链接:http://isoredirect.centos.org/centos/7/isos/x86_64/ Actual Country 国内资源 Nearby Countries 周边国家资源 方式二 阿里云下载 阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 各个版本的ISO镜像文件…

Docker Dirty Cow逃逸

2019独角兽企业重金招聘Python工程师标准>>> 在Linux中,有一个功能:VDSO(virtual dvnamic shared object),这是一个小型共享库,能将内核自动映射到所有用户程序的地址空间。 Docker逃逸利用Dirty Cow漏洞,将Payload写到…

九月腾讯,创新工场,淘宝等公司最新面试三十题(更新至10.04)

九月腾讯,创新工场,淘宝等公司最新面试三十题 引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的。如今,又即将迈入求职高峰期--10月份&#…

oracle 存long,ORACLE中LONG类型字段的存取

Oracle中存取4000字节以上大文本类型可以用此数据类型,其在C#中的读写方法如下:注意需要引用 System.Data.OracleClient然后添加命名空间:using System.Data.OracleClientORALCE建库脚本:CREATE TABLE TE…

创建office一直转圈_Windows写字板出现广告条幅:推荐用户使用在线版Office

自Windows 95开始,写字板(Wordpad)应用就一直预装在Windows操作系统中。它是一款非常简单的文本编辑器,在功能方面介于记事本和Word之间。近日Rafael Rivera发现微软正在为这款古老的写字板添加新功能--在应用中添加广告横幅。这个广告横幅就是推荐那些写…

2017软件工程实践第二次作业

1、 项目地址:https://github.com/one-piece-zero/sudoku 2、PSP表格记录的估计耗时 3、解题思路: 在拿到这个题目的时候,我最早想到的是大一下学期做的程序语言综合设计实践中的N皇后问题,这两个题目之间有许多的类似之处&#x…