167 lines
6.4 KiB
Python
167 lines
6.4 KiB
Python
import pandas as pd
|
||
from openpyxl import Workbook
|
||
from openpyxl.styles import Font, Alignment, PatternFill
|
||
|
||
# 创建工作簿
|
||
wb = Workbook()
|
||
wb.remove(wb.active) # 删除默认sheet
|
||
|
||
# ================== Sheet1: 基本信息 ==================
|
||
ws1 = wb.create_sheet("基本信息")
|
||
ws1.append(["字段", "内容"])
|
||
basic_info = [
|
||
["学员ID", "1185"],
|
||
["学习级别", "Level 1"],
|
||
["已学单元", "Unit49 ~ Unit54(共6个单元)"],
|
||
["学习周期", "2025年6月 ~ 2026年4月11日"],
|
||
["总有效学习时长", "约62分钟(平均每单元10~15分钟)"]
|
||
]
|
||
for row in basic_info:
|
||
ws1.append(row)
|
||
# 样式设置
|
||
header_fill = PatternFill(start_color="FFC000", end_color="FFC000", fill_type="solid")
|
||
for col in range(1, 3):
|
||
cell = ws1.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet2: 整体学习概览 ==================
|
||
ws2 = wb.create_sheet("整体学习概览")
|
||
ws2.append(["字段", "内容"])
|
||
overview = [
|
||
["总互动答题次数", "644次(覆盖20+种题型)"],
|
||
["已掌握核心知识点", "182个(单词+句型)"],
|
||
["单元整体掌握率", "88%(良好水平)"],
|
||
["单元挑战完成情况", "听力6次全Perfect,口语6次(2Perfect/2Good/2Oops)"]
|
||
]
|
||
for row in overview:
|
||
ws2.append(row)
|
||
for col in range(1, 3):
|
||
cell = ws2.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet3: 互动组件表现 ==================
|
||
ws3 = wb.create_sheet("互动组件表现")
|
||
ws3.append(["结果等级", "数量", "占比"])
|
||
interactive = [
|
||
["Perfect", 437, "67.8%"],
|
||
["Good", 78, "12.1%"],
|
||
["Pass", 102, "15.8%"],
|
||
["Oops", 15, "2.3%"],
|
||
["Failed", 12, "1.9%"]
|
||
]
|
||
for row in interactive:
|
||
ws3.append(row)
|
||
for col in range(1, 4):
|
||
cell = ws3.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet4: 薄弱知识点 ==================
|
||
ws4 = wb.create_sheet("薄弱知识点")
|
||
ws4.append(["知识点英文", "中文意思", "错误占比"])
|
||
weak_points = [
|
||
["carrot", "胡萝卜", "33.3%"],
|
||
["story", "故事", "25%"],
|
||
["right", "右边", "30%"],
|
||
["dirty", "脏的", "33.3%"],
|
||
["coconut", "椰子", "33.3%"],
|
||
["favourite", "最喜欢的", "33.3%"]
|
||
]
|
||
for row in weak_points:
|
||
ws4.append(row)
|
||
for col in range(1, 4):
|
||
cell = ws4.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet5: 单元挑战表现 ==================
|
||
ws5 = wb.create_sheet("单元挑战表现")
|
||
ws5.append(["题型", "测试次数", "Perfect次数", "Good次数", "Oops次数", "整体表现"])
|
||
challenge = [
|
||
["听力", 6, 6, 0, 0, "🌟 满分水平,听音辨音、听力理解能力极强"],
|
||
["口语", 6, 2, 2, 2, "📈 良好水平,发音准确率约80%,句子完整度有待提升"]
|
||
]
|
||
for row in challenge:
|
||
ws5.append(row)
|
||
for col in range(1, 7):
|
||
cell = ws5.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet6: 优势总结 ==================
|
||
ws6 = wb.create_sheet("优势总结")
|
||
ws6.append(["序号", "优势内容"])
|
||
strengths = [
|
||
[1, "听力能力突出:所有单元听力挑战全满分,对语音、语调、连读的识别准确率100%"],
|
||
[2, "基础单词掌握牢固:85%的核心单词Perfect比例100%,词义、发音记忆扎实"],
|
||
[3, "学习韧性强:所有Oops/Failed题目最终都通过多次尝试完成,无放弃作答情况"],
|
||
[4, "核心句型掌握稳定:90%以上的常用句型(问候、询问、指令等)掌握率100%,能够准确理解和应用"]
|
||
]
|
||
for row in strengths:
|
||
ws6.append(row)
|
||
for col in range(1, 3):
|
||
cell = ws6.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet7: 待提升方向 ==================
|
||
ws7 = wb.create_sheet("待提升方向")
|
||
ws7.append(["序号", "提升方向"])
|
||
improve = [
|
||
[1, "口语表达完整度:2次口语挑战Oops均因为句子表述不完整,遗漏核心成分"],
|
||
[2, "发音准确率:部分长单词(如coconut、favourite)发音准确率低于70%"],
|
||
[3, "生僻词记忆:低频出现的名词类单词遗忘率较高,需要定期复习"],
|
||
[4, "句子结构排序:巩固练习中句子排序题错误率较高,对句型结构的熟练度有待加强"]
|
||
]
|
||
for row in improve:
|
||
ws7.append(row)
|
||
for col in range(1, 3):
|
||
cell = ws7.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# ================== Sheet8: 个性化学习建议 ==================
|
||
ws8 = wb.create_sheet("个性化学习建议")
|
||
ws8.append(["序号", "建议内容"])
|
||
suggestions = [
|
||
[1, "口语强化训练:每天花5分钟做句子跟读练习,重点训练完整句子的流利度和完整度,每次录音后对照参考答案自查"],
|
||
[2, "单词复习计划:每周复习1次当月所学生僻单词,每次10分钟,采用闪卡记忆法强化"],
|
||
[3, "句型专项训练:每天做3道句子排序题,连续练习2周,强化句型结构记忆"],
|
||
[4, "发音纠正:针对发音准确率低的单词,每天跟读3遍,对比标准发音调整口型和语调"]
|
||
]
|
||
for row in suggestions:
|
||
ws8.append(row)
|
||
for col in range(1, 3):
|
||
cell = ws8.cell(row=1, column=col)
|
||
cell.font = Font(bold=True)
|
||
cell.fill = header_fill
|
||
cell.alignment = Alignment(horizontal="center")
|
||
|
||
# 调整列宽
|
||
for ws in wb.worksheets:
|
||
for col in ws.columns:
|
||
max_length = 0
|
||
column = col[0].column_letter
|
||
for cell in col:
|
||
try:
|
||
if len(str(cell.value)) > max_length:
|
||
max_length = len(str(cell.value))
|
||
except:
|
||
pass
|
||
adjusted_width = (max_length + 2) * 1.2
|
||
ws.column_dimensions[column].width = adjusted_width
|
||
|
||
# 保存文件
|
||
output_path = "/root/.openclaw/workspace-xiaoban/user_1185_study_analysis_report.xlsx"
|
||
wb.save(output_path)
|
||
print(f"Excel报告已生成,保存路径:{output_path}")
|