练习操作docx文件

练习操作docx文件:

要求使用代码创建docx文件,并读入学生信息,对学生成绩进行分析,并生成合适的报告书。

import openpyxl
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

stu_doc = Document()

stu_doc.add_paragraph('\n\n\n\n')

pic_par = stu_doc.add_paragraph()
pic_par.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run_pic = pic_par.add_run("")
run_pic.add_picture('files/beida.png', width=Pt(200))

doc_book = stu_doc.add_heading(level=1)
doc_book.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc_book_run = doc_book.add_run('北京大学2022年下学期一年级2班数学期末考试成绩报告书\n')
doc_book_run.font.size = Pt(15)

fir_par1 = stu_doc.add_paragraph('\t\t\t学     院:')
fir_par1.add_run('\t       北   京   大   学\t\t\n').underline = True
fir_par2 = stu_doc.add_paragraph('\t\t\t班     级:')
fir_par2.add_run(' \t马 克 思 主 义 哲 学 学 院\t\n').underline = True
fir_par3 = stu_doc.add_paragraph('\t\t\t科     目:')
fir_par3.add_run('\t\t数学\t\t\t\n').underline = True
fir_par4 = stu_doc.add_paragraph('\t\t\t报 告 人:')
fir_par4.add_run('\t\t张三\t\t\t\n').underline = True

stu_doc.add_page_break()
par1_run = stu_doc.add_paragraph().add_run('    我校期末考试在全体老师的共同努力下,已经圆满地结束。各位教师也已经按照学'
                                           '校的要求对学科教学进行了分析和总结,找差距,找不足,以便在今后的教学中进行修正和改进。教师、学生'
                                           '和家长对期末考试也很看重。教师要了解自己的教学情况;学生想知道自己学得怎样,家长渴望了解孩子的在校'
                                           '学习状况。同时从教学管理角度看,通过考试可以了解半学期的教与学情况,对后半学期'
                                           '的教学有借鉴、参考、指导作用,所以学校对期末考试每个环节均作了认真组织和精心安排。现就期末考试的数学成绩进行总结与反思:')
par1_run.line_spacing = 1.5
par1_run.font.name = '宋体'
par1_run.font.size = Pt(14)

wb = openpyxl.load_workbook('files/stu.xlsx')
stu_sheet = wb['students']
# 获取最大行号和列号
stu_sheet_row = stu_sheet.max_row
stu_sheet_col = stu_sheet.max_column
print(stu_sheet_row, stu_sheet_col)
# 建表
stu_table = stu_doc.add_table(stu_sheet_row, stu_sheet_col, style='Light Grid Accent 6')

up_six = 0  # 及格人数
max_core = 0  # 最高分
max_core_num = 0  # 同最高分人数
sun_core = 0  # 总分
# for循环给stu_table赋值,并一边保存需要计算的数据
for x in range(1, stu_sheet_col + 1):
    for y in range(1, stu_sheet_row + 1):
        stu_value = stu_sheet.cell(y, x).value
        if x == stu_sheet_col and y != 1:
            sun_core += int(stu_value)
            if stu_value > 59:
                up_six += 1
            if stu_value > max_core:
                max_core_num = 1
                max_core = stu_value
            elif stu_value == max_core:
                max_core_num += 1
        stu_table.cell(y - 1, x - 1).text = str(stu_value)
stu_doc.add_paragraph('统计如下:')
stu_doc.add_paragraph('\t总人数:' + str(stu_sheet_row - 1))
stu_doc.add_paragraph('\t最高分:' + str(max_core) + '  共有' + str(max_core_num) + '人')
stu_doc.add_paragraph('\t平均分:' + str(int(sun_core / (stu_sheet_row - 1))))
stu_doc.add_paragraph('\t及格率:' + str(up_six / (stu_sheet_row - 1) * 100) + '%')

stu_doc.save('files/demo1.docx')

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值