首页 > 编程语言 >python-docx操作word文档

python-docx操作word文档

时间:2022-11-14 14:44:23浏览次数:65  
标签:docx Document word python add paragraph import document

python-docx神器操作word文档

1 安装

pip 来安装:

$ pip install python-docx

2 简单使用

from docx import Document

# 创建word文档
document = Document()
# 添加段落
paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')
# 插入段落
prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')

# 保存文件
document.save(r"D:\test.docx")

3 python-docx入门

文档

3.1 添加标题

默认情况下添加的标题是最高一级的,即一级标题,通过参数 level 设定,范围是 1 ~ 9(也有 0 级别,表示的是段落标题)

  • Document
    • add_heading
from docx import Document

# 创建word文档
document = Document()

# 添加一级标题
document.add_heading('我是一级标题')
# 添加二级标题
document.add_heading('我是二级标题', level=2)
# 添加段落标题
document.add_heading('我是段落标题', level=0)
# 保存文件
document.save('./test.docx')

image

3.2 添加段落

如何在word文档中添加段落呢?

  • Document
    • add_paragraph
      • insert_paragraph_before
from docx import Document

# 创建word文档
document = Document()

# 添加段落
document.add_paragraph('添加一处段落')
# 添加段落
p0 = document.add_paragraph('再次添加一处段落')
# 在 p0段落之前 再次添加段落
p0.insert_paragraph_before("在 p0 段落之前 添加段落")
# 保存
document.save('./test1.docx')

image

3.3 添加换页

如果一个段落不满一页,需要分页时,可以插入一个分页符,直接调用会将分页符插入到最后一个段落之后

  • Document
    • add_page_break: 直接添加一页
    • 通过段落添加一页
      • p1 = document.add_paragraph("独占一页")
      • p1.runs[-1].add_break(WD_BREAK.PAGE)
from docx import Document
from docx.enum.text import WD_BREAK

# 创建word文档
document = Document()

# 在当前文档最后添加一页
document.add_page_break()

# 添加段落
p1 = document.add_paragraph("独占一页")
# 插入段落
p1.insert_paragraph_before("insert_paragraph_before")
# 在 p1段落后 添加一页
p1.runs[-1].add_break(WD_BREAK.PAGE)

3.4 表格操作

Word 文档中经常会用到表格,python-docx 如何添加和操作表格呢?

  • Document
    • add_table
      • cell 单元格 参数有两个,实例:cell(0, 1) 获取第1行第2列的单元格
      • rows 获取
        • cells
from docx import Document

# 创建word文档
document = Document()

# 添加一个 2×2 表格
table = document.add_table(rows=2, cols=2)

# 获取第一行第二列单元格
cell = table.cell(0, 1)
# 设置单元格文本
cell.text = '我是第 1 行 第 2 列单元格'

# 表格的行
row = table.rows[1]
row.cells[0].text = '我是第 2 行 第 1 列单元格'
row.cells[1].text = '我是第 2 行 第 2 列单元格'

# 增加行
row = table.add_row()

案例:

# 表格数据
items = (
    (7, '1024', '手机'),
    (3, '2042', '笔记本'),
    (1, '1288', '台式机'),
)

# 添加一个表格
table = document.add_table(rows=1, cols=3)

# 设置表格标题
heading_cells = table.rows[0].cells
heading_cells[0].text = '数量'
heading_cells[1].text = '编码'
heading_cells[2].text = '描述'

# 将数据填入表格
for item in items:
    # 添加行
    cells = table.add_row().cells
    cells[0].text = str(item[0])
    cells[1].text = item[1]
    cells[2].text = item[2]

image

3.5 添加图片

如何插入图片到word文档之中呢?

  • Document
    • add_picture
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Cm

# 创建word文档
document = Document()

# 插入图片 原始尺寸
document.add_picture('./01.jpg')
# 插入图片 Cm 厘米
document.add_picture('./01.jpg', width=Cm(15))

# 保存
document.save('./test1.docx')

docx库除了提供了厘米(Cm)外,还有英寸(Inches)

3.6 样式

段落样式

段落样式包括:对齐、列表样式、行间距、缩进、背景色等,可以在添加段落时设定,也可以在添加之后设置

3.6.1 列表样式

from docx import Document

# 创建word文档
document = Document()

# 添加一个段落,设置为无序列表样式
p1 = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
p2 = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
p1.style = 'List Bullet'
p2.style = 'List Bullet'

# 或者 直接传入样式参数
document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。', style='List Bullet')
document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。', style='List Bullet')


# 保存
document.save('./test2.docx')

image

3.6 2 段落格式

行间距、缩进等

from docx import Document
from docx.shared import Pt

# 创建word文档
document = Document()

# 添加段落
p = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
pf = p.paragraph_format
# 左缩进
# pf.left_indent = Pt(20)
# 右缩进
# pf.right_indent = Pt(20)
# 首行缩进
pf.first_line_indent = Pt(20)
# 行间距
pf.line_spacing = 1

# 保存
document.save('./test2.docx')

3.6.2 文字样式

设置 字体/字号/颜色,加粗/下划线斜体等

# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn

# 创建word文档
document = Document()

# 添加一个段落,设置为无序列表样式
p = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
pf = p.paragraph_format
# 左缩进
# pf.left_indent = Pt(20)
# 右缩进
# pf.right_indent = Pt(20)
# 首行缩进
pf.first_line_indent = Pt(20)
# 行间距
pf.line_spacing = 1

# 在段落中追加
run = p.add_run('中国糖尿病患病原因受生活方式、老龄化、城市化、家族遗传等多种因素影响。')
# 设置字号
run.font.size = Pt(20)
# 设置字体
run.font.name = '微软雅黑'
run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体颜色
run.font.color.rgb = RGBColor(255, 0, 0)

