Python办公自动化Day3-python-docx

2023-12-28 16:48:30


文章声明???

  1. 该文章为我(有编程语言基础,非编程小白)的 Python办公自动化自学笔记
  2. 知识来源为 B站UP主(冰冷的希望123)的Python办公自动化课程视频,归纳为自己的语言与理解记录于此并加以实践
  3. 关于办公自动化,知识基础、概念我都不会记录于此,更多的是记录实践,即以具体实操代码的形式展现给大家
  4. 不出意外的话,我大抵会 持续更新
  5. 想要了解前端开发(技术栈大致有:Vue2/3、微信小程序、uniapp、HarmonyOS、NodeJS、Typescript)与Python的小伙伴,可以关注我!谢谢大家!

让我们开始今天的学习吧!

新建打开保存

新建与保存

# 导入库,pip install python-docx
from docx import Document

# 创建word
my_word = Document()

# 保存word
my_word.save('MyWord.docx')

打开

# 导入库,pip install python-docx
from docx import Document

# 打开word
my_word = Document('MyWord.docx')


操作段落

添加段落/查询段落数

# 导入库
from docx import Document

# 创建word
word = Document()
# 输出段落数
print(len(word.paragraphs))  # 输出0
# 添加段落
p1 = word.add_paragraph('Richie')
# 输出段落数
print(len(word.paragraphs))  # 输出1
# 输出段落内容
print(p1.text)  # 输出Richie
# 修改段落内容
p1.text = 'Taylor Swift'
# 输出段落内容
print(p1.text)  # 输出Taylor

# 保存word
word.save('MyWord.docx')

word中内容如下:
在这里插入图片描述

删除段落内容但未删除段落

# 导入库
from docx import Document

# 打开word
word = Document('MyWord.docx')
# 添加段落
p = word.add_paragraph('Richie')
print(p.text)  # 输出Richie
# 删除段落内容 1.赋值空字符串
p.text = ''
print(p.text)  # 输出空字符串

p.text = 'Richie'
print(p.text)  # 输出Richie
# 删除段落内容 2.clear()方法
p.clear()
print(p.text)  # 输出空字符串

插入段落

# 导入库
from docx import Document

# 创建word
word = Document()
# 添加段落
p1 = word.add_paragraph('这是段落一')
p2 = word.add_paragraph('这是段落二')
p3 = word.add_paragraph('这是段落三')
print(len(word.paragraphs))  # 输出3
# 插入段落
p2.insert_paragraph_before('这是插入进来的段落,在段落二之前')
print(len(word.paragraphs))  # 输出4

# 保存word
word.save('MyWord.docx')

word内容如下:
在这里插入图片描述

插入分页符

# 导入库
from docx import Document

# 创建word
word = Document()
# 添加段落
p1 = word.add_paragraph('这是段落一')
# 插入分页符,分页符也算一个段落
word.add_page_break()
p2 = word.add_paragraph('这是段落二')
p3 = word.add_paragraph('这是段落三')
print(len(word.paragraphs))  # 输出4
# 插入段落
p2.insert_paragraph_before('这是插入进来的段落,在段落二之前')
print(len(word.paragraphs))  # 输出5
# 保存word
word.save('MyWord.docx')

word内容如下:
在这里插入图片描述


段落样式

对齐方式

# 导入库
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

# 创建word
word = Document()

# 添加段落
p1 = word.add_paragraph('左对齐')
p2 = word.add_paragraph('居中对齐')
p3 = word.add_paragraph('右对齐')
p4 = word.add_paragraph('两端对齐')
p5 = word.add_paragraph('分散对齐')
# 设置对齐方式
p1.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
p2.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p3.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
p4.alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY
p5.alignment = WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE


# 保存word
word.save('MyWord.docx')

效果如下:
在这里插入图片描述
因为是枚举,所以从源码中可知,可以简化写法:
在这里插入图片描述

自带样式

查看有哪些自带样式:

# 导入库
from docx import Document
from docx.enum.style import WD_STYLE_TYPE

# 创建word
word = Document()

# 查看段落自带样式有哪些
styles = word.styles
paragraph_styles = [style for style in styles if style.type == WD_STYLE_TYPE.PARAGRAPH]
for style in paragraph_styles:
    print(style.name)

-------------------------------------
Normal # 正文
Header
Footer
Heading 1 # 标题一
Heading 2 # 标题二
Heading 3
Heading 4
Heading 5
Heading 6
Heading 7
Heading 8
......还有很多不予展示了

使用这些样式:

# 导入库
from docx import Document

# 创建word
word = Document()

# 添加段落
p1 = word.add_paragraph('段落一', style='Normal')
p2 = word.add_paragraph('段落二', style='Header')
p3 = word.add_paragraph('段落三', style='Heading 1')
p4 = word.add_paragraph('段落四', style='Heading 2')
p5 = word.add_paragraph('段落五', style='Heading 3')

# 保存word
word.save('MyWord.docx')

