Dify可通过文件上传→表格解析→Python计算→LLM解读四步自动分析Excel财务报表:支持识别“营业收入”“净利润”等关键指标,计算同比变动率,并生成专业中文报告,全程无需外部API或SQL。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify自动读取Excel格式的财务报表(如资产负债表、利润表),识别关键指标,计算同比/环比变化,并生成自然语言解读报告——这个工作流必须支持上传文件、结构化解析、逻辑判断和中文输出,不能依赖外部API调用或手动编写SQL。
准备财务报表数据源
将原始财务报表保存为标准Excel文件(.xlsx),确保第一行为字段名,且包含“项目”“2023年期末余额”“2024年期末余额”两列以上时间维度;【项目列必须唯一且不含合并单元格】,否则Dify的表格解析器会跳过整行数据。
把文件命名为“财务报表_2024Q3.xlsx”,避免中文空格或特殊符号,Dify上传时对文件名长度和编码敏感,超长或含“&”“#”会导致解析失败。
创建Dify工作流并配置文件输入节点
登录Dify控制台→左侧导航栏点击「Workflow」→右上角「+ New Workflow」→选择「Blank Workflow」。
在画布空白处双击,添加「File Upload」节点;在该节点设置中,勾选「Allow multiple files」关闭,只允许单文件上传;将「File type restriction」设为「xlsx, xls」,其他类型一律拦截。
这一步不能跳过:点击节点右下角「⋯」→「Rename」,改名为「财报原始文件」,后续所有节点引用都依赖此名称,重命名后无法通过拖拽自动关联变量。
用Table Extract节点结构化提取数据
从左侧组件栏拖入「Table Extract」节点,连接到「财报原始文件」的输出端口。
在Table Extract配置中,「Sheet name」留空(自动读取第一个sheet);「Header row index」填0;关键设置是「Column mapping」:手动将第1列映射为“item”,第2列映射为“value_2023”,第3列映射为“value_2024”——映射错误会导致后续计算全盘错乱。
Qwen 视频智能分析基础客户端(免费版),基于 Qwen 3.5 Plus 多模态模型对本地视频进行内容分析,支持场景描述与基础内容理解,采用默认抽帧频率和提示词,适合快速概览视频,API Key 读取自 ~/.skill-platform/skill-platform.json 的 skills 配置。
如果Excel中存在“应收账款净额”“应收账款”“应收账款—坏账准备”等多行同类项,Dify默认按行逐条提取,不会自动合并。你必须提前在Excel里完成归并,否则解读逻辑将基于碎片数据运行。
编写Python代码节点完成指标计算与逻辑判断
拖入「Code」节点,连接Table Extract输出;语言选「Python 3.11」;粘贴以下代码:
```python
import pandas as pd
import json
# 获取结构化表格数据
df = pd.DataFrame(inputs['table_data'])
# 提取关键项目数值
try:
revenue_2024 = float(df[df['item'].str.contains('营业收入')]['value_2024'].iloc[0])
revenue_2023 = float(df[df['item'].str.contains('营业收入')]['value_2023'].iloc[0])
profit_2024 = float(df[df['item'].str.contains('净利润')]['value_2024'].iloc[0])
profit_2023 = float(df[df['item'].str.contains('净利润')]['value_2023'].iloc[0])
except (ValueError, IndexError):
raise ValueError("关键项目未找到或数值格式异常")
# 计算变动率
revenue_change = round((revenue_2024 - revenue_2023) / revenue_2023 * 100, 2) if revenue_2023 != 0 else 0
profit_change = round((profit_2024 - profit_2023) / profit_2023 * 100, 2) if profit_2023 != 0 else 0
# 生成解读标签
revenue_trend = "增长" if revenue_change > 0 else "下降"
profit_trend = "增长" if profit_change > 0 else "下降"
# 输出结构化结果
outputs = {
"revenue_2024": revenue_2024,
"revenue_2023": revenue_2023,
"revenue_change_pct": revenue_change,
"revenue_trend": revenue_trend,
"profit_2024": profit_2024,
"profit_2023": profit_2023,
"profit_change_pct": profit_change,
"profit_trend": profit_trend
}
```
【代码中所有中文匹配词(如“营业收入”)必须与Excel中实际项目名称完全一致,包括括号、空格、破折号】,哪怕差一个全角字符,iloc[0]就会报IndexError导致整个工作流中断。
配置LLM节点生成自然语言解读报告
拖入「LLM」节点,连接Code节点输出;模型选「Qwen2.5-72B-Instruct」或平台当前可用最强中文模型;温度值设为0.3,避免生成过度发散的结论。
在System Prompt中输入:
“你是一位资深财务分析师,仅根据提供的结构化财报指标生成专业、简洁、无歧义的中文解读,不编造未提供的数据,不使用‘可能’‘大概’等模糊表述。”
User Prompt填写:
“营业收入2024年为{{code.outputs.revenue_2024}}万元,较2023年{{code.outputs.revenue_trend}}{{code.outputs.revenue_change_pct}}%;净利润2024年为{{code.outputs.profit_2024}}万元,较2023年{{code.outputs.profit_trend}}{{code.outputs.profit_change_pct}}%。请用一段话说明经营表现,并指出需关注的风险点。”
这一步决定输出质量:User Prompt里的变量必须严格按{{code.outputs.xxx}}格式书写,漏掉任何一对花括号,LLM将收到空字符串并胡编乱造。

















