mod lib_test; use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; use icu_locid::locale; use lib_test::*; use spreadsheet_ods::format::{FormatCalendarStyle, FormatNumberStyle}; use spreadsheet_ods::style::CellStyle; use spreadsheet_ods::{ OdsError, Sheet, ValueFormatBoolean, ValueFormatCurrency, ValueFormatDateTime, ValueFormatNumber, ValueFormatPercentage, WorkBook, }; #[test] fn write_format() -> Result<(), OdsError> { let mut wb = WorkBook::new_empty(); let mut v1 = ValueFormatNumber::new_named("f1"); v1.part_scientific().decimal_places(4).build(); let v1 = wb.add_number_format(v1); let mut v2 = ValueFormatNumber::new_named("f2"); v2.part_number().fixed_decimal_places(2).build(); let v2 = wb.add_number_format(v2); let mut v3 = ValueFormatNumber::new_named("f3"); v3.part_number().decimal_places(2).build(); let v3 = wb.add_number_format(v3); let mut v31 = ValueFormatNumber::new_named("f31"); v31.part_fraction() .denominator(13) .min_denominator_digits(1) .min_integer_digits(1) .min_numerator_digits(1) .build(); let v31 = wb.add_number_format(v31); let mut v4 = ValueFormatCurrency::new_named("f4"); v4.part_currency() .locale(locale!("de_AT")) .symbol("€") .build(); v4.part_text(" ").build(); v4.part_number().decimal_places(2).build(); let v4 = wb.add_currency_format(v4); let mut v5 = ValueFormatPercentage::new_named("f5"); v5.part_number().decimal_places(2).build(); v5.part_text("/ct").build(); let v5 = wb.add_percentage_format(v5); let mut v6 = ValueFormatBoolean::new_named("f6"); v6.part_boolean().build(); let v6 = wb.add_boolean_format(v6); let mut v7 = ValueFormatDateTime::new_named("f7"); v7.part_era() .style(FormatNumberStyle::Long) .calendar(FormatCalendarStyle::Gregorian) .build(); v7.part_text(" ").build(); v7.part_year().style(FormatNumberStyle::Long).build(); v7.part_text(" ").build(); v7.part_month().style(FormatNumberStyle::Long).build(); v7.part_text(" ").build(); v7.part_day().style(FormatNumberStyle::Long).build(); v7.part_text(" ").build(); v7.part_day_of_week() .style(FormatNumberStyle::Long) .calendar(FormatCalendarStyle::Gregorian) .build(); v7.part_text(" ").build(); v7.part_week_of_year() .calendar(FormatCalendarStyle::Gregorian) .build(); v7.part_text(" ").build(); v7.part_quarter() .style(FormatNumberStyle::Long) .calendar(FormatCalendarStyle::Gregorian) .build(); let v7 = wb.add_datetime_format(v7); let mut v8 = ValueFormatNumber::new_named("v8"); v8.part_number() .min_integer_digits(4) .decimal_places(2) .embedded_text("RR", 2) .build(); let v8 = wb.add_number_format(v8); let f1 = wb.add_cellstyle(CellStyle::new("f1", &v1)); let f2 = wb.add_cellstyle(CellStyle::new("f2", &v2)); let f3 = wb.add_cellstyle(CellStyle::new("f3", &v3)); let f31 = wb.add_cellstyle(CellStyle::new("f31", &v31)); let f4 = wb.add_cellstyle(CellStyle::new("f4", &v4)); let f5 = wb.add_cellstyle(CellStyle::new("f5", &v5)); let f6 = wb.add_cellstyle(CellStyle::new("f6", &v6)); let f7 = wb.add_cellstyle(CellStyle::new("f7", &v7)); let f8 = wb.add_cellstyle(CellStyle::new("f8", &v8)); let mut sh = Sheet::new("1"); sh.set_styled_value(0, 0, 1.234567f64, &f1); sh.set_styled_value(1, 0, 1.234567f64, &f2); sh.set_styled_value(2, 0, 1.234567f64, &f3); sh.set_styled_value(2, 1, 1.234567f64, &f31); sh.set_styled_value(3, 0, 1.234567f64, &f4); sh.set_styled_value(4, 0, 1.234567f64, &f5); sh.set_styled_value(6, 0, 1.234567f64, &f6); sh.set_styled_value( 7, 0, NaiveDateTime::new( NaiveDate::from_ymd_opt(2000, 1, 1).expect("date"), NaiveTime::from_hms_opt(11, 21, 17).expect("time"), ), &f7, ); sh.set_styled_value(8, 0, 1.234567f64, &f8); wb.push_sheet(sh); let path = std::path::Path::new("test_out/test_format.ods"); if path.exists() { test_write_ods(&mut wb, path) } else { std::fs::create_dir_all(path.parent().unwrap())?; std::fs::File::create(path)?; test_write_ods(&mut wb, path) } }