use rust_xlsxwriter::{
ConditionalFormatDate, ConditionalFormatDateRule, ExcelDateTime, Format, Workbook, XlsxError,
};
fn main() -> Result<(), XlsxError> {
let mut workbook = Workbook::new();
let worksheet = workbook.add_worksheet();
let date_format = Format::new().set_num_format("yyyy-mm-dd");
let dates = [
"2023-10-01",
"2023-11-05",
"2023-11-06",
"2023-10-04",
"2023-11-11",
"2023-11-02",
"2023-11-04",
"2023-11-12",
"2023-12-01",
"2023-12-13",
"2023-11-13",
];
let dates: Result<Vec<ExcelDateTime>, XlsxError> = dates
.into_iter()
.map(ExcelDateTime::parse_from_str)
.collect();
let dates = dates?;
worksheet.write_column_with_format(0, 0, dates, &date_format)?;
worksheet.set_column_width(0, 20)?;
let format1 = Format::new()
.set_font_color("9C0006")
.set_background_color("FFC7CE");
let format2 = Format::new()
.set_font_color("006100")
.set_background_color("C6EFCE");
let format3 = Format::new()
.set_font_color("9C6500")
.set_background_color("FFEB9C");
let conditional_format = ConditionalFormatDate::new()
.set_rule(ConditionalFormatDateRule::LastMonth)
.set_format(format1);
worksheet.add_conditional_format(0, 0, 10, 0, &conditional_format)?;
let conditional_format = ConditionalFormatDate::new()
.set_rule(ConditionalFormatDateRule::ThisMonth)
.set_format(format2);
worksheet.add_conditional_format(0, 0, 10, 0, &conditional_format)?;
let conditional_format = ConditionalFormatDate::new()
.set_rule(ConditionalFormatDateRule::NextMonth)
.set_format(format3);
worksheet.add_conditional_format(0, 0, 10, 0, &conditional_format)?;
workbook.save("conditional_format.xlsx")?;
Ok(())
}