177 lines
8.1 KiB
Python
177 lines
8.1 KiB
Python
import openpyxl
|
||
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill
|
||
from openpyxl.utils import get_column_letter
|
||
|
||
wb = openpyxl.Workbook()
|
||
|
||
# ========== Sheet 1: 知识点重复次数统计 ==========
|
||
ws1 = wb.active
|
||
ws1.title = "知识点统计"
|
||
|
||
# 样式
|
||
header_font = Font(name="微软雅黑", bold=True, size=11)
|
||
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
|
||
header_font_white = Font(name="微软雅黑", bold=True, size=11, color="FFFFFF")
|
||
word_fill = PatternFill(start_color="E2EFDA", end_color="E2EFDA", fill_type="solid")
|
||
pattern_fill = PatternFill(start_color="DAEEF3", end_color="DAEEF3", fill_type="solid")
|
||
warn_fill = PatternFill(start_color="FFF2CC", end_color="FFF2CC", fill_type="solid")
|
||
ok_fill = PatternFill(start_color="E2EFDA", end_color="E2EFDA", fill_type="solid")
|
||
thin_border = Border(
|
||
left=Side(style="thin"), right=Side(style="thin"),
|
||
top=Side(style="thin"), bottom=Side(style="thin")
|
||
)
|
||
center_align = Alignment(horizontal="center", vertical="center", wrap_text=True)
|
||
left_align = Alignment(horizontal="left", vertical="center", wrap_text=True)
|
||
|
||
# 标题行
|
||
ws1.merge_cells("A1:G1")
|
||
ws1["A1"] = "S3-U30-L3 霹雳飞船 — 知识点重复次数统计"
|
||
ws1["A1"].font = Font(name="微软雅黑", bold=True, size=14)
|
||
ws1["A1"].alignment = Alignment(horizontal="center", vertical="center")
|
||
|
||
# 表头
|
||
headers = ["类别", "知识点", "出现次数", "规范上限", "判定", "出现行(类型)"]
|
||
for col, h in enumerate(headers, 1):
|
||
cell = ws1.cell(row=3, column=col, value=h)
|
||
cell.font = header_font_white
|
||
cell.fill = header_fill
|
||
cell.alignment = center_align
|
||
cell.border = thin_border
|
||
|
||
# 数据
|
||
data = [
|
||
# 单词
|
||
["单词", "tooth", 3, "2–3次", "✅ 合规",
|
||
"① 对话朗读「提出疑问」\n② 对话朗读「金牙?他牙齿是是金色吗?」\n③ 对话挖空「总结金牙故事」"],
|
||
["单词", "garage", 4, "2–3次", "⚠️ 超标1次",
|
||
"① 对话朗读「Wander Garage」\n② 对话互动「这里是Wander Garage」\n③ 信息补词「买门牌」\n④ 阅读理解行"],
|
||
["单词", "gold", 4, "2–3次", "⚠️ 超标1次",
|
||
"① 对话朗读「金牙?」\n② 图片拖拽「选金色」\n③ 对话挖空「喷金色漆」\n④ 阅读理解行"],
|
||
["单词", "large", 4, "2–3次", "⚠️ 超标1次",
|
||
"① 对话朗读「总结金牙故事」\n② 图片单选「选大发动机」\n③ 对话选择「巨大车标」\n④ 阅读理解行"],
|
||
["单词", "similar", 3, "2–3次", "✅ 合规",
|
||
"① 对话朗读「船很相似」\n② 挖空互动「尾翼像CEO的车」\n③ 阅读理解行"],
|
||
["单词", "teach", 3, "2–3次", "✅ 合规",
|
||
"① 对话朗读「你可以教我」\n② 对话朗读「教我们什么」\n③ 对话挖空「Can somebody teach me?」"],
|
||
# 句型
|
||
["句型", "How can I help you?", 2, "2–3次", "✅ 合规",
|
||
"① 对话朗读「对顾客第一句」\n② 对话选择「Fox打招呼」"],
|
||
["句型", "How long have you been...", 2, "2–3次", "✅ 合规",
|
||
"① 对话朗读「存钱多久」\n② 对话选读「认识彼此多久」"],
|
||
["句型", "Can I speak to...?", 2, "2–3次", "✅ 合规",
|
||
"① 对话朗读「跟螺钉谈谈」\n② 对话组句「跟Shark聊聊」"],
|
||
]
|
||
|
||
for i, row in enumerate(data, 4):
|
||
for col, val in enumerate(row, 1):
|
||
cell = ws1.cell(row=i, column=col, value=val)
|
||
cell.border = thin_border
|
||
if col == 6:
|
||
cell.alignment = left_align
|
||
else:
|
||
cell.alignment = center_align
|
||
# 类别着色
|
||
if row[0] == "单词":
|
||
if col <= 5:
|
||
cell.fill = word_fill
|
||
else:
|
||
if col <= 5:
|
||
cell.fill = pattern_fill
|
||
|
||
# 汇总行
|
||
summary_row = len(data) + 4
|
||
ws1.merge_cells(f"A{summary_row}:G{summary_row}")
|
||
ws1.cell(row=summary_row, column=1, value="").border = thin_border
|
||
|
||
summary_row += 1
|
||
ws1.merge_cells(f"A{summary_row}:B{summary_row}")
|
||
ws1.cell(row=summary_row, column=1, value="汇总").font = Font(name="微软雅黑", bold=True, size=11)
|
||
ws1.cell(row=summary_row, column=1).alignment = center_align
|
||
ws1.cell(row=summary_row, column=1).fill = PatternFill(start_color="D9E2F3", end_color="D9E2F3", fill_type="solid")
|
||
for col in range(1, 8):
|
||
ws1.cell(row=summary_row, column=col).border = thin_border
|
||
|
||
summary_data = [
|
||
["单词数", "6个", "6个", "✅"],
|
||
["句型数", "3个", "3个", "✅"],
|
||
["知识点互动次数", "2–3次", "2–4次", "⚠️ garage/gold/large 各4次"],
|
||
]
|
||
for j, sd in enumerate(summary_data):
|
||
r = summary_row + 1 + j
|
||
ws1.cell(row=r, column=1, value="").border = thin_border
|
||
ws1.cell(row=r, column=2, value=sd[0]).font = Font(name="微软雅黑", bold=True)
|
||
ws1.cell(row=r, column=2).alignment = center_align
|
||
ws1.cell(row=r, column=2).border = thin_border
|
||
ws1.cell(row=r, column=3, value="规范值").font = Font(name="微软雅黑", color="808080")
|
||
ws1.cell(row=r, column=3).alignment = center_align
|
||
ws1.cell(row=r, column=3).border = thin_border
|
||
ws1.cell(row=r, column=4, value=sd[1]).alignment = center_align
|
||
ws1.cell(row=r, column=4).border = thin_border
|
||
ws1.cell(row=r, column=5, value="实际").font = Font(name="微软雅黑", color="808080")
|
||
ws1.cell(row=r, column=5).alignment = center_align
|
||
ws1.cell(row=r, column=5).border = thin_border
|
||
ws1.cell(row=r, column=6, value=sd[2]).alignment = center_align
|
||
ws1.cell(row=r, column=6).border = thin_border
|
||
ws1.cell(row=r, column=7, value=sd[3]).alignment = center_align
|
||
ws1.cell(row=r, column=7).border = thin_border
|
||
|
||
# 列宽
|
||
ws1.column_dimensions["A"].width = 8
|
||
ws1.column_dimensions["B"].width = 26
|
||
ws1.column_dimensions["C"].width = 12
|
||
ws1.column_dimensions["D"].width = 12
|
||
ws1.column_dimensions["E"].width = 14
|
||
ws1.column_dimensions["F"].width = 50
|
||
|
||
# ========== Sheet 2: 教研知识区对照 ==========
|
||
ws2 = wb.create_sheet("教研知识区对照")
|
||
|
||
ws2.merge_cells("A1:E1")
|
||
ws2["A1"] = "教研知识区知识点清单 vs 剧本表实际出现"
|
||
ws2["A1"].font = Font(name="微软雅黑", bold=True, size=13)
|
||
ws2["A1"].alignment = Alignment(horizontal="center", vertical="center")
|
||
|
||
headers2 = ["类别", "知识点", "教研区状态", "剧本表出现", "备注"]
|
||
for col, h in enumerate(headers2, 1):
|
||
cell = ws2.cell(row=3, column=col, value=h)
|
||
cell.font = header_font_white
|
||
cell.fill = header_fill
|
||
cell.alignment = center_align
|
||
cell.border = thin_border
|
||
|
||
ref_data = [
|
||
["单词", "tooth", "✅ 已列入", "✅ 出现3次", ""],
|
||
["单词", "large", "✅ 已列入", "⚠️ 出现4次", "超标"],
|
||
["单词", "gold", "✅ 已列入", "⚠️ 出现4次", "超标"],
|
||
["单词", "garage", "✅ 已列入", "⚠️ 出现4次", "超标"],
|
||
["单词", "similar", "✅ 已列入", "✅ 出现3次", ""],
|
||
["单词", "teach", "✅ 已列入", "✅ 出现3次", ""],
|
||
["句型", "How can I help you?", "✅ 已列入", "✅ 出现2次", ""],
|
||
["句型", "Can I speak to...?", "✅ 已列入", "✅ 出现2次", ""],
|
||
["句型", "How long have you been...", "✅ 已列入", "✅ 出现2次", ""],
|
||
["句型", "When did the problem start?", "❌ 已删除", "❌ 未出现", "教研区已划删除线"],
|
||
["句型", "Would you mind if...?", "❌ 已删除", "❌ 未出现", "教研区已划删除线"],
|
||
["句型", "Something doesn't feel right.", "❌ 已删除", "❌ 未出现", "教研区已划删除线"],
|
||
]
|
||
|
||
for i, row in enumerate(ref_data, 4):
|
||
for col, val in enumerate(row, 1):
|
||
cell = ws2.cell(row=i, column=col, value=val)
|
||
cell.border = thin_border
|
||
cell.alignment = center_align if col <= 4 else left_align
|
||
if row[0] == "单词":
|
||
cell.fill = word_fill
|
||
else:
|
||
cell.fill = pattern_fill
|
||
|
||
ws2.column_dimensions["A"].width = 8
|
||
ws2.column_dimensions["B"].width = 32
|
||
ws2.column_dimensions["C"].width = 14
|
||
ws2.column_dimensions["D"].width = 16
|
||
ws2.column_dimensions["E"].width = 22
|
||
|
||
# 保存
|
||
output_path = "/root/.openclaw/workspace-xiaoyan/output/S3_U30_L3_知识点统计.xlsx"
|
||
wb.save(output_path)
|
||
print(f"Saved: {output_path}")
|