day10-Python操作word文件

本文介绍了如何使用Python的`docx`库创建和编辑Word文档,包括添加标题、段落、图片、表格以及设置各种样式,如字体大小、颜色、对齐方式等。还涵盖了主题样式和表格的使用,以及如何设计期末报告的Word文档。
摘要由CSDN通过智能技术生成

day 10-Pyhton操作word文件

一、word文档基本内容

安装第三方库: python-docx

from docx import Document

1.创建空白的word文档

doc = Document()

2.添加标题

文档对象.add_heading(标题内容, level=级别, style=None)

注意:级别范围:1 ~ 9, 0 - 表示正文

doc.add_heading('一级标题', level=1)
doc.add_heading('二级标题', level=2)
doc.add_heading('三级标题', level=3)
doc.add_heading('四级标题', level=4)
doc.add_heading('五级标题', level=5)

3.添加正文段落

文档对象.add_paragraph(正文内容, style=None)

doc.add_paragraph('你好,世界')
doc.add_paragraph('2023年经济工作部署。')

4.添加换页

文档对象.add_page_break()

doc.add_page_break()

5.添加表格

1)文档对象.add_table(行数, 列数) - 添加表格

2)表格对象.cell(行下标, 列下标) - 获取表格中指定的单元格

3)单元格对象.text = 数据 - 修改单元格内容

table = doc.add_table(3, 4)
cell1 = table.cell(0, 0)
cell1.text = '姓名'

6.添加图片

# 文档对象.add_picture(图片地址, width=None, height=None)
doc.add_picture('files/cat.png')

# 保存
doc.save('files/demo1.docx')

二、文档中的内容样式

导入需要的库
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

样式设置优先级问题:document < paragraph < heading < run

doc = Document()
h1 = doc.add_heading('高启强为什么解领带擦玻璃', level=1)

1.标题常用的样式

# 1)让标题内容在文档中居中显示
h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 2)设置标题的字体大小
h1.style.font.size = Pt(25)
# 3)设置标题的文字颜色
h1.style.font.color.rgb = RGBColor(95, 158, 160)
# 注意:标题设置字体名称无效

2.段落常用的样式

设置在某一个段落上的样式会同时作用在所有的段落。
p1 = doc.add_paragraph('二刷狂飙的时候,高启强为什么解领带擦玻璃?其中有一段无声的镜头,什么也没说,又什么都说了。高无声靠近,又手握拳头,赵立冬有个下意识躲的动作,这段谁懂为什么呢?')
# 1)设置字体名称
p1.style.font.name = '宋体'
# 注意:如果使用的字体是中文字体,必须加下面的代码
r = p1.style._element.rPr.rFonts
r.set(qn('w:eastAsia'), '宋体')
# 2)设置字体大小
p1.style.font.size = Pt(15)
# 3)设置字体颜色
p1.style.font.color.rgb = RGBColor(255, 0, 0)
# 4)设置字体加粗
p1.style.font.bold = True
# 5)字体倾斜
p1.style.font.italic = True
# 6)添加下划线
p1.style.font.underline = True
# 7)添加删除线
p1.style.font.strike = True
# 8)添加阴影效果()
p1.style.font.shadow = True

3.run的用法

给word文档提供文字内容的时候有两种方式:

  1. 直接提供文字内容: doc.add_paragraph(文字内容)、doc.add_heading(文字内容)
  2. 通过run对象提供文字内容
h2 = doc.add_heading(level=2)
run1 = h2.add_run('大家都在搜')
run2 = h2.add_run('"高启强"')

p2 = doc.add_paragraph()
run3 = p2.add_run('解领带缠手可以砸碎玻璃打他,也可以像他一样')
run4 = p2.add_run('擦玻璃')
run5 = p2.add_run('。赵立冬也领会到了高启强的意思,开始以为要打他,有了挪动位置的动 作,后面看到在擦玻璃,露出了笑容,高启强玩得一手心理战')

run4.font.bold = True  #加粗
run3.font.color.rgb = RGBColor(0, 255, 0)  #设置颜色

4.段落间距相关样式

注意:段落间距相关样式,只会作用在当前段落上

p4 = doc.add_paragraph('解领带缠手可以砸碎玻璃打他,也可以像他一样擦玻璃。赵立冬也领会到了高启强的意思,开始以为要打他,有了挪动位置的动 作,后面看到在擦玻璃,露出了笑容,高启强玩得一手心理战')
# 1.行间距(段落内)
p4.paragraph_format.line_spacing = 1.5
# 2.段前距离
p4.paragraph_format.space_before = Pt(30)
# 3.段后距离
p4.paragraph_format.space_after = Pt(40)
# 4.行首缩进
p4.paragraph_format.first_line_indent = Pt(50)

