热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonword中表格字体设置_利用Pythondocx读写Word文档中的正文、表格、段落、字体样式等...

前言:前两篇博客介绍了Python的docx模块对Word文档的写操作,这篇博客将介绍如何用docx模块读取已有Word文档中的信息。本篇博客主要内容有

前言:

前两篇博客介绍了 Python 的 docx 模块对 Word 文档的写操作,这篇博客将介绍如何用 docx 模块读取已有 Word 文档中的信息。

本篇博客主要内容有:

1、获取文档的章节信息;

2、获取段落文本信息;

3、获取表格内文本信息;

4、获取文档内格式信息。

1、获取文档章节信息:

1、用docx模块获取已有的word文档对象:

from docx import Document

# Document 类,不仅可以新建word文档,也可以打开一个本地文档

doc = Document('test03.docx') # 想获取的文档文件名,这里是相对路径。

用做示例的 test03.docx 文件截图如下:

文档中有两个章节共两页(一个章节一页),一个章节的页面为 A3 ,另一个为 A4。

2、获取文档章节信息:

# 获取文档所有章节

sections = doc.sections

"class Sections(Sequence):"

print(sections)

#

# 查看章节数量

print(len(sections)) # 2

注意:

章节对象的概念虽然比段落对象大,章节对象可以设置本章节的页面大小页眉页脚等,在该章节的段落对象必须遵守该章节的设置。

但是又并不存在包含关系,也就是说不能通过章节对象获取到段落信息。

3、获取页边距等信息:

# 获取章节对象的页边距等信息

sec0 = sections[0]

"class Section(object):"

'''

官方解释:文档节,提供对节和页面设置的访问。

还提供对页眉和页脚的访问。

'''

print(sec0)

#

# 获取章节页面信息

# 获取页面边距值:(单位为像素)

print('左边距:',sec0.left_margin)

# 左边距: 914400

print('右边距:',sec0.right_margin)

# 右边距: 914400

print('上边距:',sec0.top_margin)

# 上边距: 1143000

print('下边距:',sec0.bottom_margin)

# 下边距: 1143000

print('页眉边距:',sec0.header_distance)

# 页眉边距: 540385

print('页脚边距:',sec0.footer_distance)

# 页脚边距: 629920

print('页面方向:',sec0.orientation)

# 页面方向: LANDSCAPE (1)

print('页面高度:',sec0.page_height)

# 页面高度: 10657205

print('页面宽度:',sec0.page_width)

# 页面宽度: 15085695

这里获取的是第一个章节的页面信息,也就是 A3 页面的信息。

注:上一篇博客 往Word文档中插入图片、表格,设置表格样式,章节,页眉页脚等,在介绍设置页面信息时,忘记介绍如何设置页面方向了,这里补充一下:

设置页面方向:

# 导入设置页面方向所需模块

from docx.enum.section import WD_ORIENT

# 获取章节对象

section = document.sections[0]

# 设置页面方向

section.orientation = WD_ORIENT.LANDSCAPE # 横向

可设置项有横向( LANDSCAPE ) 和纵向 ( PORTRAIT ):

'''

'PORTRAIT', 0, 'portrait', 'Portrait orientation.'

'LANDSCAPE', 1, 'landscape', 'Landscape orientation.'

'''

文档截图:

4、获取文档页眉页脚信息:

head0 = sec0.header # 获取页眉对象

print(head0)

#

head0_pars = head0.paragraphs # 获取 页眉 paragraphs

# 获取页眉文字信息

# 因存在多个 paragraph 对象的可能所以用循环读取的方式

head0_string = ''

for par in head0_pars:

head0_string += par.text

print(head0_string)

# 仪征市马集镇总体规划(2017-2030)——说明

# 获取页脚信息,也是类似的方法

foot0 = sec0.footer

print(foot0) # 获取页脚对象

#

foot0_pars = foot0.paragraphs

foot0_string = ''

for par in foot0_pars:

foot0_string += par.text

print(foot0_string)

# 1

2、获取段落文字信息:

1、获取Word文档所有段落对象:

"获取文档所有段落信息:"

# 获取文档所有段落对象

paragraphs = doc.paragraphs

注意:

paragraphs 获取的是文档中所有段落对象的列表,严格来说是word文档中正文部分的段落对象列表。因为通过前文的介绍,许多除正文部分,如 表格,页面页脚等元素也包含 paragraph 对象。

而 doc.paragraphs 获取到的 paragraph 不包含这些段落对象。

2、获取段落对象文字信息:

print(paragraphs)

print(len(paragraphs)) # 打印结果:20

# 获取一个段落对象的文字信息

par0 = paragraphs[0]

print(par0)

par0_string = par0.text

print(par0_string)

# 获取所有段落文字信息

pars_string = [par.text for par in paragraphs]

print(pars_string)

par0_string 打印截图:

3、获取段落格式信息:

print('段落对齐方式:',par0.paragraph_format.alignment)

# 段落对齐方式: LEFT (0)

print('左缩进:',par0.paragraph_format.left_indent)

# 左缩进: None

print('右缩进:',par0.paragraph_format.right_indent)

# 右缩进: None

print('首行缩进:',par0.paragraph_format.first_line_indent)

# 首行缩进: 304800

print('行间距:',par0.paragraph_format.line_spacing)

