pub fn get_ord_from_tuple(row: RowNum, col: ColNum) -> Result<String>Expand description
Convert numbers based Excel cell addresses to characters. If you pass parameter (2, 4) to this function, you will get D2.
Examples found in repository?
examples/cached_batch_reader.rs (line 18)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut book = XlsxBook::new("xlsx/test.xlsx", true)?;
for shname in book.get_visible_sheets().clone() {
// left_ncol should not be 0
// the tail empty cells will be ignored, if you want the length of cells in each row is fixed, you can set right_ncol to a number not MAX_COL_NUM
let sheet = book.get_cached_sheet_by_name(&shname, 100, 0, 1, MAX_COL_NUM, false)?;
for (rows_nums, rows_data) in sheet {
// empty rows will be skiped
for (row, cells) in rows_nums.into_iter().zip(rows_data) {
for (col, cel) in cells.into_iter().enumerate() {
let val: String = cel.get()?.unwrap(); // supprted types: String, i64, f64, bool, NaiveDate
println!("the value of {} is {val}; raw cell is {:?}", get_ord_from_tuple(row, (col+1) as u16)?, cel);
}
}
};
}
Ok(())
}More examples
examples/simple_batch_reader.rs (line 17)
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut book = XlsxBook::new("xlsx/test.xlsx", true)?;
for shname in book.get_visible_sheets().clone() {
// left_ncol should not be 0
// the tail empty cells will be ignored, if you want the length of cells in each row is fixed, you can set right_ncol to a number not MAX_COL_NUM
let sheet = book.get_sheet_by_name(&shname, 100, 0, 1, MAX_COL_NUM, false)?;
for batch in sheet {
let (rows_nums, rows_data) = batch?;
// empty rows will be skiped
for (row, cells) in rows_nums.into_iter().zip(rows_data) {
for (col, cel) in cells.into_iter().enumerate() {
let val: String = cel.get()?.unwrap(); // supprted types: String, i64, f64, bool, NaiveDate
println!("the value of {} is {val}; raw cell is {:?}", get_ord_from_tuple(row, (col+1) as u16)?, cel);
}
}
};
}
Ok(())
}examples/partial_batch_reader.rs (line 32)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut book = XlsxBook::new("xlsx/test.xlsx", true)?;
for shname in book.get_visible_sheets().clone() {
// left_ncol should not be 0
// the tail empty cells will be ignored, if you want the length of cells in each row is fixed, you can set right_ncol to a number not MAX_COL_NUM
let mut sheet = book.get_sheet_by_name(&shname, 100, 0, 1, MAX_COL_NUM, true)?;
let mut skip_until = HashMap::new();
skip_until.insert("A".into(), "col1".into());
skip_until.insert("C".into(), "col3".into());
sheet.with_skip_until(&skip_until);
let mut read_before = HashMap::new();
read_before.insert("B".into(), "sum".into());
sheet.with_read_before(&read_before);
// only rows after skip_until-row(included) and before read_before(excluded) will be returned
let captures = vec!["B2".into(), "C1".into()].into_iter().collect();
sheet.with_capture_vals(captures);
println!("captures: {:?}", sheet.get_captured_vals());
for batch in sheet {
let (rows_nums, rows_data) = batch?;
// empty rows will be skiped
for (row, cells) in rows_nums.into_iter().zip(rows_data) {
for (col, cel) in cells.into_iter().enumerate() {
let val: String = cel.get()?.unwrap(); // supprted types: String, i64, f64, bool, NaiveDate
println!("the value of {} is {val}; raw cell is {:?}", get_ord_from_tuple(row, (col+1) as u16)?, cel);
}
}
// println!("captured values: {:?}", sheet.get_captured_vals());
};
}
Ok(())
}