使用Rust处理Excel文件的方法
最近开始学习Rust语言,想用它来处理Excel文件。请问有没有推荐的Rust库可以读写Excel文件?最好能支持.xlsx格式,并且提供基本的单元格操作功能,比如读取数据、写入数据和修改格式等。另外,如果处理大型Excel文件时,这些库的性能表现如何?有没有需要特别注意的内存管理问题?如果能给个简单的代码示例就更好了。
2 回复
使用Rust处理Excel文件,推荐使用calamine库。以下是基本步骤:
- 添加依赖:
[dependencies]
calamine = "0.21"
- 读取Excel文件:
use calamine::{open_workbook, Reader, Xlsx};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut workbook: Xlsx<_> = open_workbook("data.xlsx")?;
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
for row in range.rows() {
for cell in row {
println!("{}", cell);
}
}
}
Ok(())
}
- 主要特性:
- 支持.xlsx、.xlsm、.xlsb格式
- 读取单元格值、公式、格式
- 内存高效,支持大文件
- 可获取工作表名称列表
- 其他可选库:
- rust_xlsxwriter:用于创建Excel文件
- polars:数据分析和处理
注意:calamine目前主要支持读取,写入功能有限。如需完整读写功能,可结合多个库使用。
在Rust中处理Excel文件,推荐使用 calamine 库,它支持读取 .xlsx、.xls 和 .ods 格式。以下是基本使用方法:
1. 添加依赖
在 Cargo.toml 中添加:
[dependencies]
calamine = "0.22"
2. 读取Excel文件
use calamine::{Reader, open_workbook, Xlsx, DataType};
fn read_excel(file_path: &str) -> Result<(), Box<dyn std::error::Error>> {
// 打开工作簿
let mut workbook: Xlsx<_> = open_workbook(file_path)?;
// 获取第一个工作表
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
for row in range.rows() {
for cell in row {
match cell {
DataType::String(s) => println!("字符串: {}", s),
DataType::Float(f) => println!("数字: {}", f),
DataType::Int(i) => println!("整数: {}", i),
DataType::Bool(b) => println!("布尔值: {}", b),
DataType::Empty => println!("空单元格"),
_ => println!("其他类型"),
}
}
}
}
Ok(())
}
fn main() {
if let Err(e) = read_excel("data.xlsx") {
eprintln!("错误: {}", e);
}
}
3. 写入Excel文件
Rust目前没有成熟的Excel写入库,但可以通过以下方式:
- 使用
calamine读取后,通过xlsxwriter绑定(功能有限) - 转换为CSV处理后再转回Excel
- 使用Python等其他语言处理(通过Rust FFI调用)
4. 处理数据类型注意事项
- 日期在Excel中存储为浮点数,需要特殊转换
- 公式计算需要额外处理
- 样式和格式支持有限
替代方案
如果需要更完整功能,可以考虑:
- 通过
std::process::Command调用Python的pandas库 - 使用
rust_xlsxwriter(正在开发中)
总结
calamine 是当前Rust生态中最成熟的Excel处理方案,适合数据提取和简单操作。复杂操作建议结合其他工具链完成。

