新闻详情

新闻详情

首页 / 资讯中心 / 详情

Excel 报表生成脚本

发布时间:2026/10/1 16:06:21来源:尧图网络
Excel 报表生成脚本
背景某团队每月有一份 sales_raw.xlsx字段为 日期、销售员、产品、数量、单价、地区存在空值、重复行与负数量等脏数据。需求编写 Python 脚本读取原始表完成清洗与统计输出 report.xlsx。要求1. 数据清洗删除关键字段缺失的行剔除数量0 的异常行按全字段去重2. 统计维度按销售员汇总销售额数量×单价按地区汇总销售额并给出月度总额3. 输出 report.xlsx含明细清洗后按销售员按地区总览四个工作表4. 约束不得修改原始文件对缺失字段、空文件、无有效数据等情况需给出明确报错或提示。验收标准给定样例数据能一键运行生成正确报表统计数值与人工核对一致异常输入不崩溃且有可读提示。可运行的源代码如下import sys import pandas as pd # 关键字段清洗时以这些字段是否缺失为准 KEY_FIELDS [日期, 销售员, 产品, 数量, 单价, 地区] # 数值字段统计时使用 QTY_COL, PRICE_COL 数量, 单价 # ----------------------------- 异常处理 --------------------------------- class ReportError(Exception): 业务层面的可读错误捕获后打印友好提示并以非零码退出。 def fatal(msg: str): 打印可读错误并终止程序避免让未捕获异常抛给用户。 print(f[错误] {msg}, filesys.stderr) sys.exit(1) # ----------------------------- 第一步读取 ----------------------------- def load_data(path: str) - pd.DataFrame: 读取 Excel处理文件缺失、无法解析、空表三种情况。 try: df pd.read_excel(path) except FileNotFoundError: raise ReportError(f找不到原始文件{path}请确认文件存在后再运行。) except Exception as e: raise ReportError(f读取文件 {path} 失败请确认为有效的 .xlsx 文件。详细信息{e}) if df is None or df.empty: raise ReportError(f文件 {path} 为空没有任何数据行无法生成报表。) return df # ----------------------------- 第二步字段校验 -------------------------- def validate_columns(df: pd.DataFrame) - None: 检查关键字段是否齐全缺失即报错并列出缺哪些字段。 missing [c for c in KEY_FIELDS if c not in df.columns] if missing: raise ReportError( f原始文件缺少关键字段{missing}。\n f需要包含的字段为{KEY_FIELDS}请核对表头。 ) # ----------------------------- 第三步清洗 ------------------------------ def clean_data(df: pd.DataFrame): 按顺序清洗 1) 删除关键字段缺失的行dropna 2) 剔除数量 0 的异常行保留 数量 0 3) 按全部字段去重保留第一次出现。 返回清洗后的 DataFrame 以及每步的样本数便于核对与提示。 n_raw len(df) df_clean df.dropna(subsetKEY_FIELDS) # ① 关键字段缺失 n_after_missing len(df_clean) # ② 数量0先转为数值无法转换的也视为异常行剔除 df_clean df_clean[pd.to_numeric(df_clean[QTY_COL], errorscoerce) 0] n_after_qty len(df_clean) # ③ 全字段去重 df_clean df_clean.drop_duplicates() n_final len(df_clean) # 把数量/单价转成数值为统计做准备 df_clean[QTY_COL] pd.to_numeric(df_clean[QTY_COL], errorscoerce) df_clean[PRICE_COL] pd.to_numeric(df_clean[PRICE_COL], errorscoerce) return df_clean, (n_raw, n_after_missing, n_after_qty, n_final) # ----------------------------- 第四步统计 ------------------------------ def compute_stats(df_clean: pd.DataFrame): 计算 销售额数量×单价按销售员、按地区汇总并给出月度总额。 df_clean df_clean.copy() df_clean[销售额] df_clean[QTY_COL] * df_clean[PRICE_COL] by_salesman ( df_clean.groupby(销售员, as_indexFalse)[销售额] .sum().rename(columns{销售额: 销售额}) .sort_values(销售额, ascendingFalse) ) by_region ( df_clean.groupby(地区, as_indexFalse)[销售额] .sum().sort_values(销售额, ascendingFalse) ) total float(df_clean[销售额].sum()) return df_clean, by_salesman, by_region, total # ----------------------------- 第五步写出 ------------------------------ def write_report(path: str, df_clean, by_salesman, by_region, total, counts) - None: 写出含四个工作表的 report.xlsx。 # 总览月度总额 清洗统计说明 overview pd.DataFrame({ 项目: [ 月度销售总额元, 原始数据行数, 删除缺失关键字段后行数, 剔除数量0 后行数, 全字段去重后行数, 最终有效明细行数, ], 数值: [ round(total, 2), counts[0], counts[1], counts[2], counts[3], counts[3], ], }) with pd.ExcelWriter(path, engineopenpyxl) as writer: df_clean.to_excel(writer, sheet_name明细清洗后, indexFalse) by_salesman.to_excel(writer, sheet_name按销售员, indexFalse) by_region.to_excel(writer, sheet_name按地区, indexFalse) overview.to_excel(writer, sheet_name总览, indexFalse) print(f[完成] 报表已生成{path}) # ----------------------------- 主流程 ------------------------------------ def main(): in_path sys.argv[1] if len(sys.argv) 1 else sales_raw.xlsx out_path sys.argv[2] if len(sys.argv) 2 else report.xlsx try: df load_data(in_path) # 读取 空文件检查 validate_columns(df) # 缺字段检查 df_clean, counts clean_data(df) # 清洗 if len(df_clean) 0: raise ReportError( 清洗后没有任何有效数据可能全部行都缺失字段、数量0 或重复无法统计请检查原始数据。 ) df_clean, by_salesman, by_region, total compute_stats(df_clean) write_report(out_path, df_clean, by_salesman, by_region, total, counts) # 控制台打印核对信息 print(f[提示] 清洗前 {counts[0]} 行 → 清洗后 {counts[3]} 行 f缺失剔除 {counts[0]-counts[1]}数量剔除 {counts[1]-counts[2]} f去重剔除 {counts[2]-counts[3]}) print(f[提示] 月度销售总额{total:.2f} 元) except ReportError as e: fatal(str(e)) except Exception as e: # 兜底其它未预期错误也给出可读提示不崩溃 fatal(f发生未预期的错误{e}) if __name__ __main__: main()测试用例截图运行结果截图ai协助过程记录首先我先让ai生成可执行的代码然后我再检查并且运行以确保代码是可运行的接下来接让ai给我包含脏数据的表格并且快速建立表格运行还是有问题使用ai协助我运行怎样打开新建的表的路径复盘首先由我拍板的有整体的代码结构约束条件该使用哪一个py软件运行如何运行等问题接下来由ai拍板的有源代码的撰写还有包含脏数据的表格的数据生成以及创建。解决问题的过程中首先遇到·的就是表格的创建为了快速的创建表格我使用ai给我代码快速生成包含脏数据的表格其次就是代码的运行必须要在命令提示符中进入到建立的表格的文件路径的文件夹中否则就找不到文件运行不成功。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

