跳转至

ExcelPro - 高性能Excel文件处理系统

项目介绍

ExcelPro是一个基于Go语言开发的高性能Excel文件处理系统,专注于提供高效、可靠的Excel文件合并和拆分功能。

  • 高性能:使用Go语言开发,并发处理能力强,处理速度快
  • 功能丰富:支持多文件合并、按Sheet拆分、按列值拆分等多种操作
  • 用户友好:提供直观的Web界面和完整的RESTful API
  • 安全可靠:文件安全处理,自动清理旧文件,数据处理稳定
  • 轻量级:支持SQLite和MySQL数据库,部署简单,资源占用少

技术栈

  • 后端:Go 1.20+
  • Web框架:Gin
  • ORM库:GORM
  • Excel处理:excelize
  • 数据库:SQLite/MySQL
  • 前端:HTML5, CSS3, JavaScript, Bootstrap 5
  • 任务调度:Goroutines + Channels

快速开始

环境要求

  • Go 1.20或更高版本
  • Git
  • 操作系统:Windows, Linux, macOS

安装

  1. 克隆项目
git clone https://github.com/yourusername/excelpro.git
cd excelpro
  1. 安装依赖
go mod tidy
  1. 配置文件

复制 config.ini.exampleconfig.ini 并根据需要修改配置:

[server]
port = 8080
debug = true

[storage]
path = .
max_file_size = 104857600
file_max_age = 72

[database]
type = sqlite
path = tasks.db

[task]
max_tasks = 5
  1. 运行项目
go run main.go

服务将在 http://localhost:8080 启动。

前端页面

ExcelPro提供了直观的Web界面,方便用户进行操作:

  • 首页 (/):系统概述和功能导航
  • 合并文件 (/merge):上传并合并Excel文件
  • 拆分文件 (/split):按Sheet或列值拆分Excel文件
  • 任务管理 (/tasks):查看任务状态和历史记录

API文档

健康检查

  • GET /api/health
  • 响应:{"status": "ok", "message": "ExcelPro服务运行正常"}

文件操作

  • POST /api/get_sheet_names
  • 描述:获取Excel文件的Sheet列表
  • 参数:file (multipart/form-data)
  • 响应:{"success": true, "data": {"sheet_names": ["Sheet1", "Sheet2"]}}

  • POST /api/get_columns

  • 描述:获取指定Sheet的列列表
  • 参数:file (multipart/form-data), sheet_name (string)
  • 响应:{"success": true, "data": {"columns": ["列1", "列2"]}}

任务管理

  • POST /api/merge
  • 描述:合并Excel文件
  • 参数:
    • files (multipart/form-data, 多个文件)
    • merge_mode (string, 合并模式:simple/multi_sheet)
    • sheet_names (string, 指定Sheet名称,逗号分隔)
    • remove_duplicates (boolean, 是否去重)
    • header_row (integer, 表头行数)
  • 响应:{"success": true, "message": "任务已提交", "data": {"task_id": "..."}}

  • POST /api/split_by_sheet

  • 描述:按Sheet拆分Excel文件
  • 参数:file (multipart/form-data)
  • 响应:{"success": true, "message": "任务已提交", "data": {"task_id": "..."}}

  • POST /api/split_by_column

  • 描述:按列值拆分Excel文件
  • 参数:
    • file (multipart/form-data)
    • sheet_name (string, Sheet名称)
    • column_name (string, 拆分列名称)
    • header_row (integer, 表头行数)
  • 响应:{"success": true, "message": "任务已提交", "data": {"task_id": "..."}}

  • GET /api/task/:task_id

  • 描述:获取任务状态
  • 响应:{"success": true, "data": {"task_id": "...", "status": "completed", ...}}

  • GET /api/tasks

  • 描述:获取任务列表
  • 参数:
    • type (string, 任务类型)
    • status (string, 任务状态)
    • limit (integer, 每页数量)
    • page (integer, 页码)
  • 响应:{"success": true, "data": {"tasks": [...], "count": 10}}

  • DELETE /api/task/:task_id

  • 描述:删除任务
  • 响应:{"success": true, "message": "任务已删除"}

  • GET /api/download/:task_id

  • 描述:下载任务结果文件
  • 响应:文件下载

核心功能

Excel文件合并

  • 多文件合并:支持同时上传多个Excel文件进行合并
  • 多Sheet合并:可以选择合并指定的Sheet或所有Sheet
  • 智能去重:支持移除重复行
  • 表头处理:可自定义表头行数
  • ZIP文件支持:支持直接上传包含多个Excel文件的ZIP压缩包

Excel文件拆分

  • 按Sheet拆分:将一个Excel文件按Sheet拆分为多个文件
  • 按列值拆分:根据指定列的值将数据拆分为多个文件
  • 自动命名:拆分后的文件会根据Sheet名称或列值自动命名
  • 批量处理:一次操作可生成多个拆分文件

任务管理

  • 异步处理:所有文件操作都在后台异步执行
  • 任务状态:实时显示任务执行状态和进度
  • 历史记录:保存任务历史,支持查看和管理
  • 结果下载:任务完成后可直接下载处理结果

配置说明

服务器配置

[server]
port = 8080      # 服务器端口
debug = true     # 是否开启调试模式

存储配置

[storage]
path = .         # 存储路径
max_file_size = 104857600  # 最大文件大小(100MB)
file_max_age = 72          # 文件最大保留时间(小时)

数据库配置

[database]
type = sqlite     # 数据库类型:sqlite或mysql
path = tasks.db   # SQLite数据库路径
# MySQL配置(当type=mysql时使用)
host = localhost
port = 3306
user = root
password = password
dbname = excelpro

任务配置

[task]
max_tasks = 5     # 最大并发任务数

故障排除

常见问题

  1. 服务无法启动
  2. 检查端口是否被占用
  3. 检查配置文件是否正确
  4. 检查依赖是否安装完整

  5. 文件上传失败

  6. 检查文件大小是否超过限制
  7. 检查文件格式是否支持
  8. 检查网络连接是否正常

  9. 任务执行失败

  10. 检查Excel文件格式是否正确
  11. 检查文件内容是否符合要求
  12. 查看任务详情中的错误信息

  13. 下载文件失败

  14. 检查任务是否已完成
  15. 检查文件是否已过期被清理
  16. 检查网络连接是否正常

日志查看

服务运行时会在控制台输出日志信息,可通过日志了解服务运行状态和错误信息。

性能优化

  1. 并发处理:系统使用Go语言的goroutines进行并发处理,可同时执行多个任务
  2. 内存管理:采用流式处理方式,避免一次性加载大文件到内存
  3. 文件缓存:临时文件处理优化,减少磁盘I/O操作
  4. 数据库优化:使用索引加速任务查询

安全注意事项

  1. 文件上传安全:系统会检查上传文件的类型和大小,防止恶意文件
  2. 路径遍历防护:使用安全的文件路径处理,防止路径遍历攻击
  3. 内存限制:设置了最大文件大小限制,防止内存溢出
  4. 错误处理:所有错误都会被捕获和记录,不会向用户暴露敏感信息

贡献指南

欢迎对ExcelPro项目进行贡献!以下是贡献流程:

  1. Fork项目:在GitHub上Fork项目到自己的账号
  2. 创建分支:创建一个新的分支进行开发
  3. 提交更改:提交代码更改并编写清晰的提交信息
  4. 创建PR:创建Pull Request并描述更改内容
  5. 代码审查:项目维护者会进行代码审查
  6. 合并:审查通过后,代码将被合并到主分支

许可证

本项目采用MIT许可证,详情请参阅 https://opensource.org/license/mit/ 。

联系方式

  • 项目主页:https://github.com/yourusername/excelpro
  • 问题反馈:https://github.com/yourusername/excelpro/issues
  • 邮箱:contact@example.com

ExcelPro - 让Excel文件处理更简单、更高效!