1.需求澄清清单
项目目标
读取原始销售文件 sales_raw.xlsx ,完成脏数据清洗、销售额统计,输出多工作表报表 report.xlsx ;程序不得修改原始输入文件,各类异常场景输出可读中文提示。
输入
输入文件: sales_raw.xlsx
数据表字段:日期、销售员、产品、数量、单价、地区
原始数据包含脏数据:关键字段空值、重复记录、数量小于等于0的异常数据。
输出
输出文件: report.xlsx ,包含4张工作表:
1. 明细清洗后:清洗完成后的有效业务明细
2. 按销售员:按销售员维度汇总销售额
3. 按地区:按地区维度汇总销售额
4. 总览:月度整体销售总额
边界条件
1. 原始输入文件找不到,打印错误提示,程序直接退出,不生成输出文件。
2. 原始表格缺少业务关键字段,打印错误提示,程序直接退出。
3. 经过清洗之后无任何有效业务数据,给出提示,不生成报表文件。
4. 仅读取原始文件,全程不修改、不覆盖 sales_raw.xlsx 原始文件。
验收标准
1. 脚本可一键运行,正常场景成功生成 report.xlsx ,4个工作表完整齐全。
2. 数据清洗逻辑生效:删除关键字段为空的行、过滤数量≤0异常记录、按全部字段做去重处理。
3. 销售额计算公式:销售额 = 数量 × 单价;分组汇总统计结果计算准确。
4. 异常场景程序不会崩溃终止,输出通俗易懂的中文提示信息。
2 .可运行源代码工程
目录结构
task1/
├─ main.py # 主业务代码
├─ generate_test.py # 生成模拟测试数据脚本
├─ README.md # 项目运行说明
└─ sales_raw.xlsx # 原始销售数据,运行generate_test.py自动生成
main.py
import pandas as pd
def main():
input_file = "sales_raw.xlsx"
output_file = "report.xlsx"
key_cols = ["日期", "销售员", "产品", "数量", "单价", "地区"]
try:
df_raw = pd.read_excel(input_file)
except FileNotFoundError:
print(f"【错误】找不到原始文件:{input_file}")
return
except Exception as e:
print(f"【错误】读取文件失败:{str(e)}")
return
missing_cols = [col for col in key_cols if col not in df_raw.columns]
if missing_cols:
print(f"【错误】原始表格缺失关键字段:{missing_cols}")
return
df_clean = df_raw.copy()
df_clean = df_clean.dropna(subset=key_cols)
df_clean = df_clean[df_clean["数量"] > 0]
df_clean = df_clean.drop_duplicates(subset=key_cols)
if df_clean.shape[0] == 0:
print("【提示】清洗完成后,没有任何有效数据,停止生成报表")
return
df_clean["销售额"] = df_clean["数量"] * df_clean["单价"]
df_salesman = df_clean.groupby("销售员", as_index=False)["销售额"].sum()
df_salesman = df_salesman.sort_values("销售额", ascending=False)
df_area = df_clean.groupby("地区", as_index=False)["销售额"].sum()
df_area = df_area.sort_values("销售额", ascending=False)
total_sum = df_clean["销售额"].sum()
df_total = pd.DataFrame([{"月度总销售额": total_sum}])
with pd.ExcelWriter(output_file, engine="openpyxl") as writer:
df_clean.to_excel(writer, sheet_name="明细清洗后", index=False)
df_salesman.to_excel(writer, sheet_name="按销售员", index=False)
df_area.to_excel(writer, sheet_name="按地区", index=False)
df_total.to_excel(writer, sheet_name="总览", index=False)
print(f"✅报表生成成功!输出文件:{output_file}")
print(f"清洗后有效行数:{df_clean.shape[0]},月度总销售额:{total_sum:.2f}")
if __name__ == "__main__":
main()
generate_test.py
import pandas as pd
data = [
{"日期":"2026‑09‑01","销售员":"张三","产品":"A产品","数量":10,"单价":20,"地区":"广西"},
{"日期":"2026‑09‑01","销售员":"李四","产品":"B产品","数量":-5,"单价":15,"地区":"广东"},
{"日期":"2026‑09‑02","销售员":"张三","产品":"A产品","数量":8,"单价":20,"地区":"广西"},
{"日期":"2026‑09‑02","销售员":"王五","产品":"C产品","数量":0,"单价":30,"地区":"湖南"},
{"日期":"2026‑09‑03","销售员":"李四","产品":"B产品","数量":7,"单价":15,"地区":"广东"},
{"日期":None,"销售员":"张三","产品":"A产品","数量":6,"单价":20,"地区":"广西"},
]
df = pd.DataFrame(data)
df.to_excel("sales_raw.xlsx",index=False)
print("模拟文件 sales_raw.xlsx 生成完毕!")
README.md
# Excel报表生成脚本
## 环境依赖
python >=3.10
pip install pandas openpyxl
## 运行步骤
1. 运行 generate_test.py 生成测试数据sales_raw.xlsx
2. 运行 main.py,同目录输出report.xlsx
3. report.xlsx包含4个工作表:明细清洗后、按销售员、按地区、总览
## 异常场景
- 文件不存在:打印错误直接退出
- 字段缺失:打印字段缺失提示
- 清洗后无有效数据:提示,不输出报表
- 不会修改原始sales_raw.xlsx文件
3.测试用例
用例1:正常业务用例
输入:模拟 sales_raw.xlsx ,共6行,包含各类脏数据。
预期结果:过滤脏数据,保留3条有效记录,成功生成report.xlsx,月度总销售额465.00。
实际运行结果:控制台输出 清洗后有效行数:3,月度总销售额:465.00 ,4张工作表全部生成。
用例2:边界异常用例1 — 原始文件不存在
操作:删除 sales_raw.xlsx ,直接运行main.py。
预期输出: 【错误】找不到原始文件:sales_raw.xlsx ,程序结束,不会生成输出文件。
用例3:边界异常用例2 — 清洗后全部数据无效
构造条件:表格全部记录的数量字段全部小于等于0。
预期输出: 【提示】清洗完成后,没有任何有效数据,停止生成报表 ,不生成report.xlsx。
4 .AI协作过程记录
关键对话摘要
1. 初期编写代码遇到库缺失报错 ModuleNotFoundError: No module named 'pandas' ,电脑同时存在两套Python环境,Anaconda自带pandas但是无法正常启动,官方Python3.13缺少第三方库。
2. 使用pip命令为Python3.13安装pandas、openpyxl,解决库依赖问题。
3. 编码过程出现中文全角标点,引发语法报错,统一全部修改为英文半角符号。
4. 运行时报找不到 sales_raw.xlsx ,因缺少考题原始样例文件,编写脚本自动生成携带脏数据的模拟测试Excel。
5. 反复对照考题需求,完善数据清洗规则、分组统计逻辑、4个工作表输出,补充各类异常捕获逻辑,保证原始文件不会被修改。
代码核心修改变更
1. 增加try‑except异常捕获,处理文件不存在、文件读取异常、表格字段缺失校验。
2. 使用 df_raw.copy() 复制副本,保护原始数据不被程序改动。
3. 实现完整清洗逻辑:关键字段空值删除、过滤数量>0、全字段去重。
4. 增加groupby分组,分别按销售员、地区做销售额汇总,计算月度总金额。
5. 使用ExcelWriter一次性输出4个工作表到report.xlsx。
6. 增加控制台打印,输出面向用户的中文可读提示。
5 .复盘
大部分代码框架、第三方库API调用、异常处理模板交由AI完成。我人工核对业务逻辑,逐条对照考题校验清洗规则:空行删除、数量≤0过滤、全字段去重。文件缺失、字段缺失、清洗后无有效数据等边界场景,由我对照验收标准人工确认,校验异常提示信息可读性。
人工审查AI生成代码的缩进、标点符号、文件路径风险;模拟测试数据由AI生成,我手动核对输出报表,手工验算统计结果,确认4张工作表完整输出,确认原始输入文件不会被改写。