【python 让繁琐工作自动化】处理Word文档

API Documentation

.docx文档的结构

在这里插入图片描述

  • Document对象表示整个文档,包含一个Paragraph对象的列表
  • Paragraph对象表示文档中的段落,包含一个Run对象的列表
  • Run对象是相同样式文本的延续,当文本的样式发生改变时,就需要一个新的Run对象

读取word文档

import docx,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理Word')

doc=docx.Document('demo.docx')
#打开一个.docx文件,返回一个Document对象
paragraph=doc.paragraphs
#调用Document对象的paragraphs属性,返回一个Paragraph对象的列表
print(len(paragraph))
#paragraph列表中的元素数量,即:文档段落的数量
paragraph_0_txt=paragraph[0].text
#调用Paragraph对象的text属性,返回某个段落的文本的字符串

run1=paragraph[1].runs
#调用Paragraph对象的runs属性,返回一个包含Run对象的列表
for run in run1:
    print(run.text)
    #Run对象的text属性,返回Run对象所包含的文本内容

有关Run对象:对于docx文件中的一个段落,不同的位置可能存在不同的文本样式,一个Run对象包含一段具有相同样式的连续的文本。
如:" A plain paragraph with some bold and some italic",这段话中,包含4个Run对象,第一个包含文本"A plain paragraph with some",之后文本变成了粗体,所以会产生一个新的Run对象来保存接下来的粗体文本,之后又恢复了非粗体,所以又会有第三个Run对象来保存相应的内容,最后文本变成了斜体,所以产生了第四个Run对象,来保存相应的文本与样式。

从.docx文件中取得完整的文本

import docx
def getText(FileName,Indent=False,addBlankLine=False):
    doc=docx.Document(FileName)
    Text=[]
    for paragraph in doc.paragraphs:
        if Indent:
            Text.append('  '+paragraph.text)
            #Indent=True则在每一段开头添加缩进
        else:
            Text.append(paragraph.text)
    FullText='\n\n'.join(Text) if addBlankLine else '\n'.join(Text)  
    #addBlankLine=True,则再两段之间添加空白行     
    return FullText

调用:

import os
os.chdir('D:/资料/python/python编程快速上手-让繁琐的工作自动化/处理Word')
from ReadDocx import getText
s=getText('demo.docx',addBlankLine=True,Indent=True)
print(s)

在这里插入图片描述

Run属性

可以在Run对象上设置的text属性

属性描述
bold文本以粗体出现
italic文本以斜体出现
underline文本带下划线
strike文本带删除线
double_strike文本带双删除线
all_caps文本以大写首字母出现
small_caps文本以大写首字母出现,小写字母小两磅
shadow文本带阴影
outline文本以轮廓出现,而不是实心
rtl文本从右至左书写
imprint文本以刻入页面的方式出现
emboss文本以凸出页面的方式出现
import docx,os
os.chdir('D:/python/python编程快速上手-让繁琐的工作自动化/处理Word')

doc=docx.Document('demo.docx')
paragraph=doc.paragraphs

print(paragraph[0].style)
##打印第一段的样式
paragraph[0].style='Normal'
#更改第一段的样式为‘Nomal’
run1=paragraph[1].runs
run1[1].underline=True
#将run对象的underline谁能够设置为True
run1[3].underline=True
doc.save('new_demo.docx')

写入文档

Document对象

