Skip to content

cloud666666666/ExcelMind

 
 

Repository files navigation

📊 ExcelMind - Excel 数据智能分析助手

基于 LangGraph 的智能化 Excel 数据分析工具,让自然语言成为你的数据分析利器!

📋 项目简介

ExcelMind 是一个专为 Excel 数据分析设计的 AI 助手,能够理解自然语言并智能分析数据。支持多轮对话、流式输出、ECharts 图表可视化和完整的思考过程展示,让数据分析变得简单直观。

🔱 Fork 声明:本项目基于 Gen-Future/ExcelMind 进行二次开发,新增了 Claude 系列模型原生适配模型调用失败的容错降级机制v2.0 写入能力 以及 CSV 文件支持

Python License FastAPI LangChain

🎬 演示视频

ExcelMind 演示视频 本地视频

视频展示了 ExcelMind 的核心功能:自然语言查询、智能联表、知识库检索等

🖼️ 效果展示

前端界面

数据分析 图表生成 数据写入
示例1 示例2 示例3

后端控制台

Agent 调用过程 工具执行日志
后端1 后端2

示例文件

✨ 主要功能

🎯 核心功能

  • 自然语言查询 - 用中文直接提问,无需编写代码或公式
  • 多轮对话 - 支持上下文关联的连续追问(如"和上个月相比呢?")
  • 流式输出 - 实时显示 AI 思考过程和回答,响应更流畅
  • 智能工具调用 - 自动选择合适的数据分析工具,展示完整推理链路

🛠️ 数据分析工具

  • 数据筛选 - 多条件筛选、排序、指定返回列
  • 聚合统计 - 支持先筛选再聚合
  • 分组聚合 - 灵活的分组统计功能
  • 关键词搜索 - 可限制搜索范围
  • 列统计 - 支持筛选后统计
  • 唯一值获取 - 支持筛选后获取
  • 数据预览 - 快速查看数据结构
  • 工作表切换 - 在多 Sheet 文件中自由切换
  • 时间获取 - 处理相对时间查询
  • 数学计算 - 批量精确计算
  • 图表生成 - ECharts 可视化,AI 自动推荐图表类型

✏️ 数据写入工具 (v2.0 新增)

  • 单元格写入 - 写入单个单元格的值
  • 批量写入 - 写入指定范围的数据
  • 公式写入 - 写入 Excel 公式(如 =SUM(A1:A10)
  • 公式读取 - 读取单元格的公式
  • 行操作 - 插入、删除行
  • 文件保存 - 保存到副本或原始文件
  • 文件导出 - 导出到指定位置或浏览器下载

🎨 格式化工具 (v2.0 新增)

  • 字体设置 - 字体名称、大小、加粗、斜体、颜色
  • 背景填充 - 单元格背景色设置
  • 对齐方式 - 水平/垂直对齐、自动换行
  • 边框设置 - 边框样式、颜色
  • 数字格式 - 千分位、百分比、日期、货币等
  • 合并单元格 - 合并/取消合并单元格
  • 行高列宽 - 设置行高、列宽、自动调整

🔧 高级特性

  • 多表协同 - 同时管理多个 Excel 表格,支持智能联表
  • CSV 支持 - 完整支持 CSV 文件的加载、分析和导出
  • 本地知识库 - 基于 Chroma 向量数据库的私有知识存储
  • 双主题模式 - 亮色/暗色主题一键切换
  • 意图过滤 - 自动拒绝与数据无关的闲聊
  • 双引擎架构 - pandas(分析)+ openpyxl(写入),各司其职
  • 文件下载 - 浏览器下载修改后的文件,不影响原始文件

📁 文件结构

ExcelMind/
├── config.yaml              # 配置文件(需从 config.example.yaml 复制)
├── config.example.yaml      # 配置文件模板
├── pyproject.toml           # 项目依赖
├── README.md                # 使用说明
├── LICENSE                  # MIT许可证
├── knowledge/               # 知识库文件目录
│   └── *.md                 # Markdown 格式知识文件
├── .vector_db/              # Chroma 向量数据库(自动生成)
├── docs/                    # 文档目录
│   ├── card.png             # 社区交流名片
│   └── BLUEPRINT_v2.md      # v2.0 技术蓝图
└── src/
    └── excel_agent/
        ├── __init__.py
        ├── main.py          # 程序入口
        ├── api.py           # FastAPI 接口
        ├── config.py        # 配置管理
        ├── excel_loader.py  # Excel 加载器(多表管理)
        ├── excel_document.py # Excel 文档类(双引擎)
        ├── knowledge_base.py # 知识库管理
        ├── skill_manager.py  # 技能管理器
        ├── skills.py         # 内置技能定义
        ├── stream.py        # 流式对话核心
        ├── tools.py         # 数据分析工具(含写入和格式化)
        └── frontend/
            └── index.html   # Web 界面

🚀 快速开始

系统要求

  • Python版本:3.11+
  • 包管理器uv(推荐)或 pip
  • API Key:OpenAI 兼容的 API Key

安装步骤

  1. 克隆项目

    git clone https://github.com/cloud666666666/ExcelMind.git
    cd ExcelMind
  2. 安装依赖

    # 使用 uv(推荐)
    uv sync
    
    # 或使用 pip
    pip install -e .
  3. 配置文件

    # 复制配置模板
    cp config.example.yaml config.yaml
    
    # 编辑配置文件,填入 API Key
  4. 启动服务

    # Web 服务模式(推荐)
    uv run python -m excel_agent.main serve
    
    # 命令行模式
    uv run python -m excel_agent.main cli --excel your_file.xlsx
  5. 开始使用: 打开浏览器访问 http://localhost:8000

⚙️ 配置说明

配置文件模板

model:
  # 当前使用的提供商
  active: "self_hosted"

  # 各提供商配置
  providers:
    self_hosted:
      provider: "anthropic"
      model_name: "claude-3-5-haiku-20241022"
      api_key: "your-api-key"
      base_url: "https://your-api-endpoint"
      temperature: 0.1
      max_tokens: 8192
      fallback_models:
        - "gemini-2.5-pro"

excel:
  max_preview_rows: 200
  default_result_limit: 200
  max_result_limit: 1000

server:
  host: "127.0.0.1"
  port: 8000

环境变量

也可使用环境变量配置:

export OPENAI_API_KEY="your-api-key"
export OPENAI_BASE_URL="your-api-base-url"

配置参数说明

参数 说明 示例
active 使用的模型提供商 self_hosted
model_name 模型名称 claude-3-5-haiku-20241022
api_key API 密钥 sk-xxx
base_url API 端点(可选) https://api.openai.com/v1
temperature 温度参数 0.1
max_tokens 最大 token 数 8192
fallback_models 降级模型列表 ["gemini-2.5-pro"]

🎮 使用指南

1. 上传文件

  • 拖拽 Excel 或 CSV 文件到页面
  • 或点击上传区域选择文件
  • 支持 .xlsx.xls.xlsm.csv 格式
  • 支持同时上传多个文件

2. 开始对话

在聊天框输入自然语言问题,例如:

  • "这个表有多少行数据?"
  • "按分公司统计销售总额"
  • "帮我画个饼图展示各部门占比"
  • "2024年11月的数据明细"

3. 数据修改 (v2.0 新增)

v2.0 支持通过自然语言修改 Excel 数据:

  • "把 A1 单元格写入 100"
  • "在 B1 写入求和公式 =SUM(A1:A10)"
  • "把标题行加粗"
  • "给表格添加边框"
  • "设置 A 列背景为黄色"

4. 下载文件

修改完成后,点击页面左侧的「下载文件」按钮,即可下载修改后的 Excel 文件。

注意:所有修改操作默认保存到工作副本,不会影响原始文件。

📡 API 接口

启动服务后访问 http://localhost:8000/docs 查看完整 Swagger 文档。

主要接口

接口 方法 描述
/ GET Web 界面
/upload POST 上传 Excel/CSV 文件
/load POST 通过路径加载 Excel/CSV
/chat/stream POST 流式对话(推荐)
/chat POST 非流式对话
/download GET 下载修改后的文件
/status GET 获取当前状态
/reset POST 重置 Agent

请求示例

# 上传 Excel 或 CSV
curl -X POST "http://localhost:8000/upload" \
  -F "file=@your_file.xlsx"   # 或 your_file.csv

# 流式对话
curl -X POST "http://localhost:8000/chat/stream" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "按部门统计销售额",
    "history": []
  }'

# 下载修改后的文件
curl -O "http://localhost:8000/download"

🔧 常见问题与解决方案

Q1: 程序无法启动

A: 环境问题

  • ✅ 确保 Python 版本 >= 3.11
  • ✅ 确保已正确安装依赖:uv syncpip install -e .
  • ✅ 确保 config.yaml 文件存在且配置正确

Q2: API 调用失败

A: 配置问题

  • ✅ 检查 api_key 是否正确
  • ✅ 检查 base_url 是否可访问
  • ✅ 检查网络代理设置