# 在段落中追加
run1 = p.add_run('同时,糖尿病患者趋向年轻化。')
# 设置字号
run1.font.size = Pt(10)
# 设置字体
run1.font.name = '微软雅黑'
run1.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体颜色
run1.font.color.rgb = RGBColor(40, 40, 40)
# 加粗
run1.font.bold = True
# 下划线
run1.font.underline = True
# 斜体
run1.font.italic = True

# 保存
document.save('./test2.docx')

image

3.7 样式应用

如何给word文档设置全局的样式呢, 添加标题、段落等使用全局的样式类型?

3.7.1 添加样式

方式一: 自定义一个样式

# -*- coding: utf-8 -*-
from docx.document import Document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn

# 创建文档
document: Docx = Document()
print(type(document))

# 添加样式
styles = document.styles  # 当前文档的样式
p_style = styles.add_style('p_style', WD_STYLE_TYPE.PARAGRAPH)  # 添加一个样式
# 设置字体
p_font = p_style.font
p_font.name = '微软雅黑'
p_style._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体大小
p_font.size = Pt(18)

# 添加段落  使用定义的样式
document.add_paragraph('这是一个段落', style=p_style.name)

document.save('./test3.docx')

方式二: 修改默认的样式

# -*- coding: utf-8 -*-
import docx.document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn

# 创建文档
document: Docx = Document()

# 添加样式
styles = document.styles
styles['Normal'].font.name = '微软雅黑'
styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
styles['Normal'].font.size = Pt(18)

# 添加段落
document.add_paragraph('这是一个段落')

document.save('./test4.docx')

3.7.2 定义段落格式

from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Inches, Pt

document = Document()

style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)
paragraph_format = style.paragraph_format
paragraph_format.left_indent = Inches(0.25)
paragraph_format.first_line_indent = Inches(-0.25)
paragraph_format.space_before = Pt(12)
paragraph_format.widow_control = True

3.7.3 设置页眉页脚

# -*- coding: utf-8 -*-
from docx.document import Document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn

# 创建文档
document: Docx = Document()

# 添加样式
styles = document.styles
styles['Normal'].font.name = '微软雅黑'
styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
styles['Normal'].font.size = Pt(18)

# 页眉页脚设置
section = document.sections[0]
header = section.header
header.paragraphs[0].text = '设置页眉信息'
header.paragraphs[0].style.font.size = Pt(10)
footer = section.footer
footer.paragraphs[0].text = '设置页脚信息'
footer.paragraphs[0].style.font.size = Pt(10)

# 添加段落
document.add_paragraph('这是一个段落')

document.save('./test4.docx')

3.7.4 段落对齐方式

属性 说明
LEFT 左对齐
CENTER 居中
RIGHT 右对齐
JUSTIFY 自由调整
DISTRIBUTE 占满整个段落的宽度
JUSTIFY_MED 以中等字符压缩比调整
JUSTIFY_HI 具有高字符压缩比
JUSTIFY_LOW 以较低的字符压缩比进行调整
THAI_JUSTIFY 根据泰语格式布局对齐

代码示例

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT  # 或者导入WD_ALIGN_PARAGRAPH

paragraph = document.add_paragraph()
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

标签:docx,Document,word,python,add,paragraph,import,document
From: https://www.cnblogs.com/itelephant/p/16888990.html

相关文章

  • Python -二叉树 创建与遍历算法(很详细)
    树表示由边连接的节点。它是一个非线性的数据结构。它具有以下特性。一个节点被标记为根节点。除根节点之外的每个节点都与一个父节点关联。每个节点可以有一个arbiatry编号......
  • 用C语言为python写C扩展
    calc.c#include<stdio.h>#include<Python.h>intadd(intx,inty){//C函数returnx+y;}staticPyObject*calc_add(PyObject*self,PyObject*args){......
  • python-时间模块-3大常见时间处理模块-datatime(八)
    1.datatime模块datetime是python中处理日期时间的标准库,datetime模块中常用的类包括date,time,datetime,timedelta,使用这些对象支持日期时间的数学运算和更有效的解析......
  • Python 代码托管到码云平台,原来这么简单!!
    一、什么是代码托管?代码托管又有什么好处?场景1:我有2个电脑,公司一台,家里一台。我想在两台电脑上都进行同步开发。这时候我只要gitpush/pull一下就能够同步了,不再需要用U......
  • Python 自动化中三种等待时间的详解
    自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。在自动化测试中,其实就是通过代码......
  • Python量化中用pyecharts画K线示例
    首先需要安装Python软件,以及pyecharts库相关教程链接:龙哥量化:文档目录(股票,期货,通达信、同花顺、文华等软件使用,Python量化交易,策略编写,学习文档,策略案例等等) 1"""......
  • python量化指标计算talib函数功能一览表
    安装talib库:pipinstalltalib 1#取个数据验证一下2set_token('')3data=history(symbol='SHSE.600519',frequency='1d',start_time='2015-01-01',......
  • 90 条简单实用的 Python 编程技巧,建议收藏
    编码原则建议1:理解Pythonic概念—-详见Python中的《Python之禅》建议2:编写Pythonic代码避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕......
  • python迭代器和生成器
    1.迭代器1.迭代是访问集合的一种方式,可以记住遍历的位置的对象,int类型和容器类对象不可进行迭代1.int类型不可进行迭代例:num=iter(12345)print(nex......
  • 巨蟒python全栈开发django9:一些知识点的汇总
    回顾上周内容:题目:1.人民出版社出版过的所有书籍的名字以及作者的姓名(三种写法,笔记中有两种写法)2.手机以2开头的作者出版过的所有书籍名称以及出版社名称(三种写法,笔记......