Rust 中解析 Excel 的库`calamine` 和 `umya-spreadsheet`对比
【摘要】 Rust 中解析 Excel 的库`calamine` 和 `umya-spreadsheet`对比
outline: deep
Rust 中解析 Excel 的库
👉calamine 和 umya-spreadsheet对比
1️⃣ calamine(放弃)
calamine 是专门用来解析 Excel 的 crate,它支持:
.xls(BIFF 格式).xlsx(Office Open XML 格式).ods(LibreOffice / OpenOffice 格式)
但是同时处理这两种格式我们还是使用umya-spreadsheet = "1.1"
定位:Rust 中的 Excel 读取库(Read-only)
特点:
- 支持 xlsx、xls、ods(OpenDocument Spreadsheet) 等格式。
- 专注于解析和读取 Excel 数据,不支持写入或修改文件。
- 速度快,内存占用小,适合数据导入、批量读取。
- API 比较简单,比如:
use calamine::{open_workbook_auto, Reader};
let mut workbook = open_workbook_auto("test.xlsx")?;
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
for row in range.rows() {
println!("{:?}", row);
}
}
优点:
- 快速读取大文件。
- 格式支持多样(不仅是 Excel,还有 ods)。
- 纯读取,避免了误改数据的风险。
缺点:
- 不能写入或创建新 Excel【calamine 不能用于导出(写入)Excel 文件】
- 不支持复杂 Excel 样式(颜色、合并单元格、公式等)。
适用场景:
- 从 Excel 批量导入数据库(比如你的用户导入接口)。
- 报表解析、数据分析前置处理。
2️⃣ umya-spreadsheet(使用)
定位:Rust 的 Excel 全功能读写库(Read + Write)
特点:
- 完全支持
.xlsx文件的创建、读取、修改、保存。 - 支持样式(字体、颜色、背景)、合并单元格、公式、图表等复杂功能。
- API 偏详细,写 Excel 时比
calamine灵活,但稍复杂。 - 不支持
.xls(老 Excel 二进制格式),只支持.xlsx。
简单示例:
use umya_spreadsheet::*;
let mut book = new_file();
let sheet = book.get_sheet_by_name_mut("Sheet1").unwrap();
sheet.get_cell_mut("A1").set_value("Hello World");
writer::xlsx::write(&book, "output.xlsx").unwrap();
优点:
- 能读能写,功能齐全。
- 支持 Excel 样式、美化、复杂表格。
- 适合生成报表模板。
缺点:
- 只支持
.xlsx,不支持.xls。 - 相比
calamine,读取速度稍慢,内存占用也更大。
适用场景:
- 生成带格式的 Excel 报表、导出模板。
- 对 Excel 内容做修改再保存。
- 需要控制表格样式的导出场景。
3️⃣ 总结对比表
| 特性 | calamine | umya-spreadsheet |
|---|---|---|
读 .xlsx |
✅ | ✅ |
读 .xls |
✅ | ❌ |
写 .xlsx |
❌ | ✅ |
| 样式/公式/图表支持 | ❌ | ✅ |
| 速度(大文件读取) | 🚀 快 | 🐢 稍慢 |
| 内存占用 | 低 | 中等偏高 |
| 适用场景 | 数据导入 | 报表导出、模板生成 |
💡 结合你的项目:
- 导入用户数据:用
calamine(支持.xls和.xlsx,读取快)。 - 导出 Excel 模板:用
umya-spreadsheet(能加表头、格式、美化)。
所以我们的方案是使用一个混合方案,导入用 calamine,导出模板用 umya-spreadsheet,这样既兼容老 Excel,又能做漂亮的导出。
导入 .xls 文件时不会报错
这个我们稍后完善,实现基础功能先实现ok
更新:考虑到对于依赖的减少,calamine的功能还是不全,所以只能抛弃,转而使用umya-spreadsheet实现我们的导入和导出功能
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)