doc.save('files/demo2.docx')

三、设置主题样式

导入需要的库
from docx import Document
from docx.enum.style import WD_STYLE_TYPE, WD_BUILTIN_STYLE
from docx.shared import Pt, Cm, RGBColor

doc = Document()
# 所有的主题样式
styles = doc.styles

主题样式有三种:基于run添加的样式、基于paragraph、基于table

1. 基于run的主题样式的使用

# 1)用法
h1 = doc.add_heading(level=1)
run1 = h1.add_run('hello world!', style='Subtle Reference')
run1.font.size = Pt(40)

p1 = doc.add_paragraph()
p1.add_run('hello world!', style='Subtle Emphasis')

doc.add_heading('1. 基于run添加的所有的主题名称对应的样式:')
# 2)将和run相关的所有的主题样式显示出来
for x in styles:
    if x.type == WD_STYLE_TYPE.CHARACTER:
        p = doc.add_paragraph()
        p.add_run('character(run) style is: ' + x.name, style=x.name)

2.基于paragraph的主题样式的用法

p2 = doc.add_paragraph('弟弟的死是自己心中永远的痛', style='Title')
doc.add_heading('2. 基于paragraph添加的所有的主题名称对应的样式:')
for x in styles:
    if x.type == WD_STYLE_TYPE.PARAGRAPH:
        doc.add_paragraph('paragraph style is: ' + x.name, style=x.name)

3.基于table的主题的用法

doc.add_table(4, 3, style='Medium Grid 3 Accent 4')

doc.add_heading('2. 基于table添加的所有的主题名称对应的样式:')
for x in styles:
    if x.type == WD_STYLE_TYPE.TABLE:
        p = doc.add_paragraph('表格主题名称: ' + x.name)
        p.paragraph_format.space_before = Pt(50)
        doc.add_table(2, 3, style=x.name)
#保存文件
doc.save('files/demo3.docx')

四、表格的使用

1. 添加表格

table = doc.add_table(3, 4, style='Table Grid')

2.添加行和列

table.add_row()    # 在最下面添加一行
table.add_column(Pt(100))    # 在最右边添加一列

3.设置单元格内容

# 1)直接给单元格内容赋值
cell1 = table.cell(0, 0)
cell1.text = '名字'
cell1.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER

# 2)通过获取单元格的段落对象添加run来赋值
cell2 = table.cell(0, 1)
p = cell2.paragraphs[0]
run1 = p.add_run('价格')
run2 = p.add_run('(元)')

4.设置表格样式

# 1)直接设置表格样式,会作用于整个表格
table.style.font.size = Pt(14)
table.style.font.color.rgb = RGBColor(100, 89, 10)
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 2)基于单元格设置样式,必须基于单元格内容对应的run对象来设置
run1.font.color.rgb = RGBColor(255, 0, 0)

5.行高和列宽

# 设置每一行的高度
rows = table.rows    # 获取所有的行
cols = table.columns  # 获取所有的列

for row in rows:
    # 获取所有的单元格
    print(row.cells)
    row.cells[1].text = '200'
    # 获取行下标
    print(row._index)
    if row._index == 0:
        # 设置行高:行对象.height = 高度
        row.height = Pt(40)
        for cell in row.cells:
            cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
    else:
        row.height = Pt(25)
 
 for col in cols:
    # 获取一列中所有的单元格
    print(col.cells)
    col.cells[0].text = 'hello'
    # 获取列下标
    print(col._index)
# 保存文件
doc.save('files/demo4.docx')

五、作业

用python设计期末报告word文档:

要求:

​ 1)添加封面

​ 2)添加学生信息表格

​ 3)设计文档

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt, RGBColor, Cm
from docx.oxml.ns import qn
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
import openpyxl
#-------------------------封面-----------------------
doc = Document()
table = doc.add_table(1, 2, style='Normal Table')

cell1 = table.cell(0, 0)
ph = cell1.paragraphs[0]

run = ph.add_run('')
run.add_break()
pc = run.add_picture('files/校徽.png', width=Pt(100), height=Pt(100))
cell2 = table.cell(0, 1)
p = cell2.paragraphs[0]

