上节对python如何定制word的页眉页脚做了详细介绍,当然,要作出一篇精彩的word文档,样式公布可没,本章继续介绍python如何玩转word的样式。

使用样式

python如何玩转word的样式

此页面使用前一页中开发的概念而不作介绍。如果术语不熟悉,请参阅word的样式参考。

访问样式

使用以下属性访问样式:

>>> document = Document()

>>> styles = document.styles

>>> styles

该对象按名称提供对定义样式的字典式访问:

>>> styles['Normal']

注意

内置样式使用其英文名称存储在WordprocessingML文件中,例如"标题1",即使在本地化版本的Word上工作的用户将在UI中看到本地语言名称,例如"Kop 1"。因为python-docx在WordprocessingML文件上运行,所以样式查找必须使用英文名称。此外部站点上提供的文档允许您创建本地语言名称和英语样式名称之间的映射::show =

用户定义的样式(也称为自定义样式)未进行本地化,并且使用与Word UI中显示的名称完全相同的名称进行访问。

该对象也是可迭代的。通过使用标识属性,可以生成定义样式的各种子集。例如,此代码将生成已定义段落样式的列表:

>>> from docx.enum.style import WD_STYLE_TYPE

>>> styles = document.styles

>>> paragraph_styles = [

... s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH

... ]

>>> for style in paragraph_styles:

... print(style.name)

...

Normal

Body Text

List Bullet

应用样式

应用样式

word的paragraph对象,每个有style 属性。将样式对象分配给此属性将应用该样式:

>>> document = Document()

>>> paragraph = document.add_paragraph()

>>> paragraph.style

>>> paragraph.style.name

'Normal'

>>> paragraph.style = document.styles['Heading 1']

>>> paragraph.style.name

'Heading 1'

样式名称也可以直接分配,在这种情况下python-docx将为您执行查找:

>>> paragraph.style = 'List Bullet'

>>> paragraph.style

>>> paragraph.style.name

'List Bullet'

也可以使用样式对象或其名称在创建时应用样式:

>>> paragraph = document.add_paragraph(style='Body Text')

>>> paragraph.style.name

'Body Text'

>>> body_text_style = document.styles['Body Text']

>>> paragraph = document.add_paragraph(style=body_text_style)

>>> paragraph.style.name

'Body Text'

添加或删除样式

通过指定唯一名称和样式类型,可以向文档添加新样式:

>>> from docx.enum.style import WD_STYLE_TYPE

>>> styles = document.styles

>>> style = styles.add_style('Citation', WD_STYLE_TYPE.PARAGRAPH)

>>> style.name

'Citation'

>>> style.type

PARAGRAPH (1)

使用该base_style属性指定新样式应从以下格式继承格式设置的样式:

>>> style.base_style

None

>>> style.base_style = styles['Normal']

>>> style.base_style

>>> style.base_style.name

'Normal'

只需调用其方法即可从文档中删除样式 :

>>> styles = document.styles

>>> len(styles)

10

>>> styles['Citation'].delete()

>>> len(styles)

9

注意

Style.delete()方法从文档中删除样式的定义。它不会影响应用该样式的文档中的内容。具有未在文档中定义的样式的内容使用该内容对象的默认样式来呈现,例如在段落的情况下为"正常"。

定义字符格式

字符,段落和表格样式都可以指定要应用于具有该样式的内容的字符格式。可以在样式中指定可以直接应用于文本的所有字符格式。示例包括字体字体和大小,粗体,斜体和下划线。

这三种样式类型中的每一种都具有 提供对象访问的属性。样式的对象提供了获取和设置该样式的字符格式的属性。

这里提供了几个例子。有关完整的可用属性集,请参阅API文档。

可以像这样访问样式的字体:

>>> from docx import Document

>>> document = Document()

>>> style = document.styles['Normal']

>>> font = style.font

字体和大小设置如下:

>>> from docx.shared import Pt

>>> font.name = 'Calibri'

>>> font.size = Pt(12)

许多字体属性是三值,这意味着他们可以采取的价值观 TrueFalseNoneTrue表示该物业处于"开启"状态,表示该物业处于False"关闭"状态。从概念上讲,该None值意味着"继承"。由于样式存在于继承层次结构中,因此能够在层次结构中的正确位置指定属性非常重要,通常尽可能远离层次结构。例如,如果所有标题都应该是Arial字体,那么在标题1 样式上设置该属性并使标题2标题1继承更有意义。

大胆和斜体都是三态属性,如全帽,删除线,上标等等。有关完整列表,请参阅API文档:

>>> font.bold, font.italic

(None, None)

>>> font.italic = True

>>> font.italic

True

>>> font.italic = False

>>> font.italic

False

>>> font.italic = None

>>> font.italic

None

下划线是一种特殊情况。它是三态属性和枚举值属性的混合体。True意味着单一下划线,是迄今为止最常见的。False意味着没有下划线,但None如果不需要下划线,则更经常是正确的选择,因为很少从基础样式继承下划线。其他形式的下划线(如double或dashed)是使用枚举的成员指定的:

