1 python读取word文本
import docx
'''
pip install --user -U python-docx
docx文档在python-docx中有3种不同的类型:Document对象表示整个文档;
Document对象包含一个Paragraph对象的列表表示文档种的段落;
每个paragraph对象都都包含一个Run对象的列表。
1个Run对象是相同样式文本的延续,当文本样式发生改变时,就需要一个新的Run对象。
'''
# 打开1个.docx文档
doc = docx.Document('test.docx')
# 该文档共有几个Paragraph对象,每个Paragraph对象都有1个text属性,该属性包含段落中文本的字符串没有样式信息
print(len(doc.paragraphs))
print(doc.paragraphs[0].text)
print(doc.paragraphs[1].text)
# 每个Paragraph对象也都有1个runs属性,Run对象也有一个text属性
for i in range(len(doc.paragraphs[1].runs)):
print(doc.paragraphs[1].runs[i].text)
print('-'*80)
# 从.docx文档中取得完整的文本
def getText(filename):
doc = docx.Document(filename)
fullText = []
for para in doc.paragraphs:
fullText.append(para.text)
return '\n'.join(fullText)
# 若让每一段缩进,就将append()替换为 fullText.append(' '+para.text)
# 要在段落之前增加空行,就将join()调用替换为: return '\n\n'.join(fullText)
print(getText('test.docx'))
2 创建带有非默认样式的Word文档
Run 对象的text属性
属性 | 描述 |
---|---|
bold | 文本以粗体出现 |
italic | 文本以斜体出现 |
underline | 文本带下划线 |
strike | 文本带删除线 |
double_strike | 文本带双删除线 |
all_caps | 文本以大写字母出现 |
small_caps | 文本以大写字母出现,但大小和小写字母一样 |
shadow | 文本带阴影 |
outline | 文本以轮廓出现,而不是以实心出现 |
rtl | 文本从右至左书写 |
imprint | 文本以刻入页面的方式出现 |
emboss | 文本以凸出页面的方式出现 |
import docx
'''
创建带有非默认样式的Word文档
如果想要创建的Word文档使用默认样式以外的样式,就需要打开1个空白Word文档,创建新样式。
再用docx.Document()打开这个空白文档,将它作为Word文档的基础
'''
'''
Run属性
通过text属性,Run可以进一步设置样式。每个属性都可以被设置为3个值之一:
True(该属性总是启用,不论其他样式是否应用于该Run)、
False(该属性总是禁用)、
None(默认使用该Run被设置的任何属性)
'''
doc = docx.Document('test.docx')
print(doc.paragraphs[0].text)
print(doc.paragraphs[0].style)
print(doc.paragraphs[1].text)
# doc.paragraphs[1].runs[0].style = 'QuoteChar'
doc.paragraphs[1].runs[1].shadow = True
doc.paragraphs[1].runs[2].underline = True
doc.save('newWord.docx')
3 在word文档中插入标题、段落、图片
import docx
from docx.shared import Pt, RGBColor, Inches
from docx.oxml.ns import qn
'''
word添加标题、在指定位置出增加段落及图片
add_heading()的参数是一个标题文本的字符串,以及1个从0到4的整数。
整数0表示标题是Title样式,这用于文档的顶部。
整数1到4是不同的标题层次,add_heading()返回的是一个Paragraph对象。
'''
doc = docx.Document()
doc.add_heading('Header 0', 0)
doc.add_heading('Header 1', 1)
doc.add_heading('Header 2', 2)
doc.add_heading('Header 3', 3)
doc.add_heading('Header 4', 4)
doc.save('add.docx')
doc = docx.Document()
doc.add_heading('Header 0', 0)
doc.add_heading('Header 1', 1)
doc.add_heading('Header 1.1', 2)
doc.add_heading('Header 1.1.1', 3)
doc.add_heading('Header 1.2', 2)
doc.add_heading('Header 1.2.1', 3)
run = doc.add_heading("", level=3).add_run("1.2.2 三级标题")
# 设置西文字体
run.font.name = u'宋体'
# 设置中文字体
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
# 设置字体颜色
run.font.color.rgb = RGBColor(255, 55, 55) # 红色
# 设置字体大小
run.font.size = Pt(30)
# 设置下划线
run.font.underline = True
# 设置删除线
run.font.strike = True
# 设置加粗
run.bold = True
# 设置斜体
run.italic = True
for para in doc.paragraphs:
# 指定位置出插入段落,并设置段落样式
if para.text in ['Header 1.2']:
# 段前插入
p1 = para.insert_paragraph_before('这是插入的一个段落') # 继续添加文字
run = p1.add_run("段落中的文字")
run.font.size = Pt(10.5)
run.font.name = u'宋体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
# 在文档最后插入
doc.add_paragraph('这是插入的第二个段落')
# 在文档指定位置中插入图片
for para in doc.paragraphs:
if para.text in ['Header 1.2.1']:
p2 = para.insert_paragraph_before('这是插入的第一张图片')
run2 = p2.add_run('\n')
run2.add_picture('./img/landscape.jpeg', width=Inches(6.0), height=Inches(4.0))
doc.save('add1.docx')