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,是一种高…

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语句集,存储在数据库中。存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一些存储过程定义的参数来使用它。…

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

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

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…

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写到…

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

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

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

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

CentOS7 安装或迁移 wordpress(完整迁移)

一、安装Apache web服务器 安装Apache web服务器: yum install -y httpd # 使用yum安装 systemctl start httpd # 启动Apache服务器 systemctl enable httpd # Apache服务器开机后自动启动 使用浏览器打开http://127.0.0.1检查Apache安装是否成功。成功后…

WinForm部署问题

WinForm部署问题 1、解决:This implementation is not part of the Windows Platform 问题? 一:单击 开始 ,单击 运行 ,键入 gpedit.msc ,然后单击 确定 。    二:依次展开 计算机配置 &…

signal软件如何退出账号_超好用的手机视频剪辑软件Videoleap内购分享

注意事项【必读】:1.必须按照下面的教程操作,教程讲的很详细。2.如果遇到帐号密码错误,先看本页面新密码再登陆,别乱试密码。3.如果手机上有你购买的这个软件,请先卸载,再用我们的苹果id登陆下载&#xff0…

python之eval函数,map函数,zip函数

eval(str)函数很强大,官方解释为:将字符串str当成有效的表达式来求值并返回计算结果。所以,结合math当成一个计算器很好用。 eval()函数常见作用有: 1、计算字符串中有效的表达式,并返回结果 >>> eval(pow(2,…

第一个servlet小程序

第一个servlet小程序 com.fry.servlet.HelloServlet 1 package com.fry.servlet;2 3 import javax.servlet.ServletException;4 import javax.servlet.http.HttpServlet;5 import javax.servlet.http.HttpServletRequest;6 import javax.servlet.http.HttpServletResponse;7 im…

win10开启oracle服务器配置,Windows环境(Win10)下安装、配置服务器类Oracle Database 11g Release 2...

该篇为服务器类Oracle Database 11gRelease 2的安装、配置,若需安装、配置桌面类(通常是选择桌面类,如果是将本机作为服务器来使用,则选择服务器类),可参考“Windows环境(Win10)下安装、配置桌面类Oracle Database 11g Release 2”…

简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】

人体动作识别(Human activity recognition)是健康领域一个热点问题,它通过加速度计,陀螺仪等传感器记录人体运动数据,对人体动作进行识别。最近用微信小程序做了一个动作识别的项目,同时尝试部署了单片机。首先奉上b站的视频链接&…

CSS布局说——可能是最全的

前言 现在,我们被称为前端工程师。然而,早年给我们的称呼却是页面仔。或许是职责越来越大,整体的前端井喷式的发展,使我们只关注了js,而疏远了css和html。 其实,我们可能经常在聊组件化,咋地咋地…