Rust使用calamine读取已存在的test.xlsx文件全部数据,还读取指定单元格数据;Rust使用rust_xlsxwriter创建新的output.xlsx文件,并写入数据到指定单元格,然后再保存工作簿。
Cargo.toml
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(()) }