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(())
}