Rust如何用xlsx库读写Excel文件

我想在Rust项目中读写Excel文件,但不知道如何使用xlsx库来实现。有没有完整的代码示例展示如何用xlsx库读取和写入.xlsx文件?具体想知道:

  1. 如何安装和引入xlsx库?
  2. 读取Excel文件时如何处理不同的工作表?
  3. 如何获取单元格数据并处理不同类型(字符串、数字等)?
  4. 写入Excel时如何创建新工作表、设置单元格值和格式?
  5. 有没有需要特别注意的性能问题或常见错误?

如果能提供一个从安装到读写的完整示例就太感谢了!

2 回复

使用calamine库读取xlsx文件,使用rust_xlsxwriter库写入xlsx文件。

读取示例:

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

let mut workbook: Xlsx<_> = open_workbook("file.xlsx")?;
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") {
    for row in range.rows() {
        // 处理每行数据
    }
}

写入示例:

use rust_xlsxwriter::{Workbook, XlsxError};

let mut workbook = Workbook::new();
let worksheet = workbook.add_worksheet();
worksheet.write(0, 0, "Hello")?;
workbook.save("demo.xlsx")?;

在Rust中,可以使用 calamine 库读写Excel文件(.xlsx格式)。以下是具体实现方法:

1. 添加依赖

Cargo.toml 中添加:

[dependencies]
calamine = "0.22"

2. 读取Excel文件

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

fn read_excel() -> Result<(), Box<dyn std::error::Error>> {
    // 打开Excel文件
    let mut workbook: Xlsx<_> = open_workbook("example.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文件

calamine 主要专注于读取,写入功能有限。如果需要完整读写功能,建议使用 rust_xlsxwriter

Cargo.toml 中添加:

[dependencies]
rust_xlsxwriter = "1.1.0"

写入示例:

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_string(1, 0, "张三")?;
    worksheet.write_number(1, 1, 25)?;
    worksheet.write_string(2, 0, "李四")?;
    worksheet.write_number(2, 1, 30)?;
    
    // 保存文件
    workbook.save("output.xlsx")?;
    
    Ok(())
}

4. 主要特性

  • calamine: 轻量级,专注于读取,支持.xls和.xlsx格式
  • rust_xlsxwriter: 功能完整,支持创建和修改Excel文件

选择哪个库取决于你的具体需求:如果主要是读取数据,用 calamine;如果需要创建和写入复杂Excel文件,用 rust_xlsxwriter

回到顶部