Day10-Python操作word文件作业

该代码使用Python的openpyxl和docx库从Excel文件中读取学生信息,创建并填充一个Word文档,包括封面、标题和学生成绩表格。对学生成绩进行分析,计算平均分、及格率和最高分,并将结果写入Word文档。
摘要由CSDN通过智能技术生成

Day10-Python操作word文件作业

import openpyxl
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
from docx.enum.style import WD_STYLE_TYPE, WD_BUILTIN_STYLE
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT
# 获取学生信息.xlsx工作簿
wb = openpyxl.open('files/学生信息.xlsx')
sheet = wb['students']
m_r = sheet.max_row     # 总行数
m_c = sheet.max_column  # 总列数
# 1. 创建空白的word文档
doc = Document()

# 封面页
p7 = doc.add_paragraph()
run7 = p7.add_run()
run7.add_picture('files/aoli.jpg', width=Cm(15), height=Cm(13))
p7.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

h1 = doc.add_heading(level=1)
h1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run81 = h1.add_run('旺旺大学')
run81.font.bold = True
run81.font.size = Pt(50)
run81.font.color.rgb = RGBColor(105, 105, 105)

h2 = doc.add_heading(level=2)
h2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run91 = h2.add_run('2023年上学年成绩分析报告')
run91.font.bold = True
run91.font.size = Pt(30)
run91.font.color.rgb = RGBColor(0, 0, 0)
# 数据页面
doc.add_page_break()

# 打印学生信息表
table = doc.add_table(m_r, m_c, style='Medium Shading 1')
table.style.font.size = Pt(10)
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
rows = table.rows

for row in rows:
    row_index = row._index      # 行下标
    col = 1
    if row._index == 0:     # 第一行的处理
        row.height = Pt(35)
        for cell in row.cells:
            cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
            val = str(sheet.cell(row_index + 1, col).value)
            p = cell.paragraphs[0]
            run1 = p.add_run(val)
            run1.font.size = Pt(20)
            run1.font.name = '黑体'
            r = run1._element.rPr.rFonts
            r.set(qn('w:eastAsia'), '黑体')
            col += 1
    else:
        row.height = Pt(20)
        for cell in row.cells:
            cell.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER
            val = str(sheet.cell(row_index + 1, col).value)
            p = cell.paragraphs[0]
            run2 = p.add_run(val)
            run2.font.size = Pt(10)
            run2.font.name = '宋体'
            r = run2._element.rPr.rFonts
            r.set(qn('w:eastAsia'), '宋体')
            col += 1

# 分析学生成绩
scores = []     # 成绩列表
for n in range(2, m_r + 1):
    cell2 = sheet.cell(n, 4)
    val = int(cell2.value)
    scores.append(val)
# 求平均分、及格率
tatol_score = 0         # 总成绩
ok_num= 0               # 及格人数
for score in scores:
    tatol_score += score
    if score >= 60:
        ok_num += 1
average_score = tatol_score / (m_r - 1)     # 平均分
ok_rate = ok_num / (m_r - 1)                # 及格率
# 求最高分
max_score = scores[0]           # 最高分
max_num = 1                     # 最高分人数
nums = m_r - 1          # 总人数
for n in range(1, nums):
    score = scores[n]
    if score == max_score:
        max_num += 1
    if score > max_score:
        max_score = score
        max_num = 1

p1 = doc.add_paragraph()
run11 = p1.add_run('总人数: ')
run12 = p1.add_run(str(nums))
run13 = p1.add_run(' 人')
p1.paragraph_format.space_before = Pt(20)
p1.style.font.size = Pt(15)
run12.font.bold = True

p2 = doc.add_paragraph()
run21 = p2.add_run('最高分: ')
run22 = p2.add_run(str(max_score))
run23 = p2.add_run(' 分,共 ')
run24 = p2.add_run(str(max_num))
run25 = p2.add_run(' 人')
p2.paragraph_format.space_before = Pt(10)
run22.font.bold = True
run24.font.bold = True

p3 = doc.add_paragraph()
run31 = p3.add_run('平均分: ')
run32 = p3.add_run(str(average_score))
run33 = p3.add_run(' 分')
p3.paragraph_format.space_before = Pt(10)
run32.font.bold = True

p4 = doc.add_paragraph()
run41 = p4.add_run('及格率: ')
run42 = p4.add_run(str(ok_rate))
p4.paragraph_format.space_before = Pt(10)
run42.font.bold = True

p5 = doc.add_paragraph('旺旺大学教务部')
p5.paragraph_format.first_line_indent = Pt(320)
p5.paragraph_format.space_before = Pt(40)

p6 = doc.add_paragraph('2023年2月17日')
p6.paragraph_format.first_line_indent = Pt(300)
p6.paragraph_format.space_before = Pt(8)

# 保存
doc.save('files/学生成绩报告.docx')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值