use color::Rgb;
use icu_locale_core::locale;
use spreadsheet_ods::style::units::{Border, Margin, PrintCentering};
use spreadsheet_ods::style::{HeaderFooter, MasterPage, PageStyle, TableStyle};
use spreadsheet_ods::text::{
MetaAuthorName, MetaDate, MetaPageCount, MetaPageNumber, MetaTime, TextP, TextS,
};
use spreadsheet_ods::{cm, pt, write_ods, CellRange, OdsResult, Sheet, WorkBook};
pub fn main() -> OdsResult<()> {
printing()?;
cell_grid()?;
Ok(())
}
fn cell_grid() -> OdsResult<()> {
let mut wb = WorkBook::new(locale!("de-AT"));
let mut sh = Sheet::new("grouping");
sheet_data(&mut sh);
sh.set_col_width(0, cm!(0.55));
sh.set_col_width(1, cm!(0.90));
sh.set_col_width(2, cm!(1.48));
sh.set_col_width(3, cm!(2.44));
sh.set_col_width(4, cm!(4));
sh.config_mut().show_grid = false;
sh.add_col_group(1, 2);
sh.add_col_group(3, 4);
sh.split_row_header(1);
sh.set_col_span(0, 0, 5);
wb.push_sheet(sh);
write_ods(&mut wb, "examples_out/visual.ods")?;
Ok(())
}
fn printing() -> OdsResult<()> {
let mut wb = WorkBook::new(locale!("de-AT"));
let mut s_page = PageStyle::new("one");
s_page.set_table_centering(PrintCentering::Both);
s_page.set_margin(Margin::Length(cm!(1)));
s_page.set_border(pt!(1), Border::Dotted, Rgb::new(0, 0, 0));
let s_footer = s_page.footerstyle_mut();
s_footer.set_background_color(Rgb::new(248, 128, 128));
s_footer.set_dynamic_spacing(false);
s_footer.set_min_height(cm!(0.7));
s_footer.set_margin(Margin::Length(cm!(0)));
let s_page = wb.add_pagestyle(s_page);
let mut m_page = MasterPage::new("one");
m_page.set_pagestyle(&s_page);
let mut m_footer = HeaderFooter::new();
m_footer.add_left(TextP::new().tag(MetaAuthorName::new()).into_xmltag());
m_footer.add_center(
TextP::new()
.tag(MetaPageNumber::new())
.tag(TextS::new())
.text("/")
.tag(TextS::new())
.tag(MetaPageCount::new())
.into_xmltag(),
);
m_footer.add_right(
TextP::new()
.tag(MetaDate::new())
.tag(TextS::new())
.tag(MetaTime::new())
.into_xmltag(),
);
m_page.set_footer(m_footer);
let m_page = wb.add_masterpage(m_page);
let mut s_table = TableStyle::new("one");
s_table.set_master_page(&m_page);
let s_table = wb.add_tablestyle(s_table);
let mut sh = Sheet::new("one");
sh.set_style(&s_table);
sheet_data(&mut sh);
sh.set_header_rows(0, 1);
sh.add_print_range(CellRange::local(1, 0, 1001, 3));
wb.push_sheet(sh);
write_ods(&mut wb, "examples_out/printing.ods")?;
Ok(())
}
fn sheet_data(sh: &mut Sheet) {
sh.set_value(0, 0, "Heading");
let heading = ["A", "B", "C", "D", "E"];
for c in 0..5 {
sh.set_value(1, c, heading[c as usize]);
}
for c in 0..5 {
for r in 0..1000 {
sh.set_value(r + 2, c, r * c);
}
}
}