快捷搜索:  汽车  科技

python训练成绩分析系统(Python实现学生成绩分析自动化)

python训练成绩分析系统(Python实现学生成绩分析自动化)代码如下:

之前只是因为要参加比赛发布的作品,居然有朋友在求代码,今天改良了一下,加入了tkinter的窗口控制,更加方便的获取文件路径,顺便打包成了exe文件,让组内其他老师不用安装Python也可以使用。

python训练成绩分析系统(Python实现学生成绩分析自动化)(1)

不需要安装其他文件,打开即可在window电脑使用

python训练成绩分析系统(Python实现学生成绩分析自动化)(2)

按提示顺序打开文件

python训练成绩分析系统(Python实现学生成绩分析自动化)(3)

python训练成绩分析系统(Python实现学生成绩分析自动化)(4)

运行完毕也会有提示

代码如下:

import tkinter as tk from tkinter import filedialog import pandas as pd import xlwings as xw import openpyxl as vb import os from tkinter import messagebox root = tk.Tk() root.withdraw() app = xw.App(visible=False add_book=False) #获取文件路径 messagebox.showinfo("提示" "请打开:适学网数据文件") path_in = filedialog.askopenfilename() messagebox.showinfo("提示" "请打开:分析表(物理备课组)") path_out = filedialog.askopenfilename() try: # 清除目标数据 wb_out = app.books.open(path_out) wh_out = wb_out.sheets['数据'] wh_out['B2:S54'].value = '' # 或者 sh_out['B2:S54'].clear() wb_out.save() # 提取来源数据,将总分按班级保存到对应工作表 wb_in = app.books.open(path_in) wh_in = wb_in.sheets['学生小题成绩'] values = wh_in.range('A1').options(pd.DataFrame header=1 index=False expand='table').value values = values.groupby('班级') wb_temporary = app.books.add() for idx group in values: wh_temporary = wb_temporary.sheets.add(idx) wh_temporary['A1'].options(index=False).value = group['总分'] wh_temporary.autofit() wb_temporary.save(r'D:\临时班级总分表.xlsx') wb_temporary.close() # 清除0分 wb_new = vb.load_workbook(r'D:\临时班级总分表.xlsx') wh_new = wb_new.worksheets for i in wh_new: for j in i: for k in j: if k.value == 0 : k.value = ' ' wb_new.save(r'D:\临时班级总分表.xlsx') wb_new.close() # 把分数写入汇总表 wb_temp = app.books.open(r'D:\临时班级总分表.xlsx') k =2 # 目标工作表的列号从第2列开始 for i in range(18 -1 -1): # 按顺序取18到0作为工作表的序号,用来打开对应班级的工作表 wh_temp = wb_temp.sheets[i] row_num = wh_temp['A1'].expand('table').last_cell.row # 获取数据区域的最大行号 column = chr(63 k) # 将k的数值换成对应的列号 for j in range(2 row_num 1): # 遍历数据区域的所在列的单元格 wh_out.range('{}{}'.format(column j)).value = wh_temp.range('A{}'.format(j)).value # 将对应数据写入目标区域对应的单元格 k = k 1 # 列数字加1,让另一个班的数据写入下一列中 wb_out.save() wb_out.close() wb_temp.close() os.remove(r'D:\临时班级总分表.xlsx') finally: app.quit() messagebox.showinfo("提示" "分数已填入")

猜您喜欢: