use std::{fs::File, io::BufReader};
use spreadsheet_ods::{OdsOptions, OdsResult};
pub fn main() -> OdsResult<()> {
read_only()?;
iterate()?;
Ok(())
}
fn iterate() -> OdsResult<()> {
let f = BufReader::new(File::open("examples/data2.ods").expect("sample"));
let wb = OdsOptions::default().read_ods(f)?;
let sh = wb.sheet(0);
for (r, _d) in sh.iter().take(25) {
println!("it {},{}", r.0, r.1);
}
for (r, _d) in sh.range((1, 1)..(4, 3)) {
println!("range {},{}", r.0, r.1);
}
for (r, _d) in sh.iter_rows((1, 1)..(4, 3)) {
println!("rows {},{}", r.0, r.1);
}
for (r, _d) in sh.iter_cols((1, 1)..(4, 3)) {
println!("cols {},{}", r.0, r.1);
}
Ok(())
}
fn read_only() -> OdsResult<()> {
let f = BufReader::new(File::open("examples/data.ods").expect("sample"));
let wb = OdsOptions::default().
content_only()
.ignore_empty_cells()
.read_ods(f)?;
let sh = wb.sheet(0);
for r in 0..27 {
for c in 0..4 {
match sh.value(r, c) {
spreadsheet_ods::Value::Empty => {}
spreadsheet_ods::Value::Boolean(v) => println!("({},{}) = bool {}", r, c, v),
spreadsheet_ods::Value::Number(v) => println!("({},{}) = number {}", r, c, v),
spreadsheet_ods::Value::Percentage(v) => println!("({},{}) = percent {}", r, c, v),
spreadsheet_ods::Value::Currency(v, cur) => {
println!("({},{}) = currency {} {}", r, c, v, cur)
}
spreadsheet_ods::Value::Text(v) => println!("({},{}) = text {}", r, c, v),
spreadsheet_ods::Value::TextXml(v) => println!("({},{}) = xml {:?}", r, c, v),
spreadsheet_ods::Value::DateTime(v) => println!("({},{}) = date {}", r, c, v),
spreadsheet_ods::Value::TimeDuration(v) => {
println!("({},{}) = duration {}", r, c, v)
}
}
}
}
let a1 = sh.value(0, 0).as_str_or("");
println!("A1 {}", a1);
let a2 = sh.value(1, 0).as_f64_opt();
println!("A2 {:?}", a2);
Ok(())
}