python-docx 常用方法

1. 引用库

from docx import Document

2. 新建一个空 docx

document = Document()

3. 保存 docx

document.save(‘c:/test2.docx’)

4. 打开指定的 docx

document = Document(‘c:/test.docx’)

5. 在末尾增加一个段落 paragraph

paragraph = document.add_paragraph(‘Lorem ipsum dolor sit amet.’)

6. 插入段落

使用一个段落作为“光标”,并在其上直接插入一个新段落:在段落 paragraph 前增加一个段落 prior_paragraph

prior_paragraph = paragraph.insert_paragraph_before(‘Lorem ipsum’)

7. 添加标题

document.add_heading(‘The REAL meaning of the universe’)

增加一个级别为 2 的标题

document.add_heading(‘The role of dolphins’, level=2)

8. 添加分页符

document.add_page_break()

9. 添加表

table = document.add_table(rows=2, cols=2)

访问单元格:在 table 表的 0 行 1 列

cell = table.cell(0, 1)

设置单元格文本

cell.text = ‘parrot, possibly dead’

访问 table 表整行

row = table.rows[1]

row.cells[0].text = ‘Foo bar to you.’

row.cells[1].text = ‘And a hearty foo bar to you too sir!’

for row in table.rows:

    for cell in row.cells:

        print(cell.text)

获取表格行与列数

row_count = len(table.rows)

col_count = len(table.columns)

增加行

row = table.add_row()

示例:

get table data

items = get_things_from_database_or_something()

add table

table = document.add_table(1, 3)

populate header row

heading_cells = table.rows[0].cells

heading_cells[0].text = ‘Qty’

heading_cells[1].text = ‘SKU’

heading_cells[2].text = ‘Description’

add a data row for each item

for item in items:

    cells = table.add_row().cells

    cells[0].text = str(item.qty)

    cells[1].text = item.sku

    cells[2].text = item.desc

预格式化表格样式

table.style = ‘LightShading-Accent1’

10. 添加图片

document.add_picture(‘image-filename.png’)

图像大小设置

from docx.shared import Inches

document.add_picture(‘image-filename.png’, width=Inches(1.0))

11. 应用段落样式

创建段落时定义样式

document.add_paragraph(‘Lorem ipsum dolor sit amet.’, style=‘ListBullet’)

创建段落时修改样式

paragraph = document.add_paragraph(‘Lorem ipsum dolor sit amet.’)

paragraph.style = ‘ListBullet’

12. 应用粗体和斜体

中间有一个粗体字的段落需要三个段落,一个正常的段落,一个包含该单词的粗体,以及另一个正常的段落

paragraph = document.add_paragraph(’Lorem ipsum ’)

paragraph.add_run(‘dolor sit amet.’)

Run 对象既有.bold 和.italic 属性

paragraph = document.add_paragraph(’Lorem ipsum ’)

run = paragraph.add_run(‘dolor’)

run.bold = True

paragraph.add_run(’ sit amet.’)

可以对结果集粗体或斜体正确的.add_run()

paragraph.add_run(‘dolor’).bold = True

is equivalent to:

run = paragraph.add_run(‘dolor’)

run.bold = True

except you don’t have a reference to run afterward

它不是必须提供的文字给.add_paragraph() 方法。这可以使你的代码更简单

paragraph = document.add_paragraph()

paragraph.add_run(’Lorem ipsum ’)

paragraph.add_run(‘dolor’).bold = True

paragraph.add_run(’ sit amet.’)

13. 应用字符样式

可使用 add_run 创建段落时指定字符样式

paragraph = document.add_paragraph(’Normal text, ’)

paragraph.add_run(‘text with emphasis.’,‘Emphasis’)

也可以创建段落后指定字符样式

paragraph = document.add_paragraph(’Normal text, ’)

run = paragraph.add_run(‘text with emphasis.’)

run.style = ‘Emphasis’

14. 读写 docx 文件

新建或打开文件,若指定路径则是打开文档;若没有指定路径则是新建文档

引用库

import docx

新建文档

doc_new = docx.Document()

读取文档

doc = docx.Document(ur’C:\1.docx’)

保存文档

doc.save(path_or_stream)

对象集合

python-docx 包含了 word 文档的相关对象集合。

段落集合

doc.paragraphs

表格集合

doc.tables

节  集合

doc.sections

样式集合

doc.styles

内置图形

doc.inline_shapes

插入段落

doc.add_paragraph(u’第一段’,style=None) #插入一个段落,文本为“第一段”

默认是不应用样式,这里也可以不写 style 参数,或者指定一个段落样式

doc.add_paragraph(u’第二段’,style=‘Heading
2’)

这些样式都是 word 默认带有的样式,可以直接罗列出来有哪些段落样式

新增样式

from docx import Document

from docx.shared import RGBColor #这个是 docx 的颜色类

新建文档

doc = Document()

新增样式 (第一个参数是样式名称,第二个参数是样式类型:1 代表段落;2 代表字符;3 代表表格)

style = doc.styles.add_style(‘style name 1’, 2)

设置具体样式

(修改样式字体为蓝色,当然还可以修改其他的,大家自己尝试)

style.font.color.rgb = RGBColor(0x0, 0x0, 0xff)

应用字符样式

字符自然是在段落里面的,可以采用下面方法给段落追加文字和设置字符样式

插入一个空白段落

p = doc.add_paragraph('')

p.add_run(‘123’, style=“Heading 1 Char”)

p.add_run(‘456’)

p.add_run(‘789’, style=“Heading 2 Char”)

这样一个段落就应用了两个字符样式,中间“456”就没应用样式

print p.text  # 输出结果是 u’123456789’ 也还是连续的

设置字体。

当然可以不用通过设置样式对某些字进行设置,也可以直接设置。

p = doc.add_paragraph('')

r = p.add_run(‘123’)

r.font.bold = True    # 加粗

r.font.italic = True  # 倾斜 等等…

表格操作。表格也是经常用到的一种对象类型。

新建一个 2x3 的表格,style 可以不写

table=doc.add_table(rows=2,cols=3,style=None)

可以用 table 的 rows 和 columns 得到这个表格的行数和列数

print len(table.rows)

print len(table.columns)

遍历表格

for row in table.rows:

    row.cells[0].text = ‘1’

    #print row.cells[0].text

新增行或列

table.add_row()

table.add_column()

15. 获取段落文本

doc = Document(r’C:\test.docx’)

变量 doc 为 docx.document.Document 类型

doc.paragraphs 为 list 类型

for i in doc.paragraphs:

    temp_str=i.text

    #变量 temp_str 为 str 类型

    print(temp_str)