Rust使用calamine读取excel文件,Rust使用rust
作者:mmseoamin日期:2024-04-27

Rust使用calamine读取已存在的test.xlsx文件全部数据,还读取指定单元格数据;Rust使用rust_xlsxwriter创建新的output.xlsx文件,并写入数据到指定单元格,然后再保存工作簿。

Cargo.tomlRust使用calamine读取excel文件,Rust使用rust,在这里插入图片描述,第1张

main.rs

/*rust读取excel文件*/
use calamine::{open_workbook, DataType, Error, Reader, Xlsx};
//rust使用rust_xlsxwriter写入excel文件
use rust_xlsxwriter::{Workbook, XlsxError};
fn main() {
    let _ = read_excel();
    let _ = write_excel();
}
// rust使用calamine库读取Excel
fn read_excel() -> Result<(), Error> {
    let file_path = "test.xlsx";
    // opens a new workbook
    let mut workbook: Xlsx<_> = open_workbook(file_path).expect("Cannot open file");
    let mut worksheet = workbook
        .worksheet_range("Sheet1")
        .expect("Cannot find 'Sheet1'");
    for (row_index, row) in worksheet.rows().enumerate() {
        // 遍历每列并输出内容
        for (col_index, cell) in row.iter().enumerate() {
            // 获取所有单元格的值
            println!(
                "Sheet1 - Row {}, Column {} : {}",
                row_index + 1,
                col_index + 1,
                cell
            );
            /*
            // 获取特定单元格的值(字符串类型)
            if let DataType::String(value) = cell {
                println!(
                    "Cell value at Sheet1 - Row {}, Column {} is '{}'",
                    row_index + 1,
                    col_index + 1,
                    value
                );
            }
            */
            /*
            // 获取所有单元格的值及类型
            println!(
                "Sheet1 - Row {}, Column {} : {:?}",
                row_index + 1,
                col_index + 1,
                cell
            );DataType
            */
        }
        /*
        //打印每行数据
        println!("{:?}", row);
        // 或者按需提取特定列的值
        let column1 = &row[0];
        let column2 = &row[1];
        */
    }
    println!("------读取指定单元格数值,(row_index=1,col_index=5)--------------");
    let option_value = worksheet.get_value((1, 5));
    // 使用 `.to_string()` 进行转换
    if let Some(ref value) = option_value {
        println!("{}", value.to_string());
    } else {
        println!("None");
    }
    /*
    //备注:可以使用下面方法写入数据,也可以再次读取出来,没有找到保存数据方法,一旦关闭工作簿后,还是不能保存数据,现在calamine库只能读取excel数据,不支持写入保存数据。
    println!("------设置指定单元格数值,(row_index=10,col_index=5)--------------");
    worksheet.set_value((10, 2), DataType::Float(39.8));
    println!("-------------------------------------------------------------");
    */
    // 关闭工作簿
    drop(workbook);
    Ok(())
}
// rust使用rust_xlsxwriter库写入Excel
fn write_excel() -> Result<(), XlsxError> {
    let file_name = "output.xlsx";
    let mut workbook2 = Workbook::new();
    let worksheet2 = workbook2.add_worksheet();
    worksheet2.write_string(2, 1, "Hello")?;
    //保存工作簿
    workbook2.save(file_name)?;
    //关闭工作簿
    drop(workbook2);
    Ok(())
}