案例背景
很多人写周报时,真正耗时间的地方并不是“写作”本身,而是前面的整理过程。
一周下来,工作内容可能分散在 Excel、任务清单、会议纪要、项目群消息和个人备忘录里。到了周五写周报时,往往要重新回忆:这周做了什么、哪些已经完成、哪些还在推进、遇到了什么问题、下周准备继续做什么。
如果工作内容比较零散,这个过程就会变成重复劳动:
这篇教程要做的事情很直接:用 Python 读取一份工作记录表,再调用 AI 自动生成结构化工作周报。
适合的使用场景包括:
这个流程的核心不是让 AI 凭空写周报,而是把真实工作记录整理成结构化输入,再让 AI 根据记录生成一份可以继续修改的周报初稿。
数据准备
我们有一份工作记录表 work_log.xlsx,每一行代表一条工作记录。
表格字段如下:
这类表格不需要特别复杂,只要能够回答三个问题即可:
后面 Python 会把这些表格记录转成结构化文本,再交给 AI 生成周报。
实现思路
完整流程可以分为五步。
1. 读取工作记录
使用 pandas 读取 Excel 表格,保留日期、项目、工作内容、进展状态和备注等字段。
2. 清洗表格内容
对空值进行填充,并检查关键字段是否存在。这样可以避免因为表头写错、字段缺失导致程序运行失败。
3. 转换成结构化文本
把每一行工作记录转换成统一格式,例如:
日期:2026-07-01;项目:数据清洗;工作内容:整理客户反馈表,统一字段命名;进展状态:已完成;备注:删除重复记录 126 条。
这样做的好处是:AI 接收到的不是杂乱表格,而是一组清晰的工作日志。
4. 设计提示词
提示词需要明确告诉 AI 输出什么内容。这里可以把周报结构固定为:
同时还要加入限制条件:不要编造工作记录中没有出现的内容。
5. 导出周报结果
最后把 AI 生成的内容保存为 weekly_report.md,后续可以复制到公司周报系统,也可以继续转成 Word 或 PDF。
环境准备
需要安装以下 Python 库:
pip install pandas openpyxl openai
如果使用 OpenAI API,需要先在系统环境变量里配置 API Key。
Windows PowerShell 示例:
setx OPENAI_API_KEY "你的API_KEY"
重新打开终端后,可以运行:
echo $env:OPENAI_API_KEY
如果能看到对应内容,说明环境变量已经配置成功。
核心代码
下面是一份完整代码,可以保存为 weekly_report_ai.py。
import os
from pathlib import Path
import pandas as pd
from openai import OpenAI
# ======================
# 1. 基础配置
# ======================
INPUT_FILE = Path("work_log.xlsx")
OUTPUT_FILE = Path("weekly_report.md")
MODEL_NAME = os.getenv("OPENAI_MODEL", "gpt-4.1-mini")
# ======================
# 2. 创建示例数据
# ======================
def create_demo_excel(file_path: Path) -> None:
"""如果本地没有工作记录表,就自动生成一份示例表。"""
demo_data = [
{
"日期": "2026-07-01",
"项目": "数据清洗",
"工作内容": "整理客户反馈表,统一字段命名",
"进展状态": "已完成",
"备注": "删除重复记录 126 条",
},
{
"日期": "2026-07-01",
"项目": "报告撰写",
"工作内容": "完成月度经营分析初稿",
"进展状态": "进行中",
"备注": "还需要补充图表",
},
{
"日期": "2026-07-02",
"项目": "数据分析",
"工作内容": "计算各渠道转化率",
"进展状态": "已完成",
"备注": "发现短视频渠道提升明显",
},
{
"日期": "2026-07-03",
"项目": "自动化脚本",
"工作内容": "编写 Excel 合并脚本",
"进展状态": "已完成",
"备注": "可自动合并多个表格",
},
{
"日期": "2026-07-04",
"项目": "项目沟通",
"工作内容": "参加产品需求讨论会",
"进展状态": "已完成",
"备注": "明确下周数据口径",
},
]
df_demo = pd.DataFrame(demo_data)
df_demo.to_excel(file_path, index=False)
print(f"已生成示例数据:{file_path}")
# ======================
# 3. 读取工作记录
# ======================
def load_work_log(file_path: Path) -> pd.DataFrame:
"""读取 Excel 工作记录,并检查必要字段。"""
if not file_path.exists():
create_demo_excel(file_path)
df = pd.read_excel(file_path)
required_cols = ["日期", "项目", "工作内容", "进展状态", "备注"]
missing_cols = [col for col in required_cols if col not in df.columns]
if missing_cols:
raise ValueError(f"表格缺少必要字段:{missing_cols}")
df = df[required_cols].fillna("")
return df
# ======================
# 4. 拼接结构化文本
# ======================
def build_work_log_text(df: pd.DataFrame) -> str:
"""把表格中的每一行转换成适合 AI 阅读的文本。"""
records = []
for _, row in df.iterrows():
record = (
f"日期:{row['日期']};"
f"项目:{row['项目']};"
f"工作内容:{row['工作内容']};"
f"进展状态:{row['进展状态']};"
f"备注:{row['备注']}。"
)
records.append(record)
return "\n".join(records)
# ======================
# 5. 构造提示词
# ======================
def build_prompt(work_log_text: str) -> str:
"""构造周报生成提示词。"""
prompt = f"""
你是一名专业的工作总结助手。
请根据下面的工作记录,生成一份正式、清晰、结构化的中文周报。
写作要求:
1. 不要编造工作记录中没有出现的内容;
2. 语言正式、简洁,不要过度夸张;
3. 尽量使用条目式表达,方便直接复制到周报系统;
4. 对于“进行中”的事项,需要体现在存在问题或下周计划中;
5. 输出结构必须包含以下五个部分:
- 本周工作概述
- 重点完成事项
- 主要进展
- 存在问题
- 下周计划
工作记录如下:
{work_log_text}
"""
return prompt.strip()
# ======================
# 6. 调用 AI 生成周报
# ======================
def generate_weekly_report(prompt: str) -> str:
"""调用 OpenAI API 生成周报文本。"""
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise EnvironmentError(
"没有检测到 OPENAI_API_KEY。请先配置环境变量后再运行。"
)
client = OpenAI(api_key=api_key)
response = client.responses.create(
model=MODEL_NAME,
input=prompt,
)
return response.output_text
# ======================
# 7. 保存 Markdown 文件
# ======================
def save_report(report_text: str, output_file: Path) -> None:
"""保存生成的周报。"""
output_file.write_text(report_text, encoding="utf-8")
print(f"周报生成完成:{output_file}")
# ======================
# 8. 主程序入口
# ======================
def main() -> None:
df = load_work_log(INPUT_FILE)
work_log_text = build_work_log_text(df)
prompt = build_prompt(work_log_text)
report = generate_weekly_report(prompt)
save_report(report, OUTPUT_FILE)
if __name__ == "__main__":
main()
代码解释
这段代码的重点不是复杂算法,而是把周报生成流程拆成几个稳定步骤。
读取数据
df = pd.read_excel(file_path)
这一步读取工作记录表。只要每周都使用同一个模板,后面就不需要反复修改代码。
检查字段
required_cols = ["日期", "项目", "工作内容", "进展状态", "备注"]
missing_cols = [col for col in required_cols if col not in df.columns]
这一步用于检查表头是否完整。如果把“进展状态”误写成“状态”,程序会直接提醒缺少字段,而不是生成一份内容混乱的周报。
拼接文本
record = (
f"日期:{row['日期']};"
f"项目:{row['项目']};"
f"工作内容:{row['工作内容']};"
f"进展状态:{row['进展状态']};"
f"备注:{row['备注']}。"
)
这一步把每一行表格变成一句结构化记录。这样 AI 能够更稳定地理解每条任务的时间、项目、内容、状态和备注。
构造提示词
prompt = build_prompt(work_log_text)
提示词决定了最终周报的结构。这里特别强调两点:
这样生成结果会更适合实际办公场景。
保存结果
output_file.write_text(report_text, encoding="utf-8")
生成内容会保存为 Markdown 文件。Markdown 文件可以直接复制,也可以继续转换成 Word 或 PDF。
运行步骤
第一步:准备文件夹
新建一个文件夹,例如:
weekly-report-ai/
把代码文件放进去:
weekly-report-ai/
├── weekly_report_ai.py
第二步:安装依赖
在终端进入项目文件夹,运行:
pip install pandas openpyxl openai
第三步:配置 API Key
Windows PowerShell 中运行:
setx OPENAI_API_KEY "你的API_KEY"
重新打开终端后,再运行代码。
第四步:运行脚本
python weekly_report_ai.py
如果当前目录没有 work_log.xlsx,程序会自动生成一份示例数据。随后会调用 AI 生成周报,并保存为:
weekly_report.md
结果展示
运行完成后,会得到一份结构化周报。下面是一份输出示例。
本周工作概述
本周主要围绕数据清洗、报告撰写、数据分析、自动化脚本开发和项目沟通等工作展开。整体来看,多项任务已完成,月度经营分析报告仍在推进中。本周已完成客户反馈数据整理、渠道转化率计算和 Excel 自动合并脚本编写,同时通过项目沟通明确了下周数据口径。
重点完成事项
- 1. 完成客户反馈表的数据清洗工作,统一字段命名,并删除重复记录 126 条。
- 2. 完成各渠道转化率计算,识别出短视频渠道转化率提升较为明显。
- 3. 编写 Excel 自动合并脚本,实现多个表格的自动汇总。
- 4. 参加产品需求讨论会,明确后续数据分析所需的数据口径。
主要进展
存在问题
当前月度经营分析报告仍需继续完善,主要问题是图表内容还不完整。后续需要结合已完成的数据分析结果,对报告中的关键指标进行可视化补充,使报告表达更加直观。
下周计划
- 2. 根据已明确的数据口径,继续完善相关数据分析结果。
- 3. 对 Excel 自动合并脚本进行测试,检查不同表格格式下的兼容性。
- 4. 整理渠道转化率分析结论,为后续业务汇报提供支持。
结果汇总
从示例结果可以看出,AI 生成的周报不是简单复述原始记录,而是完成了三件事:
| |
|---|
| |
| 从备注中提取关键结果,例如删除重复记录、渠道提升明显 |
| |
最终得到的是一份可以继续修改的周报初稿,而不是完全替代人工判断。
扩展方向
这个案例还可以继续扩展成更完整的办公自动化工具。
1. 自动生成不同版本
同一份工作记录可以生成不同风格的周报:
只需要在提示词中修改输出风格即可。
2. 支持多人周报
如果表格中加入“姓名”字段,就可以按人员分组,批量生成每个人的周报。
表格可以改成:
代码中可以按姓名分组:
for name, group in df.groupby("姓名"):
work_log_text = build_work_log_text(group)
prompt = build_prompt(work_log_text)
report = generate_weekly_report(prompt)
save_report(report, Path(f"{name}_weekly_report.md"))
这样就可以从一张团队任务表中,自动生成多份个人周报。
3. 导出 Word 文档
如果公司要求提交 Word,可以使用 python-docx 把 Markdown 结果进一步写入 .docx 文件。
pip install python-docx
简单示例:
from docx import Document
report_text = Path("weekly_report.md").read_text(encoding="utf-8")
doc = Document()
doc.add_heading("工作周报", level=1)
for line in report_text.splitlines():
if line.strip():
doc.add_paragraph(line)
doc.save("weekly_report.docx")
4. 自动生成月报
如果把时间范围从一周改成一个月,就可以生成月报。只需要在提示词中把“周报”改成“月度工作总结”,并增加“本月成果”“下月计划”等结构即可。
总结
这个教程展示了一个很实用的办公自动化思路:
工作记录表
↓
Python 读取和清洗
↓
转换成结构化文本
↓
AI 自动总结
↓
导出 Markdown 周报
它的重点不是让 AI 替代工作,而是把“翻记录、归类、提炼、改写”这些重复步骤自动化。
只要平时把任务记录维护好,到周五就不需要从零开始写周报。运行一次脚本,就可以得到一份结构完整、内容清楚、方便继续修改的工作总结初稿。