- ✅ Excel 文件读取(支持 .xlsx 格式)
- ✅ 多工作表支持
- ✅ JSON 格式导出
- ✅ CSV 格式导出
- ✅ 可扩展的导出器架构
- ✅
convert- 转换 Excel 文件 - ✅
list-sheets- 列出所有工作表 - ✅
formats- 显示支持的格式 - ✅ 完善的命令行参数解析
- ✅ 友好的用户提示和错误信息
- ✅ 模块化设计
- ✅ Trait 抽象(Exporter trait)
- ✅ 完善的错误处理(自定义错误类型)
- ✅ 单元测试框架
- ✅ 类型安全(强类型系统)
- ✅ 文档注释
excel-cli/
├── Cargo.toml # 项目配置
├── LICENSE # MIT 许可证
├── README.md # 主文档
├── QUICKSTART.md # 快速入门
├── EXAMPLES.md # 使用示例
├── ARCHITECTURE.md # 架构设计
├── .gitignore # Git 忽略文件
└── src/
├── main.rs # CLI 入口(192 行)
├── lib.rs # 库入口(8 行)
├── error.rs # 错误定义(38 行)
├── models.rs # 数据模型(72 行)
├── reader.rs # Excel 读取器(145 行)
└── exporter/
├── mod.rs # 导出器接口(44 行)
├── json.rs # JSON 导出器(74 行)
└── csv.rs # CSV 导出器(75 行)
总代码量: ~650 行 Rust 代码
| 类别 | 技术 | 版本 | 用途 |
|---|---|---|---|
| 语言 | Rust | 2021 Edition | 核心语言 |
| CLI | clap | 4.5 | 命令行解析 |
| Excel | calamine | 0.25 | Excel 读取 |
| 序列化 | serde | 1.0 | 数据序列化 |
| JSON | serde_json | 1.0 | JSON 处理 |
| CSV | csv | 1.3 | CSV 处理 |
| 错误处理 | anyhow | 1.0 | 错误传播 |
| 错误定义 | thiserror | 1.0 | 自定义错误 |
通过 Exporter trait 实现不同导出策略:
pub trait Exporter {
fn export(&self, data: &ExcelData, output_path: &str) -> Result<()>;
}ExporterFactory 创建不同类型的导出器:
impl ExporterFactory {
pub fn create(format: &str) -> Result<Box<dyn Exporter>>;
}导出器配置:
JsonExporter::new().with_pretty(true)
CsvExporter::new().with_delimiter(b';')| Excel 类型 | CellValue 映射 | 说明 |
|---|---|---|
| 字符串 | String(String) | 文本内容 |
| 数字 | Number(f64) | 整数和浮点数 |
| 布尔 | Boolean(bool) | true/false |
| 空单元格 | Empty | 空值 |
| 日期时间 | String | 格式化字符串 |
| 错误 | String | 错误信息 |
| 特性 | JSON | CSV |
|---|---|---|
| 数据结构 | 嵌套对象 | 扁平表格 |
| 文件大小 | 较大 | 较小 |
| 可读性 | 高 | 中 |
| 兼容性 | Web API | Excel/数据库 |
| 格式化 | 支持 pretty | 支持自定义分隔符 |
- Debug 构建:~14 秒
- Release 构建:~14 秒
- 二进制大小:~2-5 MB(release)
- 读取速度:取决于 Excel 文件大小
- 内存占用:O(n),n 为单元格数量
- 导出速度:
- JSON:快速(直接序列化)
- CSV:快速(流式写入)
-
添加新导出格式
- 实现
Exportertrait - 在
ExporterFactory注册 - 无需修改现有代码
- 实现
-
支持新的 Excel 格式
- 修改
ExcelReader - 使用 calamine 的其他功能
- 修改
-
添加数据处理功能
- 在
ExcelData添加方法 - 实现过滤、转换等功能
- 在
// 数据过滤
pub trait DataFilter {
fn filter(&self, row: &ExcelRow) -> bool;
}
// 数据转换
pub trait DataTransformer {
fn transform(&self, data: ExcelData) -> ExcelData;
}
// 流式处理
pub trait StreamReader {
fn read_stream(&mut self) -> impl Iterator<Item = ExcelRow>;
}// models.rs
- CellValue::to_string()
- CellValue::is_empty()
// reader.rs
- cell_to_value() 类型转换
// exporter/json.rs
- JSON 导出功能
// exporter/csv.rs
- CSV 导出功能- 集成测试
- 错误处理测试
- 边界条件测试
- 性能基准测试
| 文档 | 行数 | 状态 | 说明 |
|---|---|---|---|
| README.md | 330 | ✅ | 完整的项目说明 |
| QUICKSTART.md | 150 | ✅ | 快速入门指南 |
| EXAMPLES.md | 280 | ✅ | 详细使用示例 |
| ARCHITECTURE.md | 450 | ✅ | 架构设计文档 |
| LICENSE | 21 | ✅ | MIT 许可证 |
| 代码注释 | - | ✅ | 关键函数都有注释 |
✅ 推荐使用:
- 批量转换 Excel 文件
- 数据迁移和备份
- 集成到自动化流程
- 与其他工具链配合
❌ 不推荐使用:
- 需要保留 Excel 格式和样式
- 需要编辑 Excel 文件
- 处理加密的 Excel 文件
-
大文件处理
- 建议分批处理
- 使用 Release 构建
- 考虑并行处理多个文件
-
格式选择
- 大数据量选择 CSV
- 需要结构化选择 JSON
- 考虑文件大小和处理速度
# Debug 版本(开发)
cargo build
# Release 版本(生产)
cargo build --release
# 运行测试
cargo test
# 生成文档
cargo doc --open# 登录
cargo login
# 发布
cargo publish# Windows
cargo build --release --target x86_64-pc-windows-msvc
# Linux
cargo build --release --target x86_64-unknown-linux-gnu
# macOS
cargo build --release --target x86_64-apple-darwin-
仅支持 .xlsx 格式
- 不支持 .xls(旧版 Excel)
- 不支持 .xlsm(宏)
-
日期格式
- 日期时间以字符串形式导出
- 不保留原始日期格式
-
公式
- 只导出计算结果
- 不保留公式本身
-
格式和样式
- 不保留单元格格式
- 不保留样式信息
通过这个项目可以学习:
-
Rust 基础
- 所有权和借用
- Trait 和泛型
- 错误处理
- 模块系统
-
软件设计
- 设计模式(Strategy、Factory、Builder)
- SOLID 原则
- 模块化设计
- API 设计
-
工具使用
- Cargo 包管理
- clap CLI 框架
- serde 序列化
- calamine Excel 处理
欢迎贡献!可以从以下方面入手:
-
添加新格式
- XML, YAML, TOML, Parquet...
-
功能增强
- 数据过滤
- 列映射
- 数据验证
-
性能优化
- 流式处理
- 并行导出
- 内存优化
-
文档改进
- 更多示例
- 视频教程
- 翻译文档
- GitHub: [your-repo-url]
- Issues: [your-repo-url/issues]
- Email: your.email@example.com
感谢使用 Excel CLI! 🎉
如果觉得有用,请给项目一个 ⭐ Star!