Rust如何用xlsx库处理Excel文件
我想在Rust项目中处理Excel文件,听说可以用xlsx库来实现。请问具体该如何操作?比如:
- 如何安装和引入这个库?
- 有哪些基本功能可以用来读写Excel文件?
- 能否提供一个简单的代码示例,展示如何读取和修改.xlsx文件?
- 这个库有什么限制或需要注意的地方吗?
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 {
print!("{:?} ", cell);
}
println!();
}
}
Ok(())
}
- 主要功能:
- 支持读取.xlsx、.xlsm、.xlsb格式
- 获取单元格值(字符串、数字、布尔值等)
- 遍历工作表和数据范围
- 支持公式计算(基础)
注意:calamine主要专注于读取,写入功能有限。如需完整读写支持,可考虑rust_xlsxwriter库。
使用前记得处理可能的错误,特别是文件不存在或格式不匹配的情况。
在Rust中处理Excel文件,推荐使用 calamine 库,它支持读取 .xlsx、.xls 和 .ods 格式。以下是基本使用方法:
1. 添加依赖
在 Cargo.toml 中添加:
[dependencies]
calamine = "0.22"
2. 读取Excel文件
use calamine::{Reader, open_workbook, Xlsx, DataType};
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 {
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(())
}
3. 写入Excel文件
Rust目前没有成熟的xlsx写入库,但可通过以下方式:
- 使用
calamine读取后配合其他库处理 - 使用
xlsxwriter的Rust绑定(功能有限) - 考虑转换为CSV处理
主要特性:
- 支持数据类型自动识别
- 内存映射读取(大文件友好)
- 错误处理完善
注意事项:
- 仅支持读取,写入功能较弱
- 复杂公式支持有限
- 大型文件建议流式读取
对于复杂需求,可考虑将数据导出为CSV,使用 csv 库处理后再导回Excel。

