dify可通过安装文档提取器和echarts插件,结合文档提取器(启用表格结构识别、保留行列信息、自动检测多工作表)、llm节点(输出json统计指令)、参数提取器(解析分组/聚合/交叉配置)及自定义代码节点(内置pandas执行交叉统计),全自动完成excel多维分析。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify自动解析用户上传的Excel文件,识别多个维度字段(如地区、时间、产品类别、销售额),执行分组聚合、行列交叉、同比环比等统计运算,并输出结构化结果——整个过程不依赖人工写SQL或Python脚本,也不需要切换到外部工具。
安装并启用核心插件
登录Dify控制台,进入项目编辑页,点击左侧「插件市场」→ 搜索“文档提取器”并安装 → 再搜索“ECharts图表生成工具”并安装。【必须安装文档提取器,否则后续所有统计节点无法获取原始表格结构】
返回画布,确认左侧组件面板中已出现“文档提取器”和“参数提取器”两个分类。若未显示,请刷新页面后重试。
配置文档提取器以保留多维语义
在Chatflow画布中添加“文档提取器”节点,将其拖拽至开始节点正下方。
选中该节点,在右侧配置面板中勾选「启用表格结构识别」和「保留原始行列信息」;同时开启「自动检测多工作表」选项——Dify会为每个Sheet生成独立数据流,便于后续按业务模块分别统计。
这一步决定模型能否区分“北京-2024Q1-手机-销售额=120万”这样的四维组合。若未开启结构识别,所有单元格将被扁平拼接成纯文本,维度关系彻底丢失,交叉统计必然失败。
构建多维统计工作流主干
按顺序添加以下节点:开始节点 → 文档提取器 → LLM节点 → 参数提取器 → 自定义代码节点 → 回复节点。
注意:LLM节点必须接收文档提取器的content输出,且需在User Prompt中明确要求输出JSON格式的统计指令,例如:“请根据表格内容,按‘城市’和‘月份’两个维度交叉汇总‘销售额’与‘订单量’,计算每个单元格的合计值,并以JSON数组形式返回,字段名必须为city、month、sales_sum、order_count。”
参数提取器需配置三个输出变量:group_fields(字符串数组,如["city","month"])、agg_fields(对象,如{"sales_sum":"sum","order_count":"count"})、pivot_config(布尔值,true表示需转置为行列交叉表)。
用自定义代码节点执行交叉统计
方法一:使用内置pandas逻辑(推荐初学者)
本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。感兴趣的朋友可以过来看看
在自定义代码节点中粘贴以下Python脚本:
import pandas as pd<br>import json<br><br>def main(content, group_fields, agg_fields, pivot_config):<br> df = pd.DataFrame(content)<br> if not group_fields or len(group_fields) return {"error": "至少需指定2个分组字段"}<br> agg_dict = {k: v for k, v in agg_fields.items() if k in df.columns}<br> result = df.groupby(group_fields).agg(agg_dict).reset_index()<br> if pivot_config:<br> # 将第二分组字段转为列头,实现交叉表<br> pivot_col = group_fields[1]<br> index_cols = [c for c in group_fields if c != pivot_col]<br> result = result.pivot_table(<br> index=index_cols,<br> columns=pivot_col,<br> values=list(agg_dict.keys()),<br> aggfunc='first'<br> ).reset_index()<br> return {"data": result.to_dict('records')}
方法二:手动构造交叉表(适合需控制小数位/空值填充场景)
替换上述脚本中pivot部分为:
if pivot_config:<br> result = pd.crosstab(<br> df[group_fields[0]],<br> df[group_fields[1]],<br> values=df[list(agg_dict.keys())[0]],<br> aggfunc=list(agg_dict.values())[0],<br> margins=True<br> )
⚠️注意:若原始Excel含合并单元格,Dify预处理阶段已自动展开填充,无需额外处理;但若用户上传的是.xls旧格式,需提醒其转存为.xlsx再上传,否则openpyxl可能读取异常。
连接并验证多维统计输出
第一步:将参数提取器的group_fields、agg_fields、pivot_config三个变量,全部映射为自定义代码节点的输入参数。
第二步:将自定义代码节点的data输出字段,连接至回复节点的响应体(Response Body)。
第三步:上传一份含“省份”“季度”“产品线”“销量”“成本”的Excel样例,输入自然语言查询:“按省份和产品线交叉统计销量总和与成本均值”,运行测试。
此时回复内容应为标准JSON数组,每项包含province、product_line、sales_sum、cost_mean四个字段;若启用了pivot_config,还会看到嵌套结构如{"华东":{"手机":1250,"电脑":890}}。