能提升曝光量的AI搜索排名优化服务商推荐实力公司推荐 2026/10/1 16:52:18

能提升曝光量的AI搜索排名优化服务商推荐实力公司推荐

在流量成本日益高企的今天,企业主们都在寻找一个能精准触达客户、同时兼顾成本与效果的营销新入口。AI搜索的崛起,正在重塑用户获取信息的方式,也为企业带来了全新的曝光机遇。如何让品牌在豆包、DeepSeek、文心一言等主流AI平台的回答中优先…

阅读更多 →
5步打造你的个人商业模式:一人企业方法论完全指南 2026/10/1 16:52:18

5步打造你的个人商业模式:一人企业方法论完全指南

5步打造你的个人商业模式:一人企业方法论完全指南 想要建立属于自己的事业,却不知道从何开始?一人企业方法论为你提供了一套完整的解决方案,让你用最小的投入获得最大的回报。无论你是想做自媒体、电商还是数字商品,这…

阅读更多 →
AI Native架构实战:从零搭建LLM网关与Agent编排系统 2026/10/1 16:52:18

AI Native架构实战:从零搭建LLM网关与Agent编排系统

1. 为什么现在必须重新思考系统架构 过去两年我参与过三个从零起步的 AI 项目,也接手过两个“传统系统加个 LLM 接口”的改造项目。这两类项目的结局差异非常大:前者上线三个月后迭代速度依然很快,后者则在第四个月开始陷入“改一个 Prompt 崩…

阅读更多 →
飞秒激光辅助白内障手术:LENSX系统核心参数与临床实践指南 2026/10/1 16:52:11

飞秒激光辅助白内障手术:LENSX系统核心参数与临床实践指南

白内障手术这几年发展特别快,从超声乳化到如今的激光辅助,技术迭代的节奏远超很多人的想象。爱尔康 LENSX LASER SYSTEM( LensX 激光系统)就是其中很有代表性的一套设备,它把飞秒激光真正带进了白内障手术的日常流程里…

阅读更多 →
AgentStore:像 App Store 一样动态集成异构 Agent——AgentToken 驱动的可扩展通用计算机助手框架 2026/10/1 16:52:04

AgentStore:像 App Store 一样动态集成异构 Agent——AgentToken 驱动的可扩展通用计算机助手框架

文档教程大模型 【免费下载链接】Foundations-of-LLMs A book for Learning the Foundations of LLMs 项目地址: https://gitcode.com/GitHub_Trending/fo/Foundations-of-LLMs 点击查看 免费下载 本篇文章基于浙大 Daily 实验室开源仓库(Foundations-o…

阅读更多 →
mdBook 二次开发指南:构建流水线、库模式集成与 Preprocessor/Backend 插件机制 2026/10/1 16:52:04

mdBook 二次开发指南:构建流水线、库模式集成与 Preprocessor/Backend 插件机制

开发工具文档 【免费下载链接】mdBook Create book from markdown files. Like Gitbook but implemented in Rust 项目地址: https://gitcode.com/gh_mirrors/md/mdBook 点击查看 免费下载 mdBook 虽然主要作为命令行工具使用,但它的可扩展性并不止于 m…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