>>> font.underline

None

>>> font.underline = True

>>> # or perhaps

>>> font.underline = WD_UNDERLINE.DOT_DASH

定义段落格式

段落样式和表格样式都允许指定段落格式。这些样式通过其属性提供对对象的访问。

段落格式包括布局行为,例如对齐,缩进,前后空格,之前的分页控制。有关可用属性的完整列表,请参阅该对象的API文档页面。

下面是一个如何创建一个段落样式的示例,该段落样式具有1/4英寸的悬挂缩进,上方12个点的间距:

>>> from docx.enum.style import WD_STYLE_TYPE

>>> from docx.shared import Inches, Pt

>>> document = Document()

>>> style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)

>>> paragraph_format = style.paragraph_format

>>> paragraph_format.left_indent = Inches(0.25)

>>> paragraph_format.first_line_indent = Inches(-0.25)

>>> paragraph_format.space_before = Pt(12)

>>> paragraph_format.widow_control = True

使用段落特定的样式属性

段落样式具有一个 属性,该属性指定要应用于在该样式的段落之后插入的新段落的样式。当样式通常只在序列中出现一次(例如标题)时,这非常有用。在这种情况下,完成标题后,段落样式可以自动设置回主体样式。

在最常见的情况(正文段落)中,后续段落应该与当前段落具有相同的样式。如果未指定下一个段落样式,则默认情况下通过应用相同样式来处理此情况。

以下是如何将标题1样式的下一个段落样式更改为正文文本的示例 :

>>> from docx import Document

>>> document = Document()

>>> styles = document.styles

>>> styles['Heading 1'].next_paragraph_style = styles['Body Text']

可以通过分配None或样式本身来恢复默认行为:

>>> heading_1_style = styles['Heading 1']

>>> heading_1_style.next_paragraph_style.name

'Body Text'

>>> heading_1_style.next_paragraph_style = heading_1_style

>>> heading_1_style.next_paragraph_style.name

'Heading 1'

>>> heading_1_style.next_paragraph_style = None

>>> heading_1_style.next_paragraph_style.name

'Heading 1'

控制样式在Word UI中的显示方式

样式的属性分为两类,行为属性格式属性。其行为属性控制样式在Word UI中出现的时间和位置。其格式设置属性确定应用样式的内容的格式,例如字体的大小及其段落缩进。

一种风格有五种行为属性:

·

·

·

·

·

有关这些行为属性如何交互的说明,请参阅" 的" 部分,以确定样式在Word UI中的显示时间和位置。

priority属性采用整数值。其他四种样式行为属性是三态,这意味着它们可以取值True (on),False(off)或None(inherit)。

在样式库中显示样式

以下代码将使"正文文本"段落样式首先显示在样式库中:

>>> from docx import Document

>>> document = Document()

>>> style = document.styles['Body Text']

>>> style.hidden = False

>>> style.quick_style = True

>>> style.priorty = 1

从样式库中删除样式

此代码将从样式库中删除"正常"段落样式,但允许它保留在推荐列表中:

>>> style = document.styles['Normal']

>>> style.hidden = False

>>> style.quick_style = False

使用潜在样式

有关如何定义尚未在.docx文件的styles.xml部分中定义的内置样式的行为属性的说明, 请参阅的和部分 。

访问文档中的潜在样式

可以从styles对象访问文档中的潜在样式:

>>> document = Document()

>>> latent_styles = document.styles.latent_styles

一个对象支持len(),迭代和样式名字典式的访问:

>>> len(latent_styles)

161

>>> latent_style_names = [ls.name for ls in latent_styles]

>>> latent_style_names

['Normal', 'Heading 1', 'Heading 2', ... 'TOC Heading']

>>> latent_quote = latent_styles['Quote']

>>> latent_quote

>>> latent_quote.priority

29

更改潜在样式默认值

该对象还提供对当前文档中内置样式的默认行为属性的访问。这些默认值为 定义的任何未定义属性以及没有明确潜在样式定义的内置样式的所有行为属性提供值。有关完整可用属性集的对象,请参阅API文档 :

>>> latent_styles.default_to_locked

False

>>> latent_styles.default_to_locked = True

>>> latent_styles.default_to_locked

True

添加潜在的样式定义

可以使用方法添加新的潜在样式 。此代码为内置样式"List Bullet"添加了一种新的潜在样式,将其设置为显示在样式库中:

>>> latent_style = latent_styles['List Bullet']

KeyError: no latent style with name 'List Bullet'

>>> latent_style = latent_styles.add_latent_style('List Bullet')

>>> latent_style.hidden = False

>>> latent_style.priority = 2

>>> latent_style.quick_style = True

删除潜在的样式定义

可以通过调用其delete()方法删除潜在样式定义 :

>>> latent_styles['Light Grid']

>>> latent_styles['Light Grid'].delete()

>>> latent_styles['Light Grid']

KeyError: no latent style with name 'Light Grid'

有关样式的介绍,就暂时到这里,老铁们有什么意见和需求请尽管提,觉得不错的点个大赞。

