Rust如何操作Excel文件

最近在学习Rust,想用Rust处理Excel文件,但不太清楚具体该怎么做。请问有哪些推荐的Rust库可以用来读写Excel文件?比如xlsx、csv这些格式该怎么操作?最好能提供一些简单的代码示例,比如如何读取单元格数据或者写入新内容。另外,这些库的性能和兼容性如何?有没有什么需要特别注意的地方?

2 回复

使用calamine库读取Excel,用rust_xlsxwriter库写入。示例代码:

use calamine::{open_workbook, Xlsx, Reader};
let mut workbook: Xlsx<_> = open_workbook("file.xlsx")?;
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
    for row in range.rows() {
        println!("{:?}", row);
    }
}

写入需安装rust_xlsxwriter,支持格式设置。


在Rust中操作Excel文件,推荐使用以下库:

主要库推荐

1. calamine(推荐)

专门用于读取Excel文件的库,支持.xlsx.xls格式。

Cargo.toml:

[dependencies]
calamine = "0.22"

读取Excel示例:

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

fn read_excel() -> 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!("{:?}\t", cell);
            }
            println!();
        }
    }
    Ok(())
}

2. rust_xlsxwriter

用于创建和写入Excel文件。

Cargo.toml:

[dependencies]
rust_xlsxwriter = "1.1.0"

写入Excel示例:

use rust_xlsxwriter::{Workbook, XlsxError};

fn write_excel() -> Result<(), XlsxError> {
    let mut workbook = Workbook::new();
    let worksheet = workbook.add_worksheet();
    
    // 写入数据
    worksheet.write_string(0, 0, "姓名")?;
    worksheet.write_string(0, 1, "年龄")?;
    worksheet.write_number(1, 0, 25)?;
    
    workbook.save("output.xlsx")?;
    Ok(())
}

完整示例:读取并处理数据

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

fn process_excel_data() -> 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_index, row) in range.rows().enumerate() {
            if row_index == 0 { continue; } // 跳过标题行
            
            let name = row[0].get_string().unwrap_or("");
            let age: i32 = row[1].get_float().unwrap_or(0.0) as i32;
            
            println!("姓名: {}, 年龄: {}", name, age);
        }
    }
    Ok(())
}

选择建议

  • 仅读取:使用 calamine
  • 仅写入:使用 rust_xlsxwriter
  • 读写都需要:组合使用两个库

这些库都提供了良好的性能和易用性,适合大多数Excel文件操作场景。

回到顶部