use std::fs;
use icu_locale_core::locale;
use spreadsheet_ods::format::create_number_format_fixed;
use spreadsheet_ods::{
defaultstyles::{DefaultFormat, DefaultStyle},
style::{units::TextAlign, StyleOrigin, StyleUse},
write_ods, CellStyle, OdsResult, Sheet, ValueFormatNumber, WorkBook,
};
pub fn main() -> OdsResult<()> {
let _ = fs::create_dir_all("examples_out");
default_format()?;
cell_style()?;
number_format()?;
Ok(())
}
fn default_format() -> OdsResult<()> {
let mut wb = WorkBook::new(locale!("de-AT"));
let mut sheet = Sheet::new("one");
sheet.set_styled_value(0, 0, 1234, &DefaultStyle::number());
sheet.set_styled_value(1, 0, 1234, &DefaultStyle::bool());
sheet.set_styled_value(2, 0, 1234, &DefaultStyle::date());
sheet.set_styled_value(3, 0, 1234, &DefaultStyle::time_of_day());
sheet.set_styled_value(4, 0, 1234, &DefaultStyle::currency());
wb.push_sheet(sheet);
write_ods(&mut wb, "examples_out/default_format.ods")
}
fn cell_style() -> OdsResult<()> {
let mut wb = WorkBook::new(locale!("de-AT"));
let mut style_bold = CellStyle::new("s_bold", &DefaultFormat::number());
style_bold.set_origin(StyleOrigin::Styles);
style_bold.set_styleuse(StyleUse::Named);
style_bold.set_font_bold();
style_bold.set_text_align(TextAlign::Right);
let style_bold = wb.add_cellstyle(style_bold);
let mut sheet = Sheet::new("one");
sheet.set_styled_value(0, 0, 1234, &style_bold);
wb.push_sheet(sheet);
write_ods(&mut wb, "examples_out/cell_style.ods")
}
fn number_format() -> OdsResult<()> {
let mut wb = WorkBook::new(locale!("de-AT"));
let f_0 = create_number_format_fixed("numeric_0", 0, false);
let f_0 = wb.add_number_format(f_0);
let mut f_2 = ValueFormatNumber::new_named("numeric_2");
f_2.part_text("!!").build();
f_2.part_number()
.fixed_decimal_places(2)
.if_then(true, |f| f.grouping())
.build();
let f_2 = wb.add_number_format(f_2);
let mut f_3 = ValueFormatNumber::new_empty();
f_3.part_fill_character().fill_char('*').build();
f_3.part_number()
.min_integer_digits(1)
.decimal_places(3)
.build();
let f_3 = wb.add_number_format(f_3);
let s_0 = CellStyle::new("numeric_0", &f_0);
let s_0 = wb.add_cellstyle(s_0);
let s_3 = CellStyle::new("", &f_3);
let s_3 = wb.add_cellstyle(s_3);
let s_2 = CellStyle::new("numeric_2", &f_2);
let s_2 = wb.add_cellstyle(s_2);
let mut sheet = Sheet::new("one");
sheet.set_styled_value(0, 0, 12.34, &s_0);
sheet.set_styled_value(1, 0, 12.3456, &s_3);
sheet.set_styled_value(2, 0, 12.3456, &s_2);
wb.push_sheet(sheet);
write_ods(&mut wb, "examples_out/number_format.ods")
}