用中文python进行Excel自动化进行成绩统计
中文代码简单易懂,主页有同名视频进行详细讲解
原文件:包括全年级的各科成绩表,和一个成绩统计的框架
python操作后的新文件:从全年级分出的各班的成绩表,平均分表、及格率表、优秀率表,表中包含条形图的图表
from zwpy import *
import zwpy.os_zw as win
from zwpy.math_zw import 四舍五入
from zwpy.openpyxl_zw import 电子表格,列名转字母,条形图类
文件1=电子表格('新成绩表.xlsx')
表1=文件1[0]
表2=文件1[1]
表及格率=文件1.复制工作表(表2.标题)
表及格率.标题='及格率'
表优秀率=文件1.复制工作表(表2.标题)
表优秀率.标题='优秀率'
表2.标题='平均分'
满分=列表(150,150,150,50,50,50,50,650)
# 下面用总成绩表计算全部学生的平均分/优秀率/及格率
for 列 in 范围(3,11):
分数列表=表1[列名转字母(列)].所有值[1:]
平均分=(求和(分数列表))/长度(分数列表)
表2.单元格(2,列-1,四舍五入(平均分,2))
及格分 = 满分[列 - 3] * 0.6
及格列表 = 列表(分数 for 分数 in 分数列表 if 分数 >= 及格分)
及格人数 = 长度(及格列表)
及格率 = 及格人数 / 长度(分数列表)
表及格率.单元格(2, 列 - 1, 及格率)
表及格率.单元格(2, 列 - 1).数字格式 = '0.00%'
优秀分 = 满分[列 - 3] * 0.8
优秀列表 = 列表(分数 for 分数 in 分数列表 if 分数 >= 优秀分)
优秀人数 = 长度(优秀列表)
优秀率 = 优秀人数 / 长度(分数列表)
表优秀率.单元格(2, 列 - 1, 优秀率)
表优秀率.单元格(2, 列 - 1).数字格式 = '0.00%'
# 下面新建7个班的工作表并从总成绩表分出对应班的学生
表头=表1[1].所有值
for i in 范围(1,8):
表=文件1.添加工作表(f'{i}班')
表.添加行(表头)
for 行 in 范围(2,表1.最大行 1):
班名=表1.单元格(行,2).值
文件1[班名].添加行(表1[行].所有值)
# 依次对每个班计算平均分/优秀率/及格率
for i in 范围(1,8):
表=文件1[f'{i}班']
for 列 in 范围(3, 11):
分数列表 = 表[列名转字母(列)].所有值[1:]
平均分 = (求和(分数列表)) / 长度(分数列表)
表2.单元格(2 i, 列 - 1, 舍入(平均分, 2))
及格分 = 满分[列 - 3] * 0.6
及格列表 = 列表(分数 for 分数 in 分数列表 if 分数 >= 及格分)
及格人数 = 长度(及格列表)
及格率 = 及格人数 / 长度(分数列表)
表及格率.单元格(2 i, 列 - 1, 及格率)
表及格率.单元格(2 i, 列 - 1).数字格式 = '0.00%'
优秀分 = 满分[列 - 3] * 0.8
优秀列表 = 列表(分数 for 分数 in 分数列表 if 分数 >= 优秀分)
优秀人数 = 长度(优秀列表)
优秀率 = 优秀人数 / 长度(分数列表)
表优秀率.单元格(2 i, 列 - 1, 优秀率)
表优秀率.单元格(2 i, 列 - 1).数字格式 = '0.00%'
# 给平均分/优秀率/及格率三个工作表添加条形图
for 列 in 范围(2,10):
科目=表2.单元格(1,列).值
条形图=条形图类('垂直',科目)
条形图.添加数据(表2,2,9,列)
条形图.设置系列(表2,2,9,1)
行位置=(列-1) 15*(列-2)
表2.添加图表(条形图,f'K{行位置}')
for 列 in 范围(2,10):
科目=表及格率.单元格(1,列).值
条形图=条形图类('水平',科目)
条形图.添加数据(表及格率,2,9,列)
条形图.设置系列(表及格率,2,9,1)
行位置=(列-1) 15*(列-2)
表及格率.添加图表(条形图,f'K{行位置}')
for 列 in 范围(2,10):
科目=表优秀率.单元格(1,列).值
条形图=条形图类('垂直',科目)
条形图.添加数据(表优秀率,2,9,列)
条形图.设置系列(表优秀率,2,9,1)
行位置=(列-1) 15*(列-2)
表优秀率.添加图表(条形图,f'K{行位置}')
文件1.保存('新成绩表2.xlsx')
win.打开文件('新成绩表2.xlsx')