假设我们需要统计整个六年级的学生成绩,并且按照总分排序,如何实现?
下面是一个简单的Python脚本,可以快速实现,代码如下:
`import os
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Border, Side, PatternFill
# 读取各班级的成绩表
class1_df = pd.read_excel("./resources/六年①班成绩表.xlsx")
class2_df = pd.read_excel("./resources/六年②班成绩表.xlsx")
# 合并成绩表
merged_df = pd.concat([class1_df, class2_df])
# 计算总分并添加到新列
merged_df['总分'] = merged_df['语文'] + merged_df['数学'] + merged_df['英语']
# 按照总分排序
sorted_df = merged_df.sort_values(by='总分', ascending=False)
# 选择需要的列
final_df = sorted_df[['学号', '姓名', '语文', '数学', '英语', '总分']]
# 创建一个新的Excel工作簿
wb = Workbook()
ws = wb.active
# 添加标题栏并设置背景颜色和边框
title_row = ['学号', '姓名', '语文', '数学', '英语', '总分']
ws.append(title_row)
for cell in ws[1]:
cell.fill = PatternFill(start_color='D5FAD1', end_color='D5FAD1', fill_type='solid') # 设置背景颜色
cell.border = Border(top=Side(style='thin'), bottom=Side(style='thin'),
left=Side(style='thin'), right=Side(style='thin'))
# 将数据逐行写入Excel表格,并设置边框
for r_idx, row in enumerate(final_df.iterrows(), start=2):
for c_idx, value in enumerate(row[1]):
cell = ws.cell(row=r_idx, column=c_idx + 1, value=value)
# 设置边框
cell.border = Border(top=Side(style='thin'), bottom=Side(style='thin'),
left=Side(style='thin'), right=Side(style='thin'))
# 检查并创建目录
output_dir = "./tmp"
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 保存Excel文件
wb.save(f"{output_dir}/六年级总成绩单.xlsx")`
然后运行该程序,它可以快速批量的将文件重命名,如下图: