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
安装¶
- 克隆项目
git clone https://github.com/yourusername/excelpro.git
cd excelpro
- 安装依赖
go mod tidy
- 配置文件
复制 config.ini.example 为 config.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
- 运行项目
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 # 最大并发任务数
故障排除¶
常见问题¶
- 服务无法启动
- 检查端口是否被占用
- 检查配置文件是否正确
-
检查依赖是否安装完整
-
文件上传失败
- 检查文件大小是否超过限制
- 检查文件格式是否支持
-
检查网络连接是否正常
-
任务执行失败
- 检查Excel文件格式是否正确
- 检查文件内容是否符合要求
-
查看任务详情中的错误信息
-
下载文件失败
- 检查任务是否已完成
- 检查文件是否已过期被清理
- 检查网络连接是否正常
日志查看¶
服务运行时会在控制台输出日志信息,可通过日志了解服务运行状态和错误信息。
性能优化¶
- 并发处理:系统使用Go语言的goroutines进行并发处理,可同时执行多个任务
- 内存管理:采用流式处理方式,避免一次性加载大文件到内存
- 文件缓存:临时文件处理优化,减少磁盘I/O操作
- 数据库优化:使用索引加速任务查询
安全注意事项¶
- 文件上传安全:系统会检查上传文件的类型和大小,防止恶意文件
- 路径遍历防护:使用安全的文件路径处理,防止路径遍历攻击
- 内存限制:设置了最大文件大小限制,防止内存溢出
- 错误处理:所有错误都会被捕获和记录,不会向用户暴露敏感信息
贡献指南¶
欢迎对ExcelPro项目进行贡献!以下是贡献流程:
- Fork项目:在GitHub上Fork项目到自己的账号
- 创建分支:创建一个新的分支进行开发
- 提交更改:提交代码更改并编写清晰的提交信息
- 创建PR:创建Pull Request并描述更改内容
- 代码审查:项目维护者会进行代码审查
- 合并:审查通过后,代码将被合并到主分支
许可证¶
本项目采用MIT许可证,详情请参阅 https://opensource.org/license/mit/ 。
联系方式¶
- 项目主页:https://github.com/yourusername/excelpro
- 问题反馈:https://github.com/yourusername/excelpro/issues
- 邮箱:contact@example.com
ExcelPro - 让Excel文件处理更简单、更高效!