用Rust读取Excel文件的方法有哪些

最近在学习Rust,想用Rust读取Excel文件,但不知道有哪些可用的库或方法。请问目前主流的方法有哪些?各有什么优缺点?是否需要依赖外部工具?性能表现如何?有没有简单的代码示例可以参考?

2 回复

用Rust读取Excel文件主要有以下几种方法:

  1. calamine - 最常用的库,支持.xlsx和.xls格式
  2. rust_xlsxwriter - 主要用于写入,也支持读取
  3. polars - 数据分析库,支持Excel读取

推荐使用calamine,安装简单:

[dependencies]
calamine = "0.22"

示例代码可读取工作表数据到Vec中,简单实用。


在Rust中读取Excel文件,主要有以下几种方法:

1. calamine(推荐)

最常用的Excel读取库,支持.xlsx、.xls、.ods格式。

use calamine::{open_workbook, Reader, Xlsx, DataType};

fn read_excel_with_calamine() -> Result<(), Box<dyn std::error::Error>> {
    let path = "example.xlsx";
    let mut workbook: Xlsx<_> = open_workbook(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(())
}

2. rust_xlsxwriter

主要用于写入,但也支持读取:

use rust_xlsxwriter::{Workbook, XlsxError};

fn read_excel_with_xlsxwriter() -> Result<(), XlsxError> {
    let workbook = Workbook::new("example.xlsx")?;
    let worksheet = workbook.worksheet(0)?;
    
    // 读取单元格数据
    let cell_value = worksheet.read_cell(0, 0)?;
    println!("A1: {:?}", cell_value);
    
    Ok(())
}

3. 使用polars(数据处理场景)

适合数据分析场景:

use polars::prelude::*;

fn read_excel_with_polars() -> Result<DataFrame, PolarsError> {
    let df = LazyFrame::scan_excel("example.xlsx", Default::default())?
        .collect()?;
    println!("{:?}", df);
    Ok(df)
}

推荐方案

  • calamine:功能全面,性能好,社区活跃
  • polars:适合数据分析和处理场景
  • rust_xlsxwriter:读写兼备,但读取功能相对简单

在Cargo.toml中添加依赖:

[dependencies]
calamine = "0.22"
# 或
polars = { version = "0.35", features = ["lazy", "excel"] }
# 或
rust_xlsxwriter = "0.36"

根据具体需求选择合适的库,calamine是最通用的选择。

回到顶部