From 4789271314e7e1e7c9ad5748dd0b151a512a9d3a Mon Sep 17 00:00:00 2001 From: xiaobian-bot Date: Sat, 25 Apr 2026 08:10:01 +0800 Subject: [PATCH] auto backup 2026-04-25 08:10:01 --- logs/backup.log | 10 ++ output/China_Unit_Lesson1_段落1.xlsx | Bin 0 -> 9535 bytes scripts/export_script_p1.py | 128 +++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 output/China_Unit_Lesson1_段落1.xlsx create mode 100644 scripts/export_script_p1.py diff --git a/logs/backup.log b/logs/backup.log index d37170a..3d892a7 100644 --- a/logs/backup.log +++ b/logs/backup.log @@ -1457,3 +1457,13 @@ To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git From https://git.valavala.com/ai_member_only/ai_member_xiaobian * branch master -> FETCH_HEAD Already up to date. +[master 00c3bc6] auto backup 2026-04-24 08:10:01 + 2 files changed, 20 insertions(+), 1 deletion(-) +remote: . Processing 1 references +remote: Processed 1 references in total +To https://git.valavala.com/ai_member_only/ai_member_xiaobian.git + a54897b..00c3bc6 master -> master +{"code":0,"data":{"body":{"content":"{\"text\":\"✅ 小编Workspace每日自动备份完成(2026-04-24 08:10)\\n提交哈希:00c3bc6\\n所有Workspace变更已同步到远程Git仓库\"}"},"chat_id":"oc_056898e8cc3689d305b4c69f7178ca27","create_time":"1776989402484","deleted":false,"message_id":"om_x100b519f03680cacb369d993834092e","msg_type":"text","sender":{"id":"cli_a9311be796f85cbd","id_type":"app_id","sender_type":"app","tenant_key":"176b7bf89fc6d75e"},"update_time":"1776989402484","updated":false},"msg":"success"}✅ 备份完成:Fri Apr 24 08:10:02 AM CST 2026 +From https://git.valavala.com/ai_member_only/ai_member_xiaobian + * branch master -> FETCH_HEAD +Already up to date. diff --git a/output/China_Unit_Lesson1_段落1.xlsx b/output/China_Unit_Lesson1_段落1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e4df501108867867c5b30c75ad8f3a9d58467651 GIT binary patch literal 9535 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 I{_E-g0M^`P^#A|> literal 0 HcmV?d00001 diff --git a/scripts/export_script_p1.py b/scripts/export_script_p1.py new file mode 100644 index 0000000..8b3ec43 --- /dev/null +++ b/scripts/export_script_p1.py @@ -0,0 +1,128 @@ +import openpyxl +from openpyxl.styles import Font, Alignment, Border, Side, PatternFill + +wb = openpyxl.Workbook() + +# ===== Sheet1: 完整剧本 ===== +ws = wb.active +ws.title = "剧本-段落1" + +# 列宽 +ws.column_dimensions['A'].width = 15 +ws.column_dimensions['B'].width = 60 +ws.column_dimensions['C'].width = 12 +ws.column_dimensions['D'].width = 45 + +# 样式 +header_font = Font(bold=True, size=11) +header_fill = PatternFill(start_color="D9E2F3", end_color="D9E2F3", fill_type="solid") +wrap = Alignment(wrap_text=True, vertical="top") +thin_border = Border( + left=Side(style='thin'), + right=Side(style='thin'), + top=Side(style='thin'), + bottom=Side(style='thin') +) + +# 表头 +headers = ["类型", "剧情描述", "名字", "台词"] +for col, h in enumerate(headers, 1): + cell = ws.cell(row=1, column=col, value=h) + cell.font = header_font + cell.fill = header_fill + cell.alignment = wrap + cell.border = thin_border + +# 剧本数据 +rows = [ + ["TL", "【场景】教室(放学后,阳光斜照进来,黑板旁贴着本周时间表。教室里只剩几个人在收拾)\n【角色】User、Ben、Vicky、Sue、Kim\n【音效】放学铃声余韵渐弱,远处操场嬉闹声", "", ""], + ["", "放学了,教室里大部分同学已经走了。Vicky站在黑板旁,手指着贴在墙上的明天时间表,念给大家听", "", ""], + ["", "", "Vicky", "Okay, let me check tomorrow's timetable."], + ["", "", "Vicky", "First, we have a math lesson. Then, an English lesson."], + ["", "User和Ben在座位上一边听一边收拾课本,根据Vicky念的科目把对应的书塞进书包", "", ""], + ["", "", "User", "Math... English... got it."], + ["图片互动-拖拽", "【教研图】书桌上摆着几本课本(封面分别写着Math、English、Art等),旁边是打开的书包。根据明天的课表,把需要的课本(即对应的subject)拖进书包", "", ""], + ["对话互动", "", "User", "I need to pack the right books for each subject."], + ["TL", "Ben也在翻自己的书桌抽屉,找课本。他手伸进抽屉深处掏了半天,掏出来一团皱巴巴的东西——一件T恤", "", ""], + ["", "Ben举起那件T恤,愣了一下。一股味道扩散开来\n【音效】一阵诡异的"嗡——"音效(夸张搞笑风格)\n【emoji】Vicky 🤢 Sue 🤢 User 😨", "", ""], + ["", "", "Vicky", "EWWW! Ben! What IS that?!"], + ["", "", "Ben", "Oh... my PE shirt..."], + ["", "", "Sue", "It SMELLS, Ben!"], + ["", "", "Ben", "I forgot it was in there..."], + ["", "【教研图】时间表特写,可以看到几天前有一节PE lesson,旁边画了个小人在跑步", "", ""], + ["", "", "User", "Look! There was a PE lesson three days ago!"], + ["", "", "User", "Ben, you forgot to wash it for three days?!"], + ["", "【emoji】Ben 😅 Ben不好意思地把T恤赶紧卷起来塞进书包,Vicky和Sue拼命扇风", "", ""], + ["", "", "Ben", "Sorry, sorry! I'll wash it tonight! I promise!"], + ["", "", "Vicky", "You BETTER!"], + ["", "", "Sue", "Put it away. Far, far away."], + ["", "Ben手忙脚乱地把臭T恤藏好,大家总算松了口气。Vicky捏着鼻子回到时间表前,继续往下念", "", ""], + ["", "", "Vicky", "Okay... where was I..."], + ["", "Vicky的手指滑到时间表的最后一栏,停住了,皱起眉头", "", ""], + ["", "", "Vicky", "Wait. There is one more subject tomorrow."], + ["", "", "Vicky", '"China." What is... "China"?'], + ["", "", "Ben", "China? Is that a new game?"], + ["", "", "User", "I've never seen this subject before."], + ["", "Sue已经不知道什么时候抱来了一个地球仪,她把地球仪往桌上一放,转到亚洲方向", "", ""], + ["", "", "Sue", "I know this one! China is not a subject name. It's a place!"], + ["", "", "Sue", "Look. China is right here. A very big country!"], + ["", "Sue用手指点着地球仪上中国的位置,大家围过去", "", ""], + ["图片互动-单选", "【教研图】简化世界地图,标注几个地点(America、England、Japan、China),User找到China", "", ""], + ["", "", "User", "Here! This is China!"], + ["TL", "", "Ben", "Whoa, it's really big!"], + ["", "大家正围着地球仪研究,突然窗外传来Kim的喊声\n【音效】从走廊远处传来的跑步声,越来越近", "", ""], + ["", "", "Kim", "(画外音) Hey!! HEYYYY!!"], + ["", "Kim从教室门口冲进来,上气不接下气", "", ""], + ["", "", "Kim", "Big news... big news!"], + ["", "", "Kim", "A new teacher is coming tomorrow!"], + ["", "", "Sue", "A new teacher?"], + ["", "", "Kim", "Yes! A SPECIAL teacher! For a new subject!"], + ["", "", "User", "It must be for China! The new subject!"], + ["", "", "Ben", "Cool! I wonder what the teacher looks like!"], + ["", "Vicky没有说话,她盯着时间表上的\"China\",慢慢皱起了眉\n【emoji】Vicky 😰", "", ""], + ["", "", "Vicky", "I don't know why... but I have a bad feeling about tomorrow."], + ["", "", "Ben", "Oh, come on, Vicky! A new teacher! How bad can it be?"], + ["", "Vicky没接话,只是把书包拉链拉上。窗外夕阳把教室染成橘色,镜头慢慢推向黑板旁的时间表,最后一栏\"China\"旁边是一个大大的问号\n【音乐】轻快校园旋律,尾段带一丝悬念,渐弱", "", ""], +] + +for r, row_data in enumerate(rows, 2): + for c, val in enumerate(row_data, 1): + cell = ws.cell(row=r, column=c, value=val) + cell.alignment = wrap + cell.border = thin_border + +# ===== Sheet2: 知识点统计 ===== +ws2 = wb.create_sheet("知识点统计") +ws2.column_dimensions['A'].width = 18 +ws2.column_dimensions['B'].width = 15 +ws2.column_dimensions['C'].width = 45 +ws2.column_dimensions['D'].width = 10 +ws2.column_dimensions['E'].width = 45 +ws2.column_dimensions['F'].width = 10 + +kp_headers = ["知识点", "词性/类型", "输入详情", "输入次数", "输出详情", "输出次数"] +for col, h in enumerate(kp_headers, 1): + cell = ws2.cell(row=1, column=col, value=h) + cell.font = header_font + cell.fill = header_fill + cell.alignment = wrap + cell.border = thin_border + +kp_data = [ + ["Subject (n. 科目)", "名词", "User\"each subject\" / Vicky\"one more subject\" / User\"never seen this subject\" / Kim\"for a new subject\"", 4, "User对话互动\"right books for each subject\"", 1], + ["China (n. 中国)", "名词", "Sue\"China is a place\" / Sue\"China is right here\"", 2, "User图片互动\"This is China!\"", 1], + ["Lesson (n. 一节课)", "名词", "Vicky\"a math lesson, an English lesson\" / User\"a PE lesson three days ago\"", 2, "—", 0], + ["Learn (v. 学习)", "动词", "未出现(段落2铺设)", 0, "—", 0], + ["be proud of (句型)", "句型", "未出现(段落2铺设)", 0, "—", 0], + ["learn about (句型)", "句型", "未出现(段落2铺设)", 0, "—", 0], +] + +for r, row_data in enumerate(kp_data, 2): + for c, val in enumerate(row_data, 1): + cell = ws2.cell(row=r, column=c, value=val) + cell.alignment = wrap + cell.border = thin_border + +output_path = "/root/.openclaw/workspace-xiaobian/output/China_Unit_Lesson1_段落1.xlsx" +wb.save(output_path) +print(f"Saved to {output_path}")