python自动化处理表格-Python 自动化:处理 Word(笔记)

python-programming-01.png

处理 Word 文件的库叫做 python-docx, 然而这个库导入的时候叫做 docx; 对的名字并不一致。安装的时候使用 pip install python-docx, 而导入的时候使用:

import docx

这里也要说明一下 Word 里面的结构:

整个文档是 Document

Document 当中包括不同数量的 Paragraph 对象

每一个 Paragraph 对象当中有若干个 Run

至于 Run 则是一个 Paragraph 当中,遇到格式改变时候的部分;例如:

This is a bigand sweetapple.

这里面就有 5 个 Run, 分别是 "This is a ", "big”, ” and ", "sweet” 和 ” apple.”

打开文件抽取文字

doc = docx.Document('demo.docx') # 打开一个 Word 文件

print(len(doc.paragraphs)) # 计算有多少个 Paragraph

print(doc.paragraphs[0].text) # 显示第一个 Paragraph 的文字

print(doc.paragraphs[1].text) # 显示第二个 Paragraph 的文字

print(len(doc.paragraphs[1].runs)) # 显示第二个 Paragraph 有多少个 Run

print(doc.paragraphs[1].runs[0].text) # 显示第二个 Paragraph 的第一个 Run 的文字

print(doc.paragraphs[1].runs[1].text) # 显示第二个 Paragraph 的第二个 Run 的文字

print(doc.paragraphs[1].runs[2].text) # 显示第二个 Paragraph 的第三个 Run 的文字

print(doc.paragraphs[1].runs[3].text) # 显示第二个 Paragraph 的第四个 Run 的文字

打开文件抽取所有文字

def getText(filename): # 定义函数,需要 filename 作为输入

doc = docx.Document(filename) # 打开目标 Word 文件

fullText = [] # 创建一个空白列表用于储存文字

for paragraph in doc.paragraphs: # 遍历文档当中的每一个 Paragraph

fullText.append(paragraph.text) # 把 Paragraph 的文字新加到空白列表当中

return ' '.join(fullText) # 把整个列表用回车连接起来

print(getText('demo.docx')) # 调用函数

改变样式

Word?当中的样式包括三种:

Paragraph样式,应用到?Paragraph?对象

Character样式,应用到?Run?对象

Linked样式,应用到?Paragraph?和?Run?对象;然而应用到?Run?对象的时候,应该在样式名称后面加上?Char,?例?runObj.style?=?"Quote?Char"

python-docx?没办法创建样式,只能设定自带和文档里面特有的样式;如果需要,在?Word?里面新建一个样式然后再去引用。

Word?自带以下样式:

"Normal’

"Body?Text’

"Body?Text?2’

"Body?Text?3’

"Caption’

"Heading?1’

"Heading?2’

"Heading?3’

"Heading?4’

"Heading?5’

"Heading?6’

"Heading?7’

"Heading?8’

"Heading?9’

"Intense?Quote’

"List’

"List?2’

"List?3’

"List?Bullet’

"List?Bullet?2’

"List?Bullet?3’

"List?Continue’

"List?Continue?2’

"List?Continue?3’

"List?Number?"

"List?Number?2’

"List?Number?3’

"List?Paragraph’

"MacroText’

"No?Spacing’

"Quote’

"Subtitle’

"TOC?Heading’

"Title’

至于 Run 对象的属性还有更多:

bold: 粗体

italic: 斜体

underline: 下划线

strike: 删除线

double_strike: 双重删除线

all_caps: 全部大写(注意这个是看起来全部大写,实际上的文字还是本来的大小写)

small_caps: 小型大写(本来小写的字母变成大写字母的样子,但是比普通大写字母要小)

shadow: 添加阴影

outline: 添加外边框

rtl: 从右到左的书写顺序

imprint: 阴文,刻入的效果

emboss: 阳文,浮起来的效果

doc = docx.Document('demo.docx') # 打开指定文件