效果如下:
在这里插入图片描述

缩进与间距

# 导入库
from docx import Document
from docx.shared import Pt

# 创建word
word = Document()

# 添加段落
p1 = word.add_paragraph('床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。', style='Normal')
# 行间距
p1.paragraph_format.line_spacing = Pt(20)
# 首行缩进
p1.paragraph_format.first_line_indent = Pt(10)

# 用来对比的段落
p2 = word.add_paragraph('床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。床前明月光,疑是地上霜。举头望明月,低头思故乡。', style='Normal')


# 保存word
word.save('MyWord.docx')


效果如下:
在这里插入图片描述


Run

介绍/读取Run

首先看一下此时word里的内容:
在这里插入图片描述
此时word里的这一段内容,被python-docx自动分为5个Run对象(因为它们样式不同):“大家”、“好,”、“我”、“是”、“Richie”

代码如下:

# 导入库
from docx import Document

# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 循环所有run对象
for run in p.runs:
    print(run.text)

-------------------------------------
大家
好,
我
是
Richie

添加/修改/删除Run

添加Run,代码如下:

# 导入库
from docx import Document

# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 循环所有Run
for run in p.runs:
    print(run.text)
# 添加Run,add_run()方法返回一个Run对象
p.add_run('!!!')
# 再次循环所有Run
print(' ')
for run in p.runs:
    print(run.text)

-------------------------------------
大家
好,
我
是
Richie

大家
好,
我
是
Richie
!!!

修改Run,代码如下:

# 导入库
from docx import Document

# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 修改Run
print(p.runs[-1].text)
p.runs[-1].text = 'Taylor'
print(p.runs[-1].text)

-------------------------------------
Richie
Taylor

原数据如下:
在这里插入图片描述
删除Run,代码如下:

# 导入库
from docx import Document

# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 使用clear()方法,删除最后一个Run
p.runs[-1].clear()
# 当然也可以这样
# p.runs[-1].text = ''

# 保存word
word.save('MyWord.docx')

删除后如下:
在这里插入图片描述

Run样式

# 导入库
from docx import Document
from docx.enum.text import WD_COLOR_INDEX
from docx.opc.oxml import qn
from docx.shared import Pt, RGBColor

# 创建word
word = Document('./MyWord.docx')
# 获取第一个段落的内容
p = word.paragraphs[0]
# 获取第一个Run对象
run = p.runs[0]
# Run样式
run.bold = True  # 加粗
run.italic = True  # 斜体
run.underline = True  # 下划线
run.font.name = 'Times New Roman'  # 设置西文
run.element.rPr.rFonts.set(qn('r:eastAsia'), '宋体')  # 设置中文字体
run.font.size = Pt(30)  # 字体大小
run.font.color.rgb = RGBColor(0, 0, 255)  # 字体颜色
run.font.highlight_color = WD_COLOR_INDEX.YELLOW  # 文本高亮颜色
run.font.shadow = True  # 阴影
run.font.strike = True  # 删除线

# 保存word
word.save('MyWord.docx')


小案例

为四位同学分别生成几个段落来模拟表彰,效果如下:
在这里插入图片描述
代码如下:

# 导入库
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt

# 创建word
word = Document()
# 学生表
student_list = [
    {
        '专业': '工业工程',
        '班级': '201',
        '姓名': '吕全'
    }, {
        '专业': '服装与设计',
        '班级': '204',
        '姓名': 'Taylor'
    }, {
        '专业': '计算机',
        '班级': '202',
        '姓名': '刘志豪'
    }, {
        '专业': '化学',
        '班级': '203',
        '姓名': '陈泽'
    }
]

# 开始制作案例
# 循环学生列表,为每个学生制作一个段落
for student in student_list:
    # 创建一个段落
    p = word.add_paragraph()
    # 首行缩进
    p.paragraph_format.first_line_indent = Pt(10)
    # 创建Run
    run1 = p.add_run('兹证明,')
    run2 = p.add_run(f"    {student['专业']}    ")
    run3 = p.add_run('专业')
    run4 = p.add_run(f"    {student['班级']}    ")
    run5 = p.add_run('班')
    run6 = p.add_run(f"    {student['姓名']}    ")
    run7 = p.add_run('同学')
    run8 = p.add_run('近期学习表现良好,特此奖励10000元,望继续坚持,好好努力!')
    # 创建新段落
    p1 = word.add_paragraph('中原工学院')
    p2 = word.add_paragraph('2023年12月28日')
    # 靠右对齐
    p1.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
    p2.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
    # 需要单独添加样式,且需要添加的样式一致的Run数组
    need_handle = [run2, run4, run6]
    # 循环该数组添加样式
    for run in need_handle:
        # 添加下划线
        run.underline = True
    # 循环所有run,设置通用样式
    for run in p.runs:
        # 设置字体大小
        run.font.size = Pt(15)
# 保存word
word.save('MyWord.docx')


文章来源:https://blog.csdn.net/Richieeea/article/details/135223979
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。