python docx库的简单使用

  • Post author:
  • Post category:python


docx库的下载指令:

pip install python-docx



1、文档


创建文档

from docx import Document
document = Document()


保存文档

document.save('test.docx')


打开现有文档

document = Document('filename.docx')  # 打开
document.save('new-filename.docx')  #保存文档

如果使用相同的文件名来打开和保存文件,将默认覆盖原文件


打开file-like文档

f = open('a.docx', 'rb')
document = Document(f)
f.close()

or

with open('a.docx', 'rb') as f:
	source_stream = StringIO(f.read())
document = Document(source_stream)
source_stream.close()

target_stream = StringIO()
document.save(target_stream)



2、段落


添加段落

paragraph = document.add_paragraph("This is the first paragraph")

作用:在文档末尾添加一个新的段落,并返回该段落的引用。

prior_paragraph = paragraph.insert_paragraph_before("such a good boy")

作用:以某个段落为基准,在这个段落前添加一个新的段落。


添加段落风格

paragraph.style = "List Bullet"

这种风格使得段落看起来像子弹头。


在段落中添加内容

run = paragraph.add_run("it is wonderful")
run = paragraph.add_run("it is wonderful", "Emphasis")  # 创建时指定风格

这还将返回一个对字符串”it is wonderful”的引用,我们可以对这个字符串进行格式的设置。

run.bold = True  # 设置为粗体
run.italic = True  # 设置为斜体
run.style = "Emphasis" # 创建后设置风格


设置段落格式

段落的对齐方式

from docx.enum.text import WD_ALIGN_PARAGRAPH

paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER  # 设置为居中对齐

段落的缩进

paragraph.paragraph_format.left_indent = Inches(0.5)  # 向左缩进
paragraph.paragraph_format.right_indent = Inches(0.5)  # 向右缩进
paragraph.paragraph_format.first_line_indent = Inches(0.5)  #第一行缩进


段落间隔

from docx.shared import Pt

paragraph.paragraph_format.space_before = Pt(18)
paragraph.paragraph_format.space_after = Pt(12)


行间距

paragraph.paragraph_format.line_spacing = Pt(18)

分页属性:

keep_together:使整个段落出现在同一页上,如果该段落可能被分割成两页,则在该段之前加入分页符。

keep_with_next:保持与下一段保持一个段落在相同的页面。

page_break_before:使用分页符将段落放置在新页的顶部。

widow_control:避免将该段的第一行或最后一行放在与该段其余部分分开的页面上。

paragraph.paragraph_format.keep_together = True
paragraph.paragraph_format.keep_with_next = False



3、标题


添加标题

document.add_heading('My first doc created by python')

作用:添加一个顶级标题。

标题共有9级,可通过level属性来指定级数,如:

document.add_heading('My first doc created by python', level=3)

会创建一个3级标题。

若指定级别为0,则将创建一个段落



4、分页符

document.add_page_break()

作用:无论所在页面是否已满,都将转到一个新的页面上



5、表格


添加表格

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

作用:创建一个2行,2列的表格(可视作一个二维数组)


获取引用

cell = table.cell(0,1)  # 获取第一行第二列的元素的引用
row = table.rows[1]  # 获取第二行的引用
cell = row.cells[1] #  获取第二行(即上一行代码所获得的行)的第二个元素


方法

cell.text = 'hello, good morning'  # 修改单元格的文本
row_count = len(table.rows)  # 统计表格行数
row = table.add_row()  # 添加新的一行
table.style = 'LightShading-Acccent1'  # 表格样式



6、图片


添加图片

document.add_picture('snow.jpg')

添加了一张文件名为”snow.jpg”的图片


控制图片大小

form docx.shared import Inches

document.add_picture('snow.jpg', width=Inches(1))



7、字体设置

from docx.shared import Pt
from docx.shared import RGBColor
from docx.enum.dml import MSO_THEME_COLOR


run = document.add_paragraph().add_run()
font = run.font
font.name = 'Calibri'  #字体种类
font.size = Pt(12)   #字体大小
font.bold = True  # 粗体
font.italic = False  # 斜体
font.underline = True  # 下划线
font.color.rgb = RGBColor(0x42, 0x24, 0xE9)  # 字体颜色
font.clor.theme_color = MSO_THEME_COLOR.ACCENT_1  # 设置配色
font.color.rgb = None  # 默认颜色



8、section属性


section的使用

sections = document.sections
section = sections[0]


section的属性

  • start_type:这个部分之前的断开类型

  • orientation:页面方向

  • page_width:页面宽度

  • page_height:页面高度

  • left_margin:左边距

  • right_margin:右边距

  • top_margin:上边距

  • bottom_margin:下边距

  • gutter

  • header_distance

  • footer_distance

section.start_type = WD_SECTION.ODD_PAGE
section.orientation = WD_ORIENT.LANDSCAPE
section.page_width = new_width
section.page_height = new_height
section.left_margin = Inches(1.5)
section.right_margin = Inches(1)



9、页眉和页脚

获取

section = document.sections[0]
header = section.header

使用

paragraph = header.paragraphs[0]
paragraph.text = "Title of my document"  # 在页眉添加内容
paragraph.text = "Left Text\tCenter Text\tRight Text"  #制表符用于分隔左、中和右对齐的标题内容
paragraph.style = document.styles['header']

删除

header.is_linked_to_previous = True



版权声明:本文为qq_45359344原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。