run1 = p.add_run('度假村中学', style='Intense Quote Char')
run1.font.size = Pt(52)
cell1.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
cell1.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
cell2.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.BOTTOM
cell1.width = Pt(130)
cell2.width = Pt(300)

h0 = doc.add_paragraph('Resort Middle School', style='Subtitle')
doc.add_paragraph()
h1 = doc.add_heading('期末总结报告', level=2)
h0.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
h0.style.font.size = Pt(25)
h1.style.font.size = Pt(30)

for x in range(6):
    doc.add_paragraph()

p1 = doc.add_paragraph('学年:2022-2023学年')
p2 = doc.add_paragraph('班级:01基础班')
p3 = doc.add_paragraph('班主任:春花老师')

p1.style.font.name = '宋体'
r = p1.style._element.rPr.rFonts
r.set(qn('w:eastAsia'), '黑体')

p1.style.font.size = Pt(13)

p1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p3.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
for x in range(3):
    doc.add_paragraph()
p4 = doc.add_paragraph('日期:2023年01月26日')
p4.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT

#-------------------------报告正文---------------------------------
h1 = doc.add_heading('度假村中学期末报告', level=1)
h1.style.font.size = Pt(20)
h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
ph1 = doc.add_paragraph('我校期末考试在全体老师的共同努力下,已经圆满地结束。各位教师也已经按照学校的要求对学科教学进行了分析和总结,找差距,找不足,以便在今后的教学中进行修正和改进。教师、学生和家长对期末考试也很看重。教师要了解自己的教学情况;学生想知道自己学得怎样,家长渴望了解孩子的在校学习状况。同时从教学管理角度看,通过考试可以了解半学期的教与学情况,对后半学期的教学有借鉴、参考、指导作用,所以学校对期中考试每个环节均作了认真组织和精心安排。现就期中考试的前后工作进行总结与反思:')
ph1.style.font.name = '宋体'
r = ph1.style._element.rPr.rFonts
r.set(qn('w:eastAsia'), '宋体')
ph1.paragraph_format.first_line_indent = Pt(25)

h2 = doc.add_heading('一、学生期末基本成绩状况',level=2)
h2.style.font.size = Pt(15)
table = doc.add_table(49, 4, style = 'Medium List 2 Accent 5')
wb = openpyxl.load_workbook('files/学生信息.xlsx')
name = wb.sheetnames
print(name)
sheet1 = wb['students']
m_c = sheet1.max_column
m_r = sheet1.max_row

count = 1
sum = 0
count1 = 1
max_score = sheet1.cell(2, m_c).value
for r in range(1, m_r):
    score = sheet1.cell(r+1, m_c).value
    sum += score
    count += 1
    if score > max_score:
        max_score = score
    if score >= 60:
        count1 += 1
score1 =max_score
stu_sum = count
a_score = round(sum/count, 2)
p_score = round(count1/count * 100, 2)

for col in range(1, m_c+1):
    for row in range(1, m_r+1):
        cell = sheet1.cell(row, col).value
        cell1 = table.cell(row-1, col-1)
        cell1.text = str(cell)
doc.add_paragraph()
ph2 = doc.add_paragraph('最高分:'+str(score1))
ph3 = doc.add_paragraph('总人数:'+str(stu_sum))
ph4 = doc.add_paragraph('平均分:'+str(a_score))
ph5 = doc.add_paragraph('及格率:'+str(p_score))
h3 = doc.add_heading('二、反思建议',level=2)
ph6 = doc.add_paragraph('有许多教师、同学在期末考试后,往往只是关注于考试成绩而忽略了更为重要的考后反思工作我以为:无论考试成绩优或劣,考试后都要认真地进行总结,因为只有这样,师生才能找到考好或是考得不好的原因。找到了问题的根结,在今后的教、学中就会更有利于自己发挥优点,改正缺点,从而在之后的考试中发挥出优异水平,所以说考后自我反省的意义一点都不亚于考试本身。')
ph6.paragraph_format.first_line_indent = Pt(25)
h4 = doc.add_heading('三、结语', level=2)
ph7 = doc.add_paragraph('期末考毕竟只是一次阶段性的诊断测试,不能将其结果“夸大化”和“绝对化”,家长和老师应该帮助学生剖析期末考试成败的原因。')
ph7.paragraph_format.first_line_indent = Pt(25)
ph8 = doc.add_paragraph('最后,祝大家假期愉快!')

doc.save('files/期末报告.docx')

设计好的word文档:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值