Python 实现 Excel 多表汇总数据来源追溯分析工具 如下内容包括问题背景解决思路完整 Python 实现HTML 可视化报告使用效果总结同时对业务数据进行了脱敏原始地区名称 →明细表01、明细表02原始指标 →统计指标原始文件 →汇总统计表.xlsx示例数字仅用于说明Python 实现 Excel 多表汇总数据来源追溯分析工具1. 背景在实际数据统计工作中经常会遇到这样的 Excel 场景一个汇总表多个结构完全一致的明细表汇总表通过公式自动计算需要定期审核汇总结果。例如汇总统计.xlsx ├── 汇总表 ├── 明细表01 ├── 明细表02 ├── 明细表03 ├── ... └── 明细表N汇总表中的公式SUM(明细表01:明细表N!C12:C12)表示汇总 C12 单元格的数据来自明细表01到明细表N中的 C12。公式本身没有问题但是审核时会遇到一个实际问题汇总结果 43到底来自哪些明细表每个明细表贡献多少例如汇总表C12 43希望得到来源表贡献值明细表0130明细表027明细表032明细表042明细表051明细表061最终3072211 432. 传统人工方式存在的问题通常人工处理打开汇总表查看公式找到来源 Sheet一个个打开分表查看对应单元格。当数据规模较小时可以接受。但是如果50 个分表20 多列指标几百个统计单元格人工核查效率非常低。同时容易出现漏看某个来源计算错误无法快速定位异常。3. 解决方案本文利用 Python 自动完成Excel汇总表 ↓ 解析SUM三维公式 ↓ 定位来源工作表范围 ↓ 读取来源单元格 ↓ 计算贡献值 ↓ 生成追溯报告最终生成1Excel明细报告用于数据保存。2HTML交互报告用于人工查看。效果汇总 C12 结果43 来源 明细表01 30 ███████████ 明细表02 7 ███ 明细表03 2 █ 状态 √ 校验一致4. 环境准备Python版本Python 3.x安装依赖pipinstallopenpyxl5. Python完整实现5.1 功能说明代码实现自动读取 Excel支持 C-Z 列扫描自动解析 SUM公式自动定位来源Sheet自动计算贡献值自动生成HTML报告。5.2 完整代码importopenpyxlimportreimportjsonfromopenpyxl.utilsimportget_column_letter# # 文件配置# input_file汇总统计表.xlsxoutput_html数据来源追溯分析.htmlsummary_sheet汇总表# # 读取Excel# # 读取公式wb_formulaopenpyxl.load_workbook(input_file,data_onlyFalse)# 读取结果wb_valueopenpyxl.load_workbook(input_file,data_onlyTrue)ws_formulawb_formula[summary_sheet]ws_valuewb_value[summary_sheet]# # 数值处理# defto_number(value):ifvalueisNone:return0ifisinstance(value,(int,float)):returnvalue valuestr(value).strip()ifvaluein[,-,—,无]:return0try:returnfloat(value)except:return0# # 获取Sheet范围# defget_sheet_range(start,end):sheetswb_formula.sheetnames start_indexsheets.index(start)end_indexsheets.index(end)returnsheets[start_index:end_index1]# # 解析SUM公式# defparse_formula(formula):pattern(rSUM\((.):(.)!r(\$?[A-Z]\$?\d))resultre.search(pattern,formula)ifresult:return{start:result.group(1),end:result.group(2),cell:result.group(3).replace($,)}returnNone# # 分析数据# trace_data{}# C-Z列forcolinrange(3,27):col_nameget_column_letter(col)trace_data[col_name][]forrowinrange(1,ws_formula.max_row1):addressf{col_name}{row}formulaws_formula[address].valueifnot(isinstance(formula,str)andSUM(informula):continueinfoparse_formula(formula)ifnotinfo:continuesheetsget_sheet_range(info[start],info[end])totalto_number(ws_value[address].value)sources[]source_total0forsheetinsheets:valueto_number(wb_value[sheet][info[cell]].value)ifvalue!0:source_totalvalue sources.append({name:sheet,value:value})# 按贡献排序sources.sort(keylambdax:x[value],reverseTrue)trace_data[col_name].append({cell:address,total:total,status:一致iftotalsource_totalelse异常,sources:sources})# # 生成HTML# json_datajson.dumps(trace_data,ensure_asciiFalse)html html head meta charsetutf-8 title 数据来源追溯分析 /title style body{ font-family: Microsoft YaHei; background:#f5f5f5; padding:20px; } .card{ background:white; padding:20px; margin:15px; border-radius:10px; } button{ padding:8px; margin:5px; } .bar{ height:15px; background:#4caf50; } .ok{ color:green; } /style /head body h2 Excel数据来源追溯分析 /h2 div idbuttons/div div idcontent/div script let DATA DATA_PLACEHOLDER; let btn; Object.keys(DATA) .forEach(function(col){ btn button onclick\show( col )\ col 列/button; }); document .getElementById(buttons) .innerHTMLbtn; function show(col){ let html; DATA[col] .forEach(function(item){ html div classcard h3 ${item.cell} 汇总 ${item.total} /h3 状态 span classok ${item.status} /span hr ; item.sources.forEach(function(s){ let width s.value/item.total*300; html div ${s.name} : ${s.value} div classbar stylewidth:${width}px /div /div br ; }); html/div; }); document .getElementById(content) .innerHTMLhtml; } show(C); /script /body /html htmlhtml.replace(DATA_PLACEHOLDER,json_data)withopen(output_html,w,encodingutf-8)asf:f.write(html)print(生成完成:,output_html)6. 运行效果运行python trace_excel.py生成数据来源追溯分析.html打开后顶部C列 D列 E列 …… Z列选择 C列显示C12 汇总值43 来源 明细表01 30 明细表02 7 明细表03 2 状态 一致7. 工具优势7.1 从黑盒统计变透明追溯以前汇总值43不知道来源。现在43 ↓ 明细表01 30 明细表02 7 明细表03 2 ...7.2 自动发现异常例如汇总值 50 来源合计 48自动状态异常7.3 支持大规模数据审核适用于多部门报表多地区统计财务汇总项目数据汇总年度统计审核。8. 注意事项数据脱敏本文工作表名称指标名称数值示例均为虚构数据。实际使用时只需要替换input_file summary_sheet即可应用于自己的 Excel 文件。9. 总结通过 Python openpyxl对 Excel 三维 SUM 引用进行解析可以建立完整的数据来源链汇总数据 ↓ 来源工作表 ↓ 来源单元格 ↓ 贡献值 ↓ 一致性校验 ↓ 可视化展示将传统 Excel 中难以追踪的数据关系转换为清晰的数据审计视图。对于任何多个结构一致 Excel → 一个汇总 Excel的业务场景都可以快速实现自动化核查。