利用python制作word成绩报告

利用python制作word成绩报告

1.导入

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.table import WD_CELL_VERTICAL_ALIGNMENT

2.封面

# 1 创建空白文档
doc = Document()
# 2 封面内容
p = doc.add_paragraph()
h1 = doc.add_heading(level=1)
run1 = h1.add_run("樱兰大学计算机学院", style="Title Char")
h2 = doc.add_heading(level=2)
run2 = h2.add_run("期末成绩分析报告")
doc.add_picture("files/校门图片.png", width=Cm(15), height=Cm(13))
# 1)封面样式
# 文本居中
p.paragraph_format.alignment = 
h1.paragraph_format.alignment = 
h2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 字体样式
run1.font.size = Pt(25)
run2.font.size = Pt(45) #字体大小
run2.font.bold = True #加粗
run1.font.color.rgb = run2.font.color.rgb = RGBColor(0, 0, 0)
#封面落款
p3 = doc.add_paragraph('樱兰大学计算机学院制')
p3.style.font.size = Pt(20)
p3.style.font.bold = True
p3.paragraph_format.first_line_indent = Pt(250)
p3.paragraph_format.space_before = Pt(40)

3.导入已有的excel表

注意:学生信息表是xlsx的,所以我们需要用openpyxl来操作表。

# 3 excel表
wb = openpyxl.open("files/学生信息.xlsx")  # 读取
sheet = wb["students"]  # 获取工作表
doc.add_page_break()  # 添加换页
# 1)在word中添加表格
m_r = sheet.max_row
m_c = sheet.max_column
table = doc.add_table(m_r, m_c, style="Table Grid")
table.style.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 2)遍历工作表内容导入word表格中
rows = table.rows  # 获取所有的行
cols = table.columns  # 获取所有的列
for row in rows:
    # 获取行下标
    r_index = row._index
    col_count = 1
    if row._index == 0:
        row.height = Pt(30) #表格高度
    for value in row.cells:
        value.vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER #居中
        p = value.paragraphs[0]
        cell_value = str(sheet.cell(r_index + 1, col_count).value)  # 获取每个单元格的值
        run3 = p.add_run(cell_value)  # 通过获取单元格的段落对象添加run来赋值
        run3.font.name = "宋体"
        r = run3._element.rPr.rFonts
        r.set(qn('w:eastAsia'), '宋体')
        run3.font.size = Pt(20)
        col_count += 1
    else:
        row.height = Pt(30)

4.求及格率

sum_scores = 0 #总分
pass_scores = 0 #及格
scores = []
for x in range(2, m_r + 1):
    value2 = sheet.cell(x, 4)
    value3 = value2.value
    scores.append(value3)
for num in scores:
    sum_scores += num
    if num >= 60:
        pass_scores += 1
rate = pass_scores / (m_r - 1)

5.平均分

average_scores = sum_scores / (m_r - 1)

6.及格率和平均分的样式

p1 = doc.add_paragraph()
run4 = p1.add_run("及格率: ")
run41 = p1.add_run(str(rate))
run4.font.bold = True
run41.font.color.rgb = RGBColor(255, 0, 0)
p2 = doc.add_paragraph()
run5 = p2.add_run("平均分: ")
run5 = p2.add_run(str(average_scores))
run5.font.bold = True
p1.paragraph_format.space_before = p2.paragraph_format.space_before = Pt(10)

7.落款

p4 = doc.add_paragraph('计算机学院')
p4.style.font.size = Pt(20)
p4.style.font.bold = True
p4.paragraph_format.first_line_indent = Pt(280)
p4.paragraph_format.space_before = Pt(8)

p5 = doc.add_paragraph('2023年2月17日')
p5.style.font.size = Pt(15)
p4.style.font.bold = True
p5.paragraph_format.first_line_indent = Pt(280)
p5.paragraph_format.space_before = Pt(8)

8.保存

# 保存
doc.save("files/作业.docx")
print("保存成功")

9.效果展示

请添加图片描述
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值