安装

  • pip install python-docx (python3)
  • easy_jinstall python-docx (python2)

docx文档基本操作

写在前面

from docx import Document

document = Document()   #创建空白docx

写入段落标题

## 添加段落
paragraph = document.add_paragraph('这是我的文本段落1111……')
# document.add_paragraph('这是我的文本段落2222……')
# 插入第一段落
piror_para = paragraph.insert_paragraph_before('这是我的文本段落00000……')
# 添加标题
document.add_heading('测试文本01')      #默认添加一级标题
# jupyter 中查看document.add_heading用法:document.add_heading??
document.add_heading('测试文本02',level=2)  #指定为二级标题

添加分页

## 添加分页
from docx import Document
document = Document()
document.add_page_break()
document.save('text1.docx')

添加表格

## 添加表格
from docx import Document
document = Document()
table = document.add_table(rows=2,cols=2)   #添加表格   两行两列
# table.cell??
cell = table.cell(0,1)  #获取第一行第二列单元格
cell.test = 'name'      #给第一行第二列写入内容
document.save('test2_table.docx')

获取行写入值

## 获取行写入值
row = table.rows[1]     #获取第二行
row.cells[0].text = '我是第二行第一列'
row.cells[1].text = '我是第二行第二列'

读取表格值

## 读取表格值
for row in table.rows:  # 获取每一行对象
    for cell in row.cells:  #通过每一行对象获取每个单元格
        print(cell.text)    #获取每个单元格的内容
row_count = list(table.rows)    #获取总行数
document.save('test2_table.docx')
col_count = len(table.columns)

docx添加表格数据基本操作

表格数据的构建

datas = (
    (7,'1024','Plush kittens'),
    (3,'2042','Furbees'),
    (1,'1288','French poodle collars deluxe'),
)

添加表头数据

table = document.add_table(1,3) #添加一行三列表格构建表头
heading_cells = table.rows[0].cells #通过第一行获取到第一行的所有单元格
heading_cells[0].text = 'Qty'
heading_cells[1].text = 'SKU'
heading_cells[2].text = 'Description'

实现在表头下添加构建的数据

# 逐行取出数据    for循环
# 表头下添加行
# 将数据写入单元格
for data in datas:
    cells = table.add_row().cell    #添加行并取出当前行的所有单元格
    cell[0].text = str(data[0])
    cell[1].text = data[1]
    cell[2].text = data[2]

docx图片基本操作

添加图片

from docx import Document

document = Document()
document.add_picture('测试.jpg')

设置图片大小

## 设置图片大小
from docx.shared import Inches

document.add_picture('测试.jpg',width=Inches(1.0))
document.save('test_image.docx')

docx设置段落样式基本操作

from docx import Document

document = Document()
document.add_paragraph('我是段落1111',style='List Bullet')
document.save('test_style.docx')
#还可以这样设置段落样式
lis_para = document.add_paragraph('我是段落22222222')
lis_para.style = 'List Bullet'
para3 = document.add_paragraph('我是段落33333')
para3.add_run('我是添加在段落3333后面的内容')   #追加在某段落后面的内容

docx设置字体样式基本操作

设置加粗

## 设置加粗
para4 = document.add_paragraph('我是段落4444444')
run = para4.add_run('我是追加在para4后边的内容')
# 需要加粗run这个内容
run.bold = True
# 需要追加内容设置为加粗
para4.add_run('我是追加在run后面的字体').bold = True

设置倾斜

## 设置字体倾斜
para5 = document.add_paragraph('我是段落555555')
para5.add_run('我是para5后边的内容','Emphasis')
para6 = document.add_poaragraph('我是段落666666')
run = para6.add_run('我是添加在para6后边的内容')
run.style = 'Emphasis'

docx打开文档并另存为

## 打开文档
from docx import Document

document = Document()
document.save('test.docx')
document = Document('existing-document-file.docx')  # 打开一个文档
document.save('new-file-name.docx')     #将文档另存为

docx设置段落格式

设置段落对齐方式

## 设置段落对齐方式
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

document = Document()
para = document.add_paragraph('我是段落11111')
para_format = para.paragraph_format    #设置段落格式化
para_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER   #设置段落文本内容居中对齐

缩进

## 缩进
from docx.shared import Inches

para2 = document.add_paragraph('这是段落22222')
para2_format = para2.paragraph_format

from docx.shared import Pt

para2_format.left_indent = Inches(0.5)  #左缩进0.5inches
para3 = document.add_paragraph('我是段落33333')
para3_format = para3.paragraph_format
para3_format.right_indent = Pt(24)  #右缩进

# 设置为首行缩进
para4 = document.add_paragraph('以梦为马,指把自己的梦想作为前进方向和动力。马,在这里是指动力,亦有希望的意思。以马这种强健美好的动物作为希望的载体,承载内心的理念和梦想,为未来的人生提供内在支持。')
para4_format =para4.paragraph_format
para4_format.first_Line_index = Inches(0.25)    #首行缩进

设置段落间距

## 设置段落间距
para4_format_space_before = Pt(100) #设置para4段落前间距
para_format.space_after = Pt(50)    #设置para段落后间距

设置行间距

## 设置行间距
para4_format.line.spacing = Pt(40)  #设置行间距
para4_format.keep_together = True   #整个段落显示在同一页面上
para4_format.keep_with_next = True  #与下一个段落在同一个页面上保留一个段落    应用在标题与段落
para4_format.window_control = True  #中断页面以避免将段落的第一行或最后一行的其余部分放在单独的页面上
document.save('text5_align.docx')