Q3: 文件上传失败

A: 文件问题

  • ✅ 确保文件格式为 .xlsx.xls.xlsm.csv
  • ✅ 检查文件是否损坏
  • ✅ 检查文件大小是否过大

Q4: 图表不显示

A: 浏览器问题

  • ✅ 使用现代浏览器(Chrome、Firefox、Edge)
  • ✅ 检查浏览器控制台是否有错误

Q5: 修改后的文件在哪里?

A: 下载文件

  • ✅ 点击页面左侧的「下载文件」按钮
  • ✅ 浏览器会自动下载修改后的 Excel 文件
  • ✅ 原始文件不会被修改

🐳 Docker 部署

FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install uv && uv sync
EXPOSE 8000
CMD ["uv", "run", "python", "-m", "excel_agent.main", "serve"]
docker build -t excel-mind .
docker run -p 8000:8000 -e OPENAI_API_KEY=your-key excel-mind

🛠️ 开发说明

技术栈

  • Python 3.11 - 主要开发语言
  • LangGraph - Agent 工作流框架
  • LangChain - LLM 应用框架
  • FastAPI - Web 服务框架
  • Pandas - 数据分析引擎
  • openpyxl - Excel 写入引擎
  • Chroma - 向量数据库
  • ECharts - 图表可视化

开发环境设置

# 安装开发依赖
uv sync --dev

# 运行测试
uv run pytest

# 代码格式化
uv run ruff format .

📝 更新日志

v2.1.0 (当前版本)

  • CSV 文件支持: 完整支持 CSV 文件的加载、分析和导出
    • 支持 .csv 格式文件上传和拖拽
    • CSV 文件自动转换为内部工作表处理
    • 支持导出为 CSV 或 Excel 格式

v2.0.0

  • 双引擎架构: pandas(分析)+ openpyxl(写入)
  • 写入能力: 单元格写入、批量写入、公式写入
  • 格式化工具: 字体、背景、边框、对齐、数字格式
  • 合并单元格: 合并/取消合并单元格
  • 行高列宽: 设置行高、列宽、自动调整
  • 文件下载: 浏览器下载修改后的文件
  • Skills 架构: 参考 Claude Code Skills 重构技能系统,支持模块化技能加载
  • 状态管理: processing/idle 状态事件

v1.3.0

  • ✅ 新增工作表切换功能(switch_sheet)
  • ✅ 修复 LangGraph 递归限制问题

v1.2.0

  • ✅ 新增 Anthropic 原生 API 支持
  • ✅ 新增降级模型(fallback_models)配置
  • ✅ 优化流式输出逻辑
  • ✅ 更新依赖版本

v1.1.0

  • ✅ 迁移到 LangChain ReAct Agent
  • ✅ 实现真正的流式输出
  • ✅ 添加可折叠思考过程
  • ✅ 修复工具描述和亮色模式 UI

v1.0.0

  • ✅ 基础 Excel 数据分析功能
  • ✅ 自然语言查询
  • ✅ 多轮对话支持
  • ✅ ECharts 图表可视化
  • ✅ 本地知识库

🤝 技术支持

如果遇到问题:

  1. 检查配置文件是否正确
  2. 查看控制台输出的错误信息
  3. 提交 Issue 到 GitHub 仓库

☕ 赞赏支持

如果这个项目对您有帮助,欢迎请作者喝杯咖啡☕

您的支持就是作者开发和维护项目的动力🚀

微信赞赏码

微信赞赏码

扫码支持开发者,您的每一份心意都是我们前进的动力!

📞 联系作者

💡 功能建议与合作需求

如果您有以下需求,欢迎联系作者:

  • 🚀 新功能建议 - 希望添加特定功能
  • 🤝 商业合作 - 定制开发需求
  • 🛠️ 技术支持 - 专业问题解答
  • 💼 项目合作 - 相关项目合作机会

📱 联系方式

微信号: wyh2353493891

添加微信时请备注:ExcelMind项目咨询

📄 免责声明

  • 本工具仅供学习和个人使用
  • 请勿将敏感数据上传至公网部署的服务
  • 作者不对因使用本工具导致的任何数据泄露负责
  • AI 分析结果仅供参考,请自行验证重要数据

📄 License

MIT License


📊 让数据分析变得简单!

💡 提示:首次使用建议查看演示视频,快速了解各项功能。

About

Excel智能分析助手,支持自然语言查询、ECharts 图表可视化、多表智能联查、知识库等,一站式解决Excel复杂分析问题

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 72.1%
  • HTML 27.9%