方法或属性描述参数
add_heading(text=u’’, level=1)在文档末尾添加新标题,并返回新标题的Paragraph对象text—(str)标题的文本;level—(int)标题的样式,如果level=0,则样式设置为Title。如果level=1(或省略),则使用标题1。否则,样式将设置为“标题{level}”。如果级别超出0-9范围,则引发ValueError。
add_paragraph(text=u’’, style=None)将文本添加到文档末尾作为一个新的段落,返回该段落的Paragraph对象text—段落的文本内容,文本可以包含制表符(\t)字符。文本还可以包含换行符(\n)或回车符(\r),每个字符都转换为换行符
add_page_break()添加分页符
save(path_or_stream )将此文档保存到path_or_streampath_or_stream—是文件系统位置的路径(字符串)或类似文件的对象
add_picture(image_path_or_stream,width = None,height = None )在文档末尾添加图像,根据宽度和高度缩放。image_path_or_stream—图片文件的路径。width&height —插入图片的缩放大小,如果未指定宽度或高度,则图片以其原始尺寸显示。如果仅指定一个,它将用于计算比例因子,然后将比例因子应用于未指定的尺寸,从而保留图像的长宽比

Paragraph对象

方法或属性描述参数
add_run(text = None,style = None )将run添加到此段,其中包含文本,并具有通过样式ID style标识的字符样式,返回Run对象text—文本,可以包含制表符(\t)字符。文本还可以包含换行符(\n)或回车符(\r),每个字符都转换为换行符。style—文本样式
insert_paragraph_before(text=None, style=None)在该段落之前插入一个新段落,返回Paragraph对象text——如果提供,新段落将会将其保存在一个Run对象中。style——若提供,则被用于整个段落
clear()将段落的所有内容移除,并返回同样的段落,保留段落级别的样式

Run对象

方法或属性描述参数
add_break(break_type = 6 )添加换行符break_ype——WD_BREAK.LINE,WD_BREAK.PAGE和 WD_BREAK.COLUMN,其中WD_BREAK是从docx.enum.text导入的(from docx.enum.text import WD_BREAK)。 break_type默认为WD_BREAK.LINE
add_picture(image_path_or_stream, width=None, height=None)将图片添加到该Run对象的末尾
add_text(text)将新的文本添加到该Run对象中text将要添加的文本
clear()删除Run对象的所有内容,并返回该对象,保留Run的所有格式
add_tab()在run对象后添加一个制表符
from docx import Document
from docx.enum.text import WD_BREAK

#建立一个空的文档
doc = Document()

#添加一个最大的标题, level = 0
doc.add_heading('Document title',0)
#或者 doc.add_paragraph('Document title','Title')

#添加一个段落
paragraph = doc.add_paragraph('A Plain paragraph having some ')

#段落添加“加粗”的字符“bold”
paragraph.add_run('bold').bold = True
#段落添加字符“and”
run=paragraph.add_run(' and ')
#在run对象上添加文本'some '
run.add_text('some ')
#段落添加“斜体”的字符“italic”
print(run.text)
paragraph.add_run('italic.').italic = True

#添加level 1的标题
doc.add_heading('Heading, level 1', level = 1)

#添加一个段落是“斜体”的字符“斜体”:
doc.add_paragraph('Intense quote', style = 'Intense Quote')

#添加一个段落, 添加"List Number",用数字作为项目符号
List_paragraph=doc.add_paragraph('fir item in ordered list',style = 'List Number')

#在List_paragraph之前添加一个段落,添加"List Bullet",用小点点作为项目符号
List_paragraph.insert_paragraph_before('first item in unordered list', style = 'List Bullet')
#构建一个表格数据:
records = ((3,'101','Spam'),(7,'422','Eggs'),(4,'631','Spam,spam,eggs,and spam'))

#构建表格,1行3列:
table = doc.add_table(rows = 1, cols = 3)

#table 的每个单元格为her_cells
hdr_cells = table.rows[0].cells

#每个单元格赋值:
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'

for qty,id,desc in records:
    row_cells = table.add_row().cells
    row_cells[0].text = str(qty)
    row_cells[1].text = id
    row_cells[2].text = desc

doc.add_picture('Document.png',height=5000000)
#添加分页符:
#doc.add_page_break() #在末尾添加分页
doc.paragraphs[0].runs[0].add_break(WD_BREAK.PAGE)#在特定位置添加分页

doc.save('demo_new.docx')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TongTong-12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值