use rust_xlsxwriter::{
ConditionalFormat2ColorScale, ConditionalFormat3ColorScale, ConditionalFormatAverage,
ConditionalFormatAverageRule, ConditionalFormatCell, ConditionalFormatCellRule,
ConditionalFormatDataBar, ConditionalFormatDataBarDirection, ConditionalFormatDuplicate,
ConditionalFormatFormula, ConditionalFormatIconSet, ConditionalFormatIconType,
ConditionalFormatText, ConditionalFormatTextRule, ConditionalFormatTop, Format, Workbook,
XlsxError,
};
fn main() -> Result<(), XlsxError> {
let mut workbook = Workbook::new();
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 bold = Format::new().set_bold();
let indent = Format::new().set_indent(2);
let data = [
[34, 72, 38, 30, 75, 48, 75, 66, 84, 86],
[6, 24, 1, 84, 54, 62, 60, 3, 26, 59],
[28, 79, 97, 13, 85, 93, 93, 22, 5, 14],
[27, 71, 40, 17, 18, 79, 90, 93, 29, 47],
[88, 25, 33, 23, 67, 1, 59, 79, 47, 36],
[24, 100, 20, 88, 29, 33, 38, 54, 54, 88],
[6, 57, 88, 28, 10, 26, 37, 7, 41, 48],
[52, 78, 1, 96, 26, 45, 47, 33, 96, 36],
[60, 54, 81, 66, 81, 90, 80, 93, 12, 55],
[70, 5, 46, 14, 71, 19, 66, 36, 41, 21],
];
let caption = "Cells with values >= 50 are in light red. Values < 50 are in light green.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::GreaterThanOrEqualTo(50))
.set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::LessThan(50))
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption =
"Values between 30 and 70 are in light red. Values outside that range are in light green.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::Between(30, 70))
.set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::NotBetween(30, 70))
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption = "Duplicate values are in light red. Unique values are in light green.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatDuplicate::new().set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatDuplicate::new()
.invert()
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption = "Above average values are in light red. Below average values are in light green.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatAverage::new().set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatAverage::new()
.set_rule(ConditionalFormatAverageRule::BelowAverage)
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption = "Top 10 values are in light red. Bottom 10 values are in light green.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatTop::new()
.set_rule(rust_xlsxwriter::ConditionalFormatTopRule::Top(10))
.set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatTop::new()
.set_rule(rust_xlsxwriter::ConditionalFormatTopRule::Bottom(10))
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption = "Cells with values >= 50 are in light red. Values < 50 are in light green. Non-contiguous ranges.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::GreaterThanOrEqualTo(50))
.set_multi_range("B3:D6 I3:K6 B9:D12 I9:K12")
.set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatCell::new()
.set_rule(ConditionalFormatCellRule::LessThan(50))
.set_multi_range("B3:D6 I3:K6 B9:D12 I9:K12")
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption = "Even numbered cells are in light green. Odd numbered cells are in light red.";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
worksheet.write_row_matrix(2, 1, data)?;
worksheet.set_column_range_width(1, 10, 6)?;
let conditional_format = ConditionalFormatFormula::new()
.set_rule("=ISODD(B3)")
.set_format(&format1);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let conditional_format = ConditionalFormatFormula::new()
.set_rule("=ISEVEN(B3)")
.set_format(&format2);
worksheet.add_conditional_format(2, 1, 11, 10, &conditional_format)?;
let caption =
"Column A shows words that contain the sub-word 'rust'. Column C shows words that start/end with 't'";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 0, caption)?;
let word_list = [
"apocrustic",
"burstwort",
"cloudburst",
"crustification",
"distrustfulness",
"laurustine",
"outburst",
"rusticism",
"thunderburst",
"trustee",
"trustworthiness",
"unburstableness",
"unfrustratable",
];
worksheet.write_column(1, 0, word_list)?;
worksheet.write_column(1, 2, word_list)?;
worksheet.set_column_width(0, 20)?;
worksheet.set_column_width(2, 20)?;
let conditional_format = ConditionalFormatText::new()
.set_rule(ConditionalFormatTextRule::Contains("rust".to_string()))
.set_format(&format2);
worksheet.add_conditional_format(1, 0, 13, 0, &conditional_format)?;
let conditional_format = ConditionalFormatText::new()
.set_rule(ConditionalFormatTextRule::DoesNotContain(
"rust".to_string(),
))
.set_format(&format1);
worksheet.add_conditional_format(1, 0, 13, 0, &conditional_format)?;
let conditional_format = ConditionalFormatText::new()
.set_rule(ConditionalFormatTextRule::BeginsWith("t".to_string()))
.set_format(&format2);
worksheet.add_conditional_format(1, 2, 13, 2, &conditional_format)?;
let conditional_format = ConditionalFormatText::new()
.set_rule(ConditionalFormatTextRule::EndsWith("t".to_string()))
.set_format(&format1);
worksheet.add_conditional_format(1, 2, 13, 2, &conditional_format)?;
let caption = "Examples of 2 color scale conditional formats";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
worksheet.write_column(2, 1, data)?;
worksheet.write_column(2, 3, data)?;
worksheet.write_column(2, 5, data)?;
worksheet.write_column(2, 7, data)?;
worksheet.write_column(2, 9, data)?;
worksheet.write_column(2, 11, data)?;
worksheet.set_column_range_width(0, 12, 6)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("F8696B")
.set_maximum_color("FCFCFF");
worksheet.add_conditional_format(2, 1, 11, 1, &conditional_format)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("FCFCFF")
.set_maximum_color("F8696B");
worksheet.add_conditional_format(2, 3, 11, 3, &conditional_format)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("FCFCFF")
.set_maximum_color("63BE7B");
worksheet.add_conditional_format(2, 5, 11, 5, &conditional_format)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("63BE7B")
.set_maximum_color("FCFCFF");
worksheet.add_conditional_format(2, 7, 11, 7, &conditional_format)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("FFEF9C")
.set_maximum_color("63BE7B");
worksheet.add_conditional_format(2, 9, 11, 9, &conditional_format)?;
let conditional_format = ConditionalFormat2ColorScale::new()
.set_minimum_color("63BE7B")
.set_maximum_color("FFEF9C");
worksheet.add_conditional_format(2, 11, 11, 11, &conditional_format)?;
let caption = "Examples of 3 color scale conditional formats";
let worksheet = workbook.add_worksheet();
worksheet.write(0, 1, caption)?;
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
worksheet.write_column(2, 1, data)?;
worksheet.write_column(2, 3, data)?;
worksheet.write_column(2, 5, data)?;
worksheet.write_column(2, 7, data)?;
worksheet.write_column(2, 9, data)?;
worksheet.write_column(2, 11, data)?;
worksheet.set_column_range_width(0, 12, 6)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("F8696B")
.set_midpoint_color("FFEB84")
.set_maximum_color("63BE7B");
worksheet.add_conditional_format(2, 1, 11, 1, &conditional_format)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("63BE7B")
.set_midpoint_color("FFEB84")
.set_maximum_color("F8696B");
worksheet.add_conditional_format(2, 3, 11, 3, &conditional_format)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("F8696B")
.set_midpoint_color("FCFCFF")
.set_maximum_color("63BE7B");
worksheet.add_conditional_format(2, 5, 11, 5, &conditional_format)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("63BE7B")
.set_midpoint_color("FCFCFF")
.set_maximum_color("F8696B");
worksheet.add_conditional_format(2, 7, 11, 7, &conditional_format)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("F8696B")
.set_midpoint_color("FCFCFF")
.set_maximum_color("5A8AC6");
worksheet.add_conditional_format(2, 9, 11, 9, &conditional_format)?;
let conditional_format = ConditionalFormat3ColorScale::new()
.set_minimum_color("5A8AC6")
.set_midpoint_color("FCFCFF")
.set_maximum_color("F8696B");
worksheet.add_conditional_format(2, 11, 11, 11, &conditional_format)?;
let caption = "Examples of data bars";
let worksheet = workbook.add_worksheet();
worksheet.write_with_format(0, 1, caption, &bold)?;
worksheet.write(1, 1, "Default")?;
worksheet.write(1, 3, "Default negative")?;
worksheet.write(1, 5, "User color")?;
worksheet.write(1, 7, "Changed direction")?;
let data1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let data2 = [6, 4, 2, -2, -4, -6, -4, -2, 2, 4];
worksheet.write_column(2, 1, data1)?;
worksheet.write_column(2, 3, data2)?;
worksheet.write_column(2, 5, data1)?;
worksheet.write_column(2, 7, data1)?;
let conditional_format = ConditionalFormatDataBar::new();
worksheet.add_conditional_format(2, 1, 11, 1, &conditional_format)?;
let conditional_format = ConditionalFormatDataBar::new();
worksheet.add_conditional_format(2, 3, 11, 3, &conditional_format)?;
let conditional_format = ConditionalFormatDataBar::new().set_fill_color("009933");
worksheet.add_conditional_format(2, 5, 11, 5, &conditional_format)?;
let conditional_format = ConditionalFormatDataBar::new()
.set_direction(ConditionalFormatDataBarDirection::RightToLeft);
worksheet.add_conditional_format(2, 7, 11, 7, &conditional_format)?;
let caption = "Examples of icon style conditional formats.";
let worksheet = workbook.add_worksheet();
worksheet.write_with_format(0, 0, caption, &bold)?;
worksheet.write_with_format(1, 0, "Three Traffic lights - Green is highest", &indent)?;
worksheet.write_with_format(2, 0, "Reversed - Red is highest", &indent)?;
worksheet.write_with_format(3, 0, "Icons only - The number data is hidden", &indent)?;
worksheet.write_with_format(4, 0, "Other three-five icon examples", &bold)?;
worksheet.write_with_format(5, 0, "Three arrows", &indent)?;
worksheet.write_with_format(6, 0, "Three symbols", &indent)?;
worksheet.write_with_format(7, 0, "Three stars", &indent)?;
worksheet.write_with_format(8, 0, "Four arrows", &indent)?;
worksheet.write_with_format(9, 0, "Four circles - Red (highest) to Black", &indent)?;
worksheet.write_with_format(10, 0, "Four rating histograms", &indent)?;
worksheet.write_with_format(11, 0, "Five arrows", &indent)?;
worksheet.write_with_format(12, 0, "Five rating histograms", &indent)?;
worksheet.write_with_format(13, 0, "Five rating quadrants", &indent)?;
worksheet.set_column_width(0, 35)?;
worksheet.write_row(1, 1, [1, 2, 3])?;
worksheet.write_row(2, 1, [1, 2, 3])?;
worksheet.write_row(3, 1, [1, 2, 3])?;
worksheet.write_row(5, 1, [1, 2, 3])?;
worksheet.write_row(6, 1, [1, 2, 3])?;
worksheet.write_row(7, 1, [1, 2, 3])?;
worksheet.write_row(8, 1, [1, 2, 3, 4])?;
worksheet.write_row(9, 1, [1, 2, 3, 4])?;
worksheet.write_row(10, 1, [1, 2, 3, 4])?;
worksheet.write_row(11, 1, [1, 2, 3, 4, 5])?;
worksheet.write_row(12, 1, [1, 2, 3, 4, 5])?;
worksheet.write_row(13, 1, [1, 2, 3, 4, 5])?;
let conditional_format = ConditionalFormatIconSet::new()
.set_icon_type(ConditionalFormatIconType::ThreeTrafficLights);
worksheet.add_conditional_format(1, 1, 1, 3, &conditional_format)?;
let conditional_format = ConditionalFormatIconSet::new()
.set_icon_type(ConditionalFormatIconType::ThreeTrafficLights)
.reverse_icons(true);
worksheet.add_conditional_format(2, 1, 2, 3, &conditional_format)?;
let conditional_format = ConditionalFormatIconSet::new()
.set_icon_type(ConditionalFormatIconType::ThreeTrafficLights)
.show_icons_only(true);
worksheet.add_conditional_format(3, 1, 3, 3, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::ThreeArrows);
worksheet.add_conditional_format(5, 1, 5, 3, &conditional_format)?;
let conditional_format = ConditionalFormatIconSet::new()
.set_icon_type(ConditionalFormatIconType::ThreeSymbolsCircled);
worksheet.add_conditional_format(6, 1, 6, 3, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::ThreeStars);
worksheet.add_conditional_format(7, 1, 7, 3, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FourArrows);
worksheet.add_conditional_format(8, 1, 8, 4, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FourRedToBlack);
worksheet.add_conditional_format(9, 1, 9, 4, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FourHistograms);
worksheet.add_conditional_format(10, 1, 10, 4, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FiveArrows);
worksheet.add_conditional_format(11, 1, 11, 5, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FiveHistograms);
worksheet.add_conditional_format(12, 1, 12, 5, &conditional_format)?;
let conditional_format =
ConditionalFormatIconSet::new().set_icon_type(ConditionalFormatIconType::FiveQuadrants);
worksheet.add_conditional_format(13, 1, 13, 5, &conditional_format)?;
workbook.save("conditional_formats.xlsx")?;
Ok(())
}