print(doc.paragraphs[0].text) # 查看第一个 Paragraph 的文字

print(doc.paragraphs[0].style) # 查看第一个 Paragraph 的样式

doc.paragraphs[0].style = 'Normal' # 把第一个 Paragraph 的样式设置为 Normal

print(doc.paragraphs[1].text) # 查看第二个 Paragraph 的文字

for run in doc.paragraphs[1].runs: # 遍历第二个 Paragraph 的每一个 Run

print(run.text) # 查看文字

doc.paragraphs[1].runs[0].style = 'QuoteChar' # 把第二个 Paragraph 的第一个 Run 的样式设置为 Quote, 因为应用在 Run 上面的缘故所以需要后面加上 Char

doc.paragraphs[1].runs[1].underline = True # 把第二个 Paragraph 的第二个 Run 设置下划线

doc.paragraphs[1].runs[4].underline = True # 把第二个 Paragraph 的第五个 Run 设置下划线

doc.save('restyled.docx') # 保存文件

写入 Word 文件

新嘉 Paragraph 用 add_paragraph

doc = docx.Document() # 新建一个 Document 对象

doc.add_paragraph('Hello, world!') # 增加一个 Paragraph, 并指定其内容

doc.save('helloworld.docx') # 保存文件

新加 Run 用 add_run

doc = docx.Document() # 新建一个 Document 对象

doc.add_paragraph('Hello world!') # 增加一个 Paragraph, 并指定其内容 -> 只能增加在 Document 的最后

paragraphObject1 = doc.add_paragraph('This is asecond paragraph.') # 增加一个 Paragraph, 并指定其变量名和内容

paragraphObject2 = doc.add_paragraph('This is a yet another paragraph.') # 增加一个 Paragraph, 并指定其变量名和内容

paragraphObject1.add_run(' This text is being added to the second paragraph.') # 给指定 Paragraph 变量增加一个 Run, 并指定其内容 -> 只能增加在 Paragraph 的最后

doc.add_paragraph('Hello, world!', 'Title') # 增加一个 Paragraph, 并指定其内容和样式

doc.save('multipleParagraphs.docx') # 保存文件

新加标题用 add_heading

doc = docx.Document() # 新建一个 Document 对象

for i in range(5): # 从 0 到 4 遍历

doc.add_heading(f'Header {i}', i) # 增加标题;0 则和 Title 样式一样

doc.save('headings.docx') # 保存文件

新加分页符用 add_break(docx.enum.text.WD_BREAK.PAGE)

doc = docx.Document() # 新建一个 Document 对象

doc.add_paragraph('This is on the first page!') # 写入一个 Paragraph

doc.paragraphs[0].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE) # 在第一个 Paragraph 的第一个 run 后面加入一个分页符;如果参数则是普通的分隔符

doc.add_paragraph('This is on the second page!') # 在第二页写入一个 Paragraph

doc.save('twoPage.docx') # 保存文件

新加图片用 add_picture

doc = docx.Document() # 新建一个 Document 对象

doc.add_picture('zophie.png', width = docx.shared.Inches(1), height = docx.shared.Cm(4)) # 插入一个图片,并指定尺寸

doc.save('zophie.docx') # 保存文件

新加表格用 add_table

from docx.enum.table import WD_TABLE_ALIGNMENT

doc = docx.Document() # 新建一个 Document 对象

table = doc.add_table(3,4) # 增加一个 3 行乘以 4 列的 table

table.alignment = WD_TABLE_ALIGNMENT.CENTER # 中间对齐 table

table.cell(1,2).add_paragraph('hello!') # 第 2 行第 3 列另起一行写入文字

table.cell(2,3).text ='world!' # 第 3 行第 4 列写入文字

doc.save(table.docx') # 保存文件

平时 Word 需要用得比较多还是和表格打交道,还是得多看一下表格怎么处理格式等等了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值