# 行间距: 1.5

print('段前间距:',par0.paragraph_format.space_before)

# 段前间距: 198120

print('段后间距:',par0.paragraph_format.space_after)

# 段后间距: 198120LIK1

3、获取文字格式信息:

paragraph 对象 里还有更小的 run 对象,run 对象才包含了段落对象的文字信息。

paragraph.text 方法也是通过 run 对象的方法获取到文字信息的:

paragraph.text 方法源码:

def text(self):

text = ''

for run in self.runs:

text += run.text

return text

文字的字体、大小、下划线等信息都包含在 run 对象中(不清楚的看前面的博客):

# 获取段落的 run 对象列表

runs = par0.runs

print(runs)

# 获取 run 对象

run_0 = runs[0]

print(run_0.text) # 获取 run 对象文字信息

# 打印结果:

# 坚持因地制宜,差异化打造特色小镇,

文档 段落 和 run 对象示意:

获取文字格式信息:

# 获取文字格式信息

print('字体名称:',run_0.font.name)

# 字体名称: 宋体

print('字体大小:',run_0.font.size)

# 字体大小: 152400

print('是否加粗:',run_0.font.bold)

# 是否加粗: None

print('是否斜体:',run_0.font.italic)

# 是否斜体: True

print('字体颜色:',run_0.font.color.rgb)

# 字体颜色: FF0000

print('字体高亮:',run_0.font.highlight_color)

# 字体高亮: YELLOW (7)

print('下划线:',run_0.font.underline)

# 下划线: True

print('删除线:',run_0.font.strike)

# 删除线: None

print('双删除线:',run_0.font.double_strike)

# 双删除线: None

print('下标:',run_0.font.subscript)

# 下标: None

print('上标:',run_0.font.superscript)

# 上标: NoneLIK2

注:前面的博客好像也没介绍文字背景颜色的设置…

背景颜色设置方法: (与字体颜色设置方法有区别)

# 设置背景颜色

from docx.enum.text import WD_COLOR_INDEX

run_2.font.highlight_color = WD_COLOR_INDEX.YELLOW

背景颜色可选值有:

'''

'AUTO', 0, 'default'

'BLACK', 1, 'black'

'BLUE', 2, 'blue'

'BRIGHT_GREEN', 4, 'green',

'DARK_BLUE', 9, 'darkBlue',

'DARK_RED', 13, 'darkRed'

'DARK_YELLOW', 14, 'darkYellow'

'GRAY_25', 16, 'lightGray'

'GRAY_50', 15, 'darkGray'

'GREEN', 11, 'darkGreen'

'PINK', 5, 'magenta'

'RED', 6, 'red'

'TEAL', 10, 'darkCyan'

'TURQUOISE', 3, 'cyan'

'VIOLET', 12, 'darkMagenta'

'WHITE', 8, 'white'

'YELLOW', 7, 'yellow'

'''LIK3

4、获取文档中表格信息:

示例文档中表格截图:

1、获取表格样式、单元格对象及文字信息:

# 获取文档中表格信息

tables = doc.tables # 获取文档中所有表格对象的列表

print(tables)

# []

print(len(tables)) # 查看文档中表格数量

# 1

table0 = tables[0] # 获取表格对象

# 获取表格的样式信息

print(table0.style)

# _TableStyle('Normal Table') id: 190621384

# 获取一个表格的所有单元格

cells = table0._cells

print(len(cells)) # 表格中单元格数量

# 15

# 获取单元格内所有文字信息

cells_string = [cell.text for cell in cells]

print(cells_string)

LIK4

cells_string 打印截图:

从截图中可以看出来,用 tableobj._cells 获取到的单元格对象列表是按行排列的。

2、获取表格的行列对象:

# 获取表格对象行数量、列数量

col_num = len(table0.columns)

print(col_num) # 3

# 行数量

row_num = len(table0.rows)

print(row_num) # 5

# 获取行对象

row0 = table0.rows[0]

# 获取列对象

col0 = table0.columns[0]

# 获取行对象文字信息

'要用 row0.cells 获取行对象的 cell 才能获取其文字信息'

row0_string = [cell.text for cell in row0.cells]

print(row0_string)

# 获取列对象文字信息

col0_string = [cell.text for cell in col0.cells]

print(col0_string)

LIK5

注:在介绍单元格格式信息时,说过单元格内文字信息也是通过 run 对象设置,故获取文字信息也和前面获取段落文字信息类似,就不重复讲了。

结尾:

以上就是本篇博客的全部内容了,后面将会用两个实例来将前面三篇博客的知识点串联起来,感谢阅读。

【Python与Office】专栏

该专栏会对 Python 的第三方模块,如:xlwt,xlrd,python-docx等,操作 Office 办公软件(Word Excel PPT)的方法进行详细讲解。同时也会搭配一些实例演练,一方面强化知识点的理解与运用,另一方面也希望能起到,引导读者进行思考:如何用 python 提高 offic 办公软件办公效率的作用。

感兴趣的朋友,可以点个 关注 或 收藏 。如在博客中遇到任何问题或有一些想法、需求,可留言或私信。

创作不易,你的支持是我最大的动力,感谢 !

本文版权归趣快排营销www.SEOguruBLOG.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ㊣61910465



推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
醒不睡睡不醒_269
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有