python关闭word_python自动化办公:玩转word之样式秘笈相关推荐

  1. python在办公上的应用_python自动化办公:玩转word之样式秘笈

    上节对python如何定制word的页眉页脚做了详细介绍,当然,要作出一篇精彩的word文档,样式公布可没,本章继续介绍python如何玩转word的样式. 使用样式 python如何玩转word的样 ...

  2. Python 自动化办公-玩转 Word

    只要是简单重复的工作,就想办法用 Python 来帮你解决吧,人生苦短,你需要 Python. Word 是办公软件中使用频率非常高的软件之一了,假如你需要调整 100 个 Word 文档的格式保持统 ...

  3. Python八个自动化办公的技巧

    Python八个自动化办公的技巧 大家好 我是毕加锁 (锁!) 这篇文章主要介绍了几个Python自动化办公的技巧,可以大大提高工作效率,例如:Word文档doc转docx.Excel文件批量合并.W ...

  4. python常用库 自动化办公类 —— PyPDF2(处理pdf文件)

    python常用库 自动化办公类 -- PyPDF2(处理pdf文件) 摘要 PyPDF库的安装 PyPDF库的常用功能 文字提取 合并pdf文件 旋转pdf页面 pdf文件加密 摘要 本文主要介绍了 ...

  5. 〖Python自动化办公篇⑥〗- word文件自动化 - word操作与读取word文件

    说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取 ...

  6. Python程序设计与科学计算精录总结Episode.4 Python进阶:自动化办公应用(基于Michael导师Python课程与VS2019)

    听说, 星空从不耀白. 所以, 凡是夜, 我都低头疾走. 宁静的夏, 望着猎户天际划破, 你许下丝缕的心愿, 愿与我恒久. 可是, 哪里有长守,只不过是慰藉呓语几片. 你悄悄地离开, 捎去美丽的心愿, ...

  7. 如何用Python操作Excel自动化办公?一个案例教会你openpyxl——读取数据

    欢迎大家关注我,我是拾陆,关注同名"二八Data" 数据分析工作最难搞的是处理数据的过程,不然不会有专门的ETL(数据抽取.转换.加载)工程师了.如果是企业级数据处理可能数据库直接 ...

  8. Python实现Office自动化办公(实现Python对word基本操作、对excel基本操作、在word中插入表格、word中插入网站爬虫取图)

    Python实现Office办公自动化,以商务流程为例 一. Pycharm 2018(Mac版)的下载 二.Welcome to PyCharm 三.使用DocxTemplate功能模块,实现pyt ...

  9. 【python自动化办公02】word操作-word转pdf

    点击上方"AI搞事情"关注我们 清明 Python调用Win32com实现Office批量转PDF https://www.cnblogs.com/lolipop2019/p/14 ...

  10. 【python自动化办公01】word操作-新建文档

    点击上方"AI搞事情"关注我们 Python操作Word(Win32com)https://zhuanlan.zhihu.com/p/67543981 Office VBA 参考h ...

最新文章

  1. angularjs html5模式,angularjs – 确定在控制器中启用了HTML5模式
  2. 一维数组和二位数组作为函数参数进行传递的方式
  3. 订单系统:从0到1设计思路
  4. DL之perceptron:利用perceptron感知机对股票实现预测
  5. Python_sqlalchemy之多对多建表
  6. vbe6ext.olb不能被加载解决方案
  7. RxJs SwitchMapTo 操作符之移花接木
  8. SQLServer之PRIMARY KEY约束
  9. 有两个python怎么停用其中一_python3.X 复学(2)-----开始了就不要停止
  10. Python—语法基础(8) 分支、循环结构
  11. 防止U盘中病毒的小技巧
  12. java基础之 hashmap
  13. Sqlite 数据库出现database disk image is malformed报错的解决方法
  14. python下载官网-python下载官网
  15. c语言sizeof输出单位,急,求大神!C语言中sizeof问题
  16. java基础杂谈(一)
  17. mysql乘法函数_数据库入门(MySQL):mySQL运算符与mySQL常用函数
  18. 运维学习:常用运维工具
  19. 除了孙宇晨 币圈还有这些人入不得、出不去
  20. matlab生成指数分布,MATLAB如何使用exppdf函数计算指数分布的概率密度

热门文章

  1. 《NX-OS与Cisco Nexus交换技术:下一代数据中心架构(第2版)》一2.9 本章小结...
  2. Linux Shell脚本测试案例(一)
  3. Windows API一日一练(60)CreateIoCompletionPort和GetQueuedCompletionStatus函数
  4. Python使用matplotlib可视化模拟烧烤摊每月营业额折线图
  5. 查看docker镜像内部端口号_DOCKER 常用命令
  6. 为什么我电脑的所有浏览器都开不了网页
  7. PHP报错:Cannot use a scalar value as an array
  8. ELK logstash的grok 自带的正则匹配、自定义正则 使用
  9. easyui 输入框、选择框、文字框
  10. SVN共享链接时,避免使用服务器地址,要使用根目录(^)