123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287 |
- /*
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ====================================================================
- */
-
- package org.apache.poi.ss.usermodel;
-
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertFalse;
- import static org.junit.Assert.assertNotNull;
- import static org.junit.Assert.assertNull;
- import static org.junit.Assert.assertTrue;
- import static org.junit.Assert.fail;
-
- import java.io.IOException;
-
- import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting;
- import org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule;
- import org.apache.poi.ss.ITestDataProvider;
- import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;
- import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.junit.Test;
-
- /**
- * Base tests for Conditional Formatting, for both HSSF and XSSF
- */
- public abstract class BaseTestConditionalFormatting {
- private final ITestDataProvider _testDataProvider;
-
- public BaseTestConditionalFormatting(ITestDataProvider testDataProvider){
- _testDataProvider = testDataProvider;
- }
-
- protected abstract void assertColour(String hexExpected, Color actual);
-
- @Test
- public void testBasic() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sh = wb.createSheet();
- SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting();
-
- assertEquals(0, sheetCF.getNumConditionalFormattings());
- try {
- assertNull(sheetCF.getConditionalFormattingAt(0));
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range"));
- }
-
- try {
- sheetCF.removeConditionalFormatting(0);
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range"));
- }
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("1");
- ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule("2");
- ConditionalFormattingRule rule3 = sheetCF.createConditionalFormattingRule("3");
- ConditionalFormattingRule rule4 = sheetCF.createConditionalFormattingRule("4");
- try {
- sheetCF.addConditionalFormatting(null, rule1);
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("regions must not be null"));
- }
- try {
- sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{ CellRangeAddress.valueOf("A1:A3") },
- (ConditionalFormattingRule)null);
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("cfRules must not be null"));
- }
-
- try {
- sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{ CellRangeAddress.valueOf("A1:A3") },
- new ConditionalFormattingRule[0]);
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("cfRules must not be empty"));
- }
-
- try {
- sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{ CellRangeAddress.valueOf("A1:A3") },
- new ConditionalFormattingRule[]{rule1, rule2, rule3, rule4});
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Number of rules must not exceed 3"));
- }
- wb.close();
- }
-
- /**
- * Test format conditions based on a boolean formula
- */
- @Test
- @SuppressWarnings("deprecation")
- public void testBooleanFormulaConditions() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sh = wb.createSheet();
- SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("SUM(A1:A5)>10");
- assertEquals(ConditionType.FORMULA.id, rule1.getConditionType());
- assertEquals(ConditionType.FORMULA, rule1.getConditionTypeType());
- assertEquals("SUM(A1:A5)>10", rule1.getFormula1());
- int formatIndex1 = sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{
- CellRangeAddress.valueOf("B1"),
- CellRangeAddress.valueOf("C3"),
- }, rule1);
- assertEquals(0, formatIndex1);
- assertEquals(1, sheetCF.getNumConditionalFormattings());
- CellRangeAddress[] ranges1 = sheetCF.getConditionalFormattingAt(formatIndex1).getFormattingRanges();
- assertEquals(2, ranges1.length);
- assertEquals("B1", ranges1[0].formatAsString());
- assertEquals("C3", ranges1[1].formatAsString());
-
- // adjacent address are merged
- int formatIndex2 = sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{
- CellRangeAddress.valueOf("B1"),
- CellRangeAddress.valueOf("B2"),
- CellRangeAddress.valueOf("B3"),
- }, rule1);
- assertEquals(1, formatIndex2);
- assertEquals(2, sheetCF.getNumConditionalFormattings());
- CellRangeAddress[] ranges2 = sheetCF.getConditionalFormattingAt(formatIndex2).getFormattingRanges();
- assertEquals(1, ranges2.length);
- assertEquals("B1:B3", ranges2[0].formatAsString());
- wb.close();
- }
-
- @Test
- @SuppressWarnings("deprecation")
- public void testSingleFormulaConditions() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sh = wb.createSheet();
- SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.EQUAL, "SUM(A1:A5)+10");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule1.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule1.getConditionTypeType());
- assertEquals("SUM(A1:A5)+10", rule1.getFormula1());
- assertEquals(ComparisonOperator.EQUAL, rule1.getComparisonOperation());
-
- ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.NOT_EQUAL, "15");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule2.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule2.getConditionTypeType());
- assertEquals("15", rule2.getFormula1());
- assertEquals(ComparisonOperator.NOT_EQUAL, rule2.getComparisonOperation());
-
- ConditionalFormattingRule rule3 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.NOT_EQUAL, "15");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule3.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule3.getConditionTypeType());
- assertEquals("15", rule3.getFormula1());
- assertEquals(ComparisonOperator.NOT_EQUAL, rule3.getComparisonOperation());
-
- ConditionalFormattingRule rule4 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.GT, "0");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule4.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule4.getConditionTypeType());
- assertEquals("0", rule4.getFormula1());
- assertEquals(ComparisonOperator.GT, rule4.getComparisonOperation());
-
- ConditionalFormattingRule rule5 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.LT, "0");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule5.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule5.getConditionTypeType());
- assertEquals("0", rule5.getFormula1());
- assertEquals(ComparisonOperator.LT, rule5.getComparisonOperation());
-
- ConditionalFormattingRule rule6 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.GE, "0");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule6.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule6.getConditionTypeType());
- assertEquals("0", rule6.getFormula1());
- assertEquals(ComparisonOperator.GE, rule6.getComparisonOperation());
-
- ConditionalFormattingRule rule7 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.LE, "0");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule7.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule7.getConditionTypeType());
- assertEquals("0", rule7.getFormula1());
- assertEquals(ComparisonOperator.LE, rule7.getComparisonOperation());
-
- ConditionalFormattingRule rule8 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.BETWEEN, "0", "5");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule8.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule8.getConditionTypeType());
- assertEquals("0", rule8.getFormula1());
- assertEquals("5", rule8.getFormula2());
- assertEquals(ComparisonOperator.BETWEEN, rule8.getComparisonOperation());
-
- ConditionalFormattingRule rule9 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.NOT_BETWEEN, "0", "5");
- assertEquals(ConditionType.CELL_VALUE_IS.id, rule9.getConditionType());
- assertEquals(ConditionType.CELL_VALUE_IS, rule9.getConditionTypeType());
- assertEquals("0", rule9.getFormula1());
- assertEquals("5", rule9.getFormula2());
- assertEquals(ComparisonOperator.NOT_BETWEEN, rule9.getComparisonOperation());
-
- wb.close();
- }
-
- @Test
- @SuppressWarnings("deprecation")
- public void testCopy() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet1 = wb.createSheet();
- Sheet sheet2 = wb.createSheet();
- SheetConditionalFormatting sheet1CF = sheet1.getSheetConditionalFormatting();
- SheetConditionalFormatting sheet2CF = sheet2.getSheetConditionalFormatting();
- assertEquals(0, sheet1CF.getNumConditionalFormattings());
- assertEquals(0, sheet2CF.getNumConditionalFormattings());
-
- ConditionalFormattingRule rule1 = sheet1CF.createConditionalFormattingRule(
- ComparisonOperator.EQUAL, "SUM(A1:A5)+10");
-
- ConditionalFormattingRule rule2 = sheet1CF.createConditionalFormattingRule(
- ComparisonOperator.NOT_EQUAL, "15");
-
- // adjacent address are merged
- int formatIndex = sheet1CF.addConditionalFormatting(
- new CellRangeAddress[]{
- CellRangeAddress.valueOf("A1:A5"),
- CellRangeAddress.valueOf("C1:C5")
- }, rule1, rule2);
- assertEquals(0, formatIndex);
- assertEquals(1, sheet1CF.getNumConditionalFormattings());
-
- assertEquals(0, sheet2CF.getNumConditionalFormattings());
- sheet2CF.addConditionalFormatting(sheet1CF.getConditionalFormattingAt(formatIndex));
- assertEquals(1, sheet2CF.getNumConditionalFormattings());
-
- ConditionalFormatting sheet2cf = sheet2CF.getConditionalFormattingAt(0);
- assertEquals(2, sheet2cf.getNumberOfRules());
- assertEquals("SUM(A1:A5)+10", sheet2cf.getRule(0).getFormula1());
- assertEquals(ComparisonOperator.EQUAL, sheet2cf.getRule(0).getComparisonOperation());
- assertEquals(ConditionalFormattingRule.CONDITION_TYPE_CELL_VALUE_IS, sheet2cf.getRule(0).getConditionType());
- assertEquals("15", sheet2cf.getRule(1).getFormula1());
- assertEquals(ComparisonOperator.NOT_EQUAL, sheet2cf.getRule(1).getComparisonOperation());
- assertEquals(ConditionalFormattingRule.CONDITION_TYPE_CELL_VALUE_IS, sheet2cf.getRule(1).getConditionType());
-
- wb.close();
- }
-
- @Test
- public void testRemove() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet1 = wb.createSheet();
- SheetConditionalFormatting sheetCF = sheet1.getSheetConditionalFormatting();
- assertEquals(0, sheetCF.getNumConditionalFormattings());
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.EQUAL, "SUM(A1:A5)");
-
- // adjacent address are merged
- int formatIndex = sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{
- CellRangeAddress.valueOf("A1:A5")
- }, rule1);
- assertEquals(0, formatIndex);
- assertEquals(1, sheetCF.getNumConditionalFormattings());
- sheetCF.removeConditionalFormatting(0);
- assertEquals(0, sheetCF.getNumConditionalFormattings());
- try {
- assertNull(sheetCF.getConditionalFormattingAt(0));
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range"));
- }
-
- formatIndex = sheetCF.addConditionalFormatting(
- new CellRangeAddress[]{
- CellRangeAddress.valueOf("A1:A5")
- }, rule1);
- assertEquals(0, formatIndex);
- assertEquals(1, sheetCF.getNumConditionalFormattings());
- sheetCF.removeConditionalFormatting(0);
- assertEquals(0, sheetCF.getNumConditionalFormattings());
- try {
- assertNull(sheetCF.getConditionalFormattingAt(0));
- fail("expected exception");
- } catch (IllegalArgumentException e) {
- assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range"));
- }
-
- wb.close();
- }
-
- @Test
- public void testCreateCF() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- String formula = "7";
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(formula);
- FontFormatting fontFmt = rule1.createFontFormatting();
- fontFmt.setFontStyle(true, false);
-
- BorderFormatting bordFmt = rule1.createBorderFormatting();
- bordFmt.setBorderBottom(BorderStyle.THIN);
- bordFmt.setBorderTop(BorderStyle.THICK);
- bordFmt.setBorderLeft(BorderStyle.DASHED);
- bordFmt.setBorderRight(BorderStyle.DOTTED);
-
- PatternFormatting patternFmt = rule1.createPatternFormatting();
- patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
-
-
- ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.BETWEEN, "1", "2");
- ConditionalFormattingRule [] cfRules =
- {
- rule1, rule2
- };
-
- short col = 1;
- CellRangeAddress [] regions = {
- new CellRangeAddress(0, 65535, col, col)
- };
-
- sheetCF.addConditionalFormatting(regions, cfRules);
- sheetCF.addConditionalFormatting(regions, cfRules);
-
- // Verification
- assertEquals(2, sheetCF.getNumConditionalFormattings());
- sheetCF.removeConditionalFormatting(1);
- assertEquals(1, sheetCF.getNumConditionalFormattings());
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertNotNull(cf);
-
- regions = cf.getFormattingRanges();
- assertNotNull(regions);
- assertEquals(1, regions.length);
- CellRangeAddress r = regions[0];
- assertEquals(1, r.getFirstColumn());
- assertEquals(1, r.getLastColumn());
- assertEquals(0, r.getFirstRow());
- assertEquals(65535, r.getLastRow());
-
- assertEquals(2, cf.getNumberOfRules());
-
- rule1 = cf.getRule(0);
- assertEquals("7",rule1.getFormula1());
- assertNull(rule1.getFormula2());
-
- FontFormatting r1fp = rule1.getFontFormatting();
- assertNotNull(r1fp);
-
- assertTrue(r1fp.isItalic());
- assertFalse(r1fp.isBold());
-
- BorderFormatting r1bf = rule1.getBorderFormatting();
- assertNotNull(r1bf);
- assertEquals(BorderStyle.THIN, r1bf.getBorderBottom());
- assertEquals(BorderStyle.THICK,r1bf.getBorderTop());
- assertEquals(BorderStyle.DASHED,r1bf.getBorderLeft());
- assertEquals(BorderStyle.DOTTED,r1bf.getBorderRight());
-
- PatternFormatting r1pf = rule1.getPatternFormatting();
- assertNotNull(r1pf);
- // assertEquals(IndexedColors.YELLOW.index,r1pf.getFillBackgroundColor());
-
- rule2 = cf.getRule(1);
- assertEquals("2",rule2.getFormula2());
- assertEquals("1",rule2.getFormula1());
-
- workbook.close();
- }
-
- @Test
- public void testClone() throws IOException {
-
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- String formula = "7";
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(formula);
- FontFormatting fontFmt = rule1.createFontFormatting();
- fontFmt.setFontStyle(true, false);
-
- PatternFormatting patternFmt = rule1.createPatternFormatting();
- patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
-
-
- ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.BETWEEN, "1", "2");
- ConditionalFormattingRule [] cfRules =
- {
- rule1, rule2
- };
-
- short col = 1;
- CellRangeAddress [] regions = {
- new CellRangeAddress(0, 65535, col, col)
- };
-
- sheetCF.addConditionalFormatting(regions, cfRules);
-
- try {
- wb.cloneSheet(0);
- assertEquals(2, wb.getNumberOfSheets());
- } catch (RuntimeException e) {
- if (e.getMessage().indexOf("needs to define a clone method") > 0) {
- fail("Indentified bug 45682");
- }
- throw e;
- } finally {
- wb.close();
- }
- }
-
- @Test
- public void testShiftRows() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.BETWEEN, "SUM(A10:A15)", "1+SUM(B16:B30)");
- FontFormatting fontFmt = rule1.createFontFormatting();
- fontFmt.setFontStyle(true, false);
-
- PatternFormatting patternFmt = rule1.createPatternFormatting();
- patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index);
-
- ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(
- ComparisonOperator.BETWEEN, "SUM(A10:A15)", "1+SUM(B16:B30)");
- BorderFormatting borderFmt = rule2.createBorderFormatting();
- borderFmt.setBorderDiagonal(BorderStyle.MEDIUM);
-
- CellRangeAddress [] regions = {
- new CellRangeAddress(2, 4, 0, 0), // A3:A5
- };
- sheetCF.addConditionalFormatting(regions, rule1);
- sheetCF.addConditionalFormatting(regions, rule2);
-
- // This row-shift should destroy the CF region
- sheet.shiftRows(10, 20, -9);
- assertEquals(0, sheetCF.getNumConditionalFormattings());
-
- // re-add the CF
- sheetCF.addConditionalFormatting(regions, rule1);
- sheetCF.addConditionalFormatting(regions, rule2);
-
- // This row shift should only affect the formulas
- sheet.shiftRows(14, 17, 8);
- ConditionalFormatting cf1 = sheetCF.getConditionalFormattingAt(0);
- assertEquals("SUM(A10:A23)", cf1.getRule(0).getFormula1());
- assertEquals("1+SUM(B24:B30)", cf1.getRule(0).getFormula2());
- ConditionalFormatting cf2 = sheetCF.getConditionalFormattingAt(1);
- assertEquals("SUM(A10:A23)", cf2.getRule(0).getFormula1());
- assertEquals("1+SUM(B24:B30)", cf2.getRule(0).getFormula2());
-
- sheet.shiftRows(0, 8, 21);
- cf1 = sheetCF.getConditionalFormattingAt(0);
- assertEquals("SUM(A10:A21)", cf1.getRule(0).getFormula1());
- assertEquals("1+SUM(#REF!)", cf1.getRule(0).getFormula2());
- cf2 = sheetCF.getConditionalFormattingAt(1);
- assertEquals("SUM(A10:A21)", cf2.getRule(0).getFormula1());
- assertEquals("1+SUM(#REF!)", cf2.getRule(0).getFormula2());
-
- wb.close();
- }
-
- protected void testRead(String filename) throws IOException {
- Workbook wb = _testDataProvider.openSampleWorkbook(filename);
- Sheet sh = wb.getSheet("CF");
- SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting();
- assertEquals(3, sheetCF.getNumConditionalFormattings());
-
- ConditionalFormatting cf1 = sheetCF.getConditionalFormattingAt(0);
- assertEquals(2, cf1.getNumberOfRules());
-
- CellRangeAddress[] regions1 = cf1.getFormattingRanges();
- assertEquals(1, regions1.length);
- assertEquals("A1:A8", regions1[0].formatAsString());
-
- // CF1 has two rules: values less than -3 are bold-italic red, values greater than 3 are green
- ConditionalFormattingRule rule1 = cf1.getRule(0);
- assertEquals(ConditionType.CELL_VALUE_IS, rule1.getConditionTypeType());
- assertEquals(ComparisonOperator.GT, rule1.getComparisonOperation());
- assertEquals("3", rule1.getFormula1());
- assertNull(rule1.getFormula2());
- // fills and borders are not set
- assertNull(rule1.getPatternFormatting());
- assertNull(rule1.getBorderFormatting());
-
- FontFormatting fmt1 = rule1.getFontFormatting();
- // assertEquals(IndexedColors.GREEN.index, fmt1.getFontColorIndex());
- assertTrue(fmt1.isBold());
- assertFalse(fmt1.isItalic());
-
- ConditionalFormattingRule rule2 = cf1.getRule(1);
- assertEquals(ConditionType.CELL_VALUE_IS, rule2.getConditionTypeType());
- assertEquals(ComparisonOperator.LT, rule2.getComparisonOperation());
- assertEquals("-3", rule2.getFormula1());
- assertNull(rule2.getFormula2());
- assertNull(rule2.getPatternFormatting());
- assertNull(rule2.getBorderFormatting());
-
- FontFormatting fmt2 = rule2.getFontFormatting();
- // assertEquals(IndexedColors.RED.index, fmt2.getFontColorIndex());
- assertTrue(fmt2.isBold());
- assertTrue(fmt2.isItalic());
-
-
- ConditionalFormatting cf2 = sheetCF.getConditionalFormattingAt(1);
- assertEquals(1, cf2.getNumberOfRules());
- CellRangeAddress[] regions2 = cf2.getFormattingRanges();
- assertEquals(1, regions2.length);
- assertEquals("B9", regions2[0].formatAsString());
-
- ConditionalFormattingRule rule3 = cf2.getRule(0);
- assertEquals(ConditionType.FORMULA, rule3.getConditionTypeType());
- assertEquals(ComparisonOperator.NO_COMPARISON, rule3.getComparisonOperation());
- assertEquals("$A$8>5", rule3.getFormula1());
- assertNull(rule3.getFormula2());
-
- FontFormatting fmt3 = rule3.getFontFormatting();
- // assertEquals(IndexedColors.RED.index, fmt3.getFontColorIndex());
- assertTrue(fmt3.isBold());
- assertTrue(fmt3.isItalic());
-
- PatternFormatting fmt4 = rule3.getPatternFormatting();
- // assertEquals(IndexedColors.LIGHT_CORNFLOWER_BLUE.index, fmt4.getFillBackgroundColor());
- // assertEquals(IndexedColors.AUTOMATIC.index, fmt4.getFillForegroundColor());
- assertEquals(PatternFormatting.NO_FILL, fmt4.getFillPattern());
- // borders are not set
- assertNull(rule3.getBorderFormatting());
-
- ConditionalFormatting cf3 = sheetCF.getConditionalFormattingAt(2);
- CellRangeAddress[] regions3 = cf3.getFormattingRanges();
- assertEquals(1, regions3.length);
- assertEquals("B1:B7", regions3[0].formatAsString());
- assertEquals(2, cf3.getNumberOfRules());
-
- ConditionalFormattingRule rule4 = cf3.getRule(0);
- assertEquals(ConditionType.CELL_VALUE_IS, rule4.getConditionTypeType());
- assertEquals(ComparisonOperator.LE, rule4.getComparisonOperation());
- assertEquals("\"AAA\"", rule4.getFormula1());
- assertNull(rule4.getFormula2());
-
- ConditionalFormattingRule rule5 = cf3.getRule(1);
- assertEquals(ConditionType.CELL_VALUE_IS, rule5.getConditionTypeType());
- assertEquals(ComparisonOperator.BETWEEN, rule5.getComparisonOperation());
- assertEquals("\"A\"", rule5.getFormula1());
- assertEquals("\"AAA\"", rule5.getFormula2());
-
- wb.close();
- }
-
- public void testReadOffice2007(String filename) throws IOException {
- Workbook wb = _testDataProvider.openSampleWorkbook(filename);
- Sheet s = wb.getSheet("CF");
- ConditionalFormatting cf = null;
- ConditionalFormattingRule cr = null;
-
-
- // Sanity check data
- assertEquals("Values", s.getRow(0).getCell(0).toString());
- assertEquals("10.0", s.getRow(2).getCell(0).toString());
-
- // Check we found all the conditional formatting rules we should have
- SheetConditionalFormatting sheetCF = s.getSheetConditionalFormatting();
- int numCF = 3;
- int numCF12 = 15;
- int numCFEX = 0; // TODO This should be 2, but we don't support CFEX formattings yet, see #58149
- assertEquals(numCF+numCF12+numCFEX, sheetCF.getNumConditionalFormattings());
-
- int fCF = 0, fCF12 = 0, fCFEX = 0;
- for (int i=0; i<sheetCF.getNumConditionalFormattings(); i++) {
- cf = sheetCF.getConditionalFormattingAt(i);
- if (cf instanceof HSSFConditionalFormatting) {
- String str = cf.toString();
- if (str.contains("[CF]")) fCF++;
- if (str.contains("[CF12]")) fCF12++;
- if (str.contains("[CFEX]")) fCFEX++;
- } else {
- ConditionType type = cf.getRule(cf.getNumberOfRules()-1).getConditionTypeType();
- if (type == ConditionType.CELL_VALUE_IS ||
- type == ConditionType.FORMULA) {
- fCF++;
- } else {
- // TODO Properly detect Ext ones from the xml
- fCF12++;
- }
- }
- }
- assertEquals(numCF, fCF);
- assertEquals(numCF12, fCF12);
- assertEquals(numCFEX, fCFEX);
-
-
- // Check the rules / values in detail
-
-
- // Highlight Positive values - Column C
- cf = sheetCF.getConditionalFormattingAt(0);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("C2:C17", cf.getFormattingRanges()[0].formatAsString());
-
- assertEquals(1, cf.getNumberOfRules());
- cr = cf.getRule(0);
- assertEquals(ConditionType.CELL_VALUE_IS, cr.getConditionTypeType());
- assertEquals(ComparisonOperator.GT, cr.getComparisonOperation());
- assertEquals("0", cr.getFormula1());
- assertEquals(null, cr.getFormula2());
- // When it matches:
- // Sets the font colour to dark green
- // Sets the background colour to lighter green
- // TODO Should the colours be slightly different between formats? Would CFEX support help for HSSF?
- if (cr instanceof HSSFConditionalFormattingRule) {
- assertColour("0:8080:0", cr.getFontFormatting().getFontColor());
- assertColour("CCCC:FFFF:CCCC", cr.getPatternFormatting().getFillBackgroundColorColor());
- } else {
- assertColour("006100", cr.getFontFormatting().getFontColor());
- assertColour("C6EFCE", cr.getPatternFormatting().getFillBackgroundColorColor());
- }
-
-
- // Highlight 10-30 - Column D
- cf = sheetCF.getConditionalFormattingAt(1);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("D2:D17", cf.getFormattingRanges()[0].formatAsString());
-
- assertEquals(1, cf.getNumberOfRules());
- cr = cf.getRule(0);
- assertEquals(ConditionType.CELL_VALUE_IS, cr.getConditionTypeType());
- assertEquals(ComparisonOperator.BETWEEN, cr.getComparisonOperation());
- assertEquals("10", cr.getFormula1());
- assertEquals("30", cr.getFormula2());
- // When it matches:
- // Sets the font colour to dark red
- // Sets the background colour to lighter red
- // TODO Should the colours be slightly different between formats? Would CFEX support help for HSSF?
- if (cr instanceof HSSFConditionalFormattingRule) {
- assertColour("8080:0:8080", cr.getFontFormatting().getFontColor());
- assertColour("FFFF:9999:CCCC", cr.getPatternFormatting().getFillBackgroundColorColor());
- } else {
- assertColour("9C0006", cr.getFontFormatting().getFontColor());
- assertColour("FFC7CE", cr.getPatternFormatting().getFillBackgroundColorColor());
- }
-
-
- // Data Bars - Column E
- cf = sheetCF.getConditionalFormattingAt(2);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("E2:E17", cf.getFormattingRanges()[0].formatAsString());
- assertDataBar(cf, "FF63C384");
-
-
- // Colours Red->Yellow->Green - Column F
- cf = sheetCF.getConditionalFormattingAt(3);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("F2:F17", cf.getFormattingRanges()[0].formatAsString());
- assertColorScale(cf, "F8696B", "FFEB84", "63BE7B");
-
-
- // Colours Blue->White->Red - Column G
- cf = sheetCF.getConditionalFormattingAt(4);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("G2:G17", cf.getFormattingRanges()[0].formatAsString());
- assertColorScale(cf, "5A8AC6", "FCFCFF", "F8696B");
-
-
- // Icons : Default - Column H, percentage thresholds
- cf = sheetCF.getConditionalFormattingAt(5);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("H2:H17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_TRAFFIC_LIGHTS, 0d, 33d, 67d);
-
-
- // Icons : 3 signs - Column I
- cf = sheetCF.getConditionalFormattingAt(6);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("I2:I17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_SHAPES, 0d, 33d, 67d);
-
-
- // Icons : 3 traffic lights 2 - Column J
- cf = sheetCF.getConditionalFormattingAt(7);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("J2:J17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_TRAFFIC_LIGHTS_BOX, 0d, 33d, 67d);
-
-
- // Icons : 4 traffic lights - Column K
- cf = sheetCF.getConditionalFormattingAt(8);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("K2:K17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYRB_4_TRAFFIC_LIGHTS, 0d, 25d, 50d, 75d);
-
-
- // Icons : 3 symbols with backgrounds - Column L
- cf = sheetCF.getConditionalFormattingAt(9);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("L2:L17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_SYMBOLS_CIRCLE, 0d, 33d, 67d);
-
-
- // Icons : 3 flags - Column M2 Only
- cf = sheetCF.getConditionalFormattingAt(10);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("M2", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_FLAGS, 0d, 33d, 67d);
-
- // Icons : 3 flags - Column M (all)
- cf = sheetCF.getConditionalFormattingAt(11);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("M2:M17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_FLAGS, 0d, 33d, 67d);
-
-
- // Icons : 3 symbols 2 (no background) - Column N
- cf = sheetCF.getConditionalFormattingAt(12);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("N2:N17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_SYMBOLS, 0d, 33d, 67d);
-
-
- // Icons : 3 arrows - Column O
- cf = sheetCF.getConditionalFormattingAt(13);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("O2:O17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GYR_3_ARROW, 0d, 33d, 67d);
-
-
- // Icons : 5 arrows grey - Column P
- cf = sheetCF.getConditionalFormattingAt(14);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("P2:P17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.GREY_5_ARROWS, 0d, 20d, 40d, 60d, 80d);
-
-
- // Icons : 3 stars (ext) - Column Q
- // TODO Support EXT formattings
-
-
- // Icons : 4 ratings - Column R
- cf = sheetCF.getConditionalFormattingAt(15);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("R2:R17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.RATINGS_4, 0d, 25d, 50d, 75d);
-
-
- // Icons : 5 ratings - Column S
- cf = sheetCF.getConditionalFormattingAt(16);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("S2:S17", cf.getFormattingRanges()[0].formatAsString());
- assertIconSetPercentages(cf, IconSet.RATINGS_5, 0d, 20d, 40d, 60d, 80d);
-
-
- // Custom Icon+Format - Column T
- cf = sheetCF.getConditionalFormattingAt(17);
- assertEquals(1, cf.getFormattingRanges().length);
- assertEquals("T2:T17", cf.getFormattingRanges()[0].formatAsString());
-
- // TODO Support IconSet + Other CFs with 2 rules
- // assertEquals(2, cf.getNumberOfRules());
- // cr = cf.getRule(0);
- // assertIconSetPercentages(cr, IconSet.GYR_3_TRAFFIC_LIGHTS_BOX, 0d, 33d, 67d);
- // cr = cf.getRule(1);
- // assertEquals(ConditionType.FORMULA, cr.getConditionTypeType());
- // assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation());
- // // TODO Why aren't these two the same between formats?
- // if (cr instanceof HSSFConditionalFormattingRule) {
- // assertEquals("MOD(ROW($T1),2)=1", cr.getFormula1());
- // } else {
- // assertEquals("MOD(ROW($T2),2)=1", cr.getFormula1());
- // }
- // assertEquals(null, cr.getFormula2());
-
-
- // Mixed icons - Column U
- // TODO Support EXT formattings
-
- wb.close();
- }
-
- private void assertDataBar(ConditionalFormatting cf, String color) {
- assertEquals(1, cf.getNumberOfRules());
- ConditionalFormattingRule cr = cf.getRule(0);
- assertDataBar(cr, color);
- }
- private void assertDataBar(ConditionalFormattingRule cr, String color) {
- assertEquals(ConditionType.DATA_BAR, cr.getConditionTypeType());
- assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation());
- assertEquals(null, cr.getFormula1());
- assertEquals(null, cr.getFormula2());
-
- DataBarFormatting databar = cr.getDataBarFormatting();
- assertNotNull(databar);
- assertEquals(false, databar.isIconOnly());
- assertEquals(true, databar.isLeftToRight());
- assertEquals(0, databar.getWidthMin());
- assertEquals(100, databar.getWidthMax());
-
- assertColour(color, databar.getColor());
-
- ConditionalFormattingThreshold th;
- th = databar.getMinThreshold();
- assertEquals(RangeType.MIN, th.getRangeType());
- assertEquals(null, th.getValue());
- assertEquals(null, th.getFormula());
- th = databar.getMaxThreshold();
- assertEquals(RangeType.MAX, th.getRangeType());
- assertEquals(null, th.getValue());
- assertEquals(null, th.getFormula());
- }
-
- private void assertIconSetPercentages(ConditionalFormatting cf, IconSet iconset, Double...vals) {
- assertEquals(1, cf.getNumberOfRules());
- ConditionalFormattingRule cr = cf.getRule(0);
- assertIconSetPercentages(cr, iconset, vals);
- }
- private void assertIconSetPercentages(ConditionalFormattingRule cr, IconSet iconset, Double...vals) {
- assertEquals(ConditionType.ICON_SET, cr.getConditionTypeType());
- assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation());
- assertEquals(null, cr.getFormula1());
- assertEquals(null, cr.getFormula2());
-
- IconMultiStateFormatting icon = cr.getMultiStateFormatting();
- assertNotNull(icon);
- assertEquals(iconset, icon.getIconSet());
- assertEquals(false, icon.isIconOnly());
- assertEquals(false, icon.isReversed());
-
- assertNotNull(icon.getThresholds());
- assertEquals(vals.length, icon.getThresholds().length);
- for (int i=0; i<vals.length; i++) {
- Double v = vals[i];
- ConditionalFormattingThreshold th = icon.getThresholds()[i];
- assertEquals(RangeType.PERCENT, th.getRangeType());
- assertEquals(v, th.getValue());
- assertEquals(null, th.getFormula());
- }
- }
-
- private void assertColorScale(ConditionalFormatting cf, String... colors) {
- assertEquals(1, cf.getNumberOfRules());
- ConditionalFormattingRule cr = cf.getRule(0);
- assertColorScale(cr, colors);
- }
- private void assertColorScale(ConditionalFormattingRule cr, String... colors) {
- assertEquals(ConditionType.COLOR_SCALE, cr.getConditionTypeType());
- assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation());
- assertEquals(null, cr.getFormula1());
- assertEquals(null, cr.getFormula2());
-
- ColorScaleFormatting color = cr.getColorScaleFormatting();
- assertNotNull(color);
- assertNotNull(color.getColors());
- assertNotNull(color.getThresholds());
- assertEquals(colors.length, color.getNumControlPoints());
- assertEquals(colors.length, color.getColors().length);
- assertEquals(colors.length, color.getThresholds().length);
-
- // Thresholds should be Min / (evenly spaced) / Max
- int steps = 100 / (colors.length-1);
- for (int i=0; i<colors.length; i++) {
- ConditionalFormattingThreshold th = color.getThresholds()[i];
- if (i == 0) {
- assertEquals(RangeType.MIN, th.getRangeType());
- } else if (i == colors.length-1) {
- assertEquals(RangeType.MAX, th.getRangeType());
- } else {
- assertEquals(RangeType.PERCENTILE, th.getRangeType());
- assertEquals(steps*i, th.getValue().intValue());
- }
- assertEquals(null, th.getFormula());
- }
-
- // Colors should match
- for (int i=0; i<colors.length; i++) {
- assertColour(colors[i], color.getColors()[i]);
- }
- }
-
- @Test
- public void testCreateFontFormatting() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7");
- FontFormatting fontFmt = rule1.createFontFormatting();
- assertFalse(fontFmt.isItalic());
- assertFalse(fontFmt.isBold());
- fontFmt.setFontStyle(true, true);
- assertTrue(fontFmt.isItalic());
- assertTrue(fontFmt.isBold());
-
- assertEquals(-1, fontFmt.getFontHeight()); // not modified
- fontFmt.setFontHeight(200);
- assertEquals(200, fontFmt.getFontHeight());
- fontFmt.setFontHeight(100);
- assertEquals(100, fontFmt.getFontHeight());
-
- assertEquals(FontFormatting.SS_NONE, fontFmt.getEscapementType());
- fontFmt.setEscapementType(FontFormatting.SS_SUB);
- assertEquals(FontFormatting.SS_SUB, fontFmt.getEscapementType());
- fontFmt.setEscapementType(FontFormatting.SS_NONE);
- assertEquals(FontFormatting.SS_NONE, fontFmt.getEscapementType());
- fontFmt.setEscapementType(FontFormatting.SS_SUPER);
- assertEquals(FontFormatting.SS_SUPER, fontFmt.getEscapementType());
-
- assertEquals(FontFormatting.U_NONE, fontFmt.getUnderlineType());
- fontFmt.setUnderlineType(FontFormatting.U_SINGLE);
- assertEquals(FontFormatting.U_SINGLE, fontFmt.getUnderlineType());
- fontFmt.setUnderlineType(FontFormatting.U_NONE);
- assertEquals(FontFormatting.U_NONE, fontFmt.getUnderlineType());
- fontFmt.setUnderlineType(FontFormatting.U_DOUBLE);
- assertEquals(FontFormatting.U_DOUBLE, fontFmt.getUnderlineType());
-
- assertEquals(-1, fontFmt.getFontColorIndex());
- fontFmt.setFontColorIndex(IndexedColors.RED.index);
- assertEquals(IndexedColors.RED.index, fontFmt.getFontColorIndex());
- fontFmt.setFontColorIndex(IndexedColors.AUTOMATIC.index);
- assertEquals(IndexedColors.AUTOMATIC.index, fontFmt.getFontColorIndex());
- fontFmt.setFontColorIndex(IndexedColors.BLUE.index);
- assertEquals(IndexedColors.BLUE.index, fontFmt.getFontColorIndex());
-
- ConditionalFormattingRule [] cfRules = { rule1 };
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
-
- sheetCF.addConditionalFormatting(regions, cfRules);
-
- // Verification
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertNotNull(cf);
-
- assertEquals(1, cf.getNumberOfRules());
-
- FontFormatting r1fp = cf.getRule(0).getFontFormatting();
- assertNotNull(r1fp);
-
- assertTrue(r1fp.isItalic());
- assertTrue(r1fp.isBold());
- assertEquals(FontFormatting.SS_SUPER, r1fp.getEscapementType());
- assertEquals(FontFormatting.U_DOUBLE, r1fp.getUnderlineType());
- assertEquals(IndexedColors.BLUE.index, r1fp.getFontColorIndex());
-
- workbook.close();
- }
-
- @Test
- public void testCreatePatternFormatting() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7");
- PatternFormatting patternFmt = rule1.createPatternFormatting();
-
- assertEquals(0, patternFmt.getFillBackgroundColor());
- patternFmt.setFillBackgroundColor(IndexedColors.RED.index);
- assertEquals(IndexedColors.RED.index, patternFmt.getFillBackgroundColor());
-
- assertEquals(0, patternFmt.getFillForegroundColor());
- patternFmt.setFillForegroundColor(IndexedColors.BLUE.index);
- assertEquals(IndexedColors.BLUE.index, patternFmt.getFillForegroundColor());
-
- assertEquals(PatternFormatting.NO_FILL, patternFmt.getFillPattern());
- patternFmt.setFillPattern(PatternFormatting.SOLID_FOREGROUND);
- assertEquals(PatternFormatting.SOLID_FOREGROUND, patternFmt.getFillPattern());
- patternFmt.setFillPattern(PatternFormatting.NO_FILL);
- assertEquals(PatternFormatting.NO_FILL, patternFmt.getFillPattern());
- patternFmt.setFillPattern(PatternFormatting.BRICKS);
- assertEquals(PatternFormatting.BRICKS, patternFmt.getFillPattern());
-
- ConditionalFormattingRule [] cfRules = { rule1 };
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
-
- sheetCF.addConditionalFormatting(regions, cfRules);
-
- // Verification
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertNotNull(cf);
-
- assertEquals(1, cf.getNumberOfRules());
-
- PatternFormatting r1fp = cf.getRule(0).getPatternFormatting();
- assertNotNull(r1fp);
-
- assertEquals(IndexedColors.RED.index, r1fp.getFillBackgroundColor());
- assertEquals(IndexedColors.BLUE.index, r1fp.getFillForegroundColor());
- assertEquals(PatternFormatting.BRICKS, r1fp.getFillPattern());
-
- workbook.close();
- }
-
- @Test
- public void testAllCreateBorderFormatting() throws IOException {
- // Make sure it is possible to create a conditional formatting rule
- // with every type of Border Style
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7");
- BorderFormatting borderFmt = rule1.createBorderFormatting();
-
- for (BorderStyle border : BorderStyle.values()) {
- borderFmt.setBorderTop(border);
- assertEquals(border, borderFmt.getBorderTop());
-
- borderFmt.setBorderBottom(border);
- assertEquals(border, borderFmt.getBorderBottom());
-
- borderFmt.setBorderLeft(border);
- assertEquals(border, borderFmt.getBorderLeft());
-
- borderFmt.setBorderRight(border);
- assertEquals(border, borderFmt.getBorderRight());
-
- borderFmt.setBorderDiagonal(border);
- assertEquals(border, borderFmt.getBorderDiagonal());
- }
-
- workbook.close();
- }
-
- @Test
- public void testCreateBorderFormatting() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
-
- ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7");
- BorderFormatting borderFmt = rule1.createBorderFormatting();
-
- assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom());
- borderFmt.setBorderBottom(BorderStyle.DOTTED);
- assertEquals(BorderStyle.DOTTED, borderFmt.getBorderBottom());
- borderFmt.setBorderBottom(BorderStyle.NONE);
- assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom());
- borderFmt.setBorderBottom(BorderStyle.THICK);
- assertEquals(BorderStyle.THICK, borderFmt.getBorderBottom());
-
- assertEquals(BorderStyle.NONE, borderFmt.getBorderTop());
- borderFmt.setBorderTop(BorderStyle.DOTTED);
- assertEquals(BorderStyle.DOTTED, borderFmt.getBorderTop());
- borderFmt.setBorderTop(BorderStyle.NONE);
- assertEquals(BorderStyle.NONE, borderFmt.getBorderTop());
- borderFmt.setBorderTop(BorderStyle.THICK);
- assertEquals(BorderStyle.THICK, borderFmt.getBorderTop());
-
- assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft());
- borderFmt.setBorderLeft(BorderStyle.DOTTED);
- assertEquals(BorderStyle.DOTTED, borderFmt.getBorderLeft());
- borderFmt.setBorderLeft(BorderStyle.NONE);
- assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft());
- borderFmt.setBorderLeft(BorderStyle.THIN);
- assertEquals(BorderStyle.THIN, borderFmt.getBorderLeft());
-
- assertEquals(BorderStyle.NONE, borderFmt.getBorderRight());
- borderFmt.setBorderRight(BorderStyle.DOTTED);
- assertEquals(BorderStyle.DOTTED, borderFmt.getBorderRight());
- borderFmt.setBorderRight(BorderStyle.NONE);
- assertEquals(BorderStyle.NONE, borderFmt.getBorderRight());
- borderFmt.setBorderRight(BorderStyle.HAIR);
- assertEquals(BorderStyle.HAIR, borderFmt.getBorderRight());
-
- ConditionalFormattingRule [] cfRules = { rule1 };
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
-
- sheetCF.addConditionalFormatting(regions, cfRules);
-
- // Verification
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertNotNull(cf);
-
- assertEquals(1, cf.getNumberOfRules());
-
- BorderFormatting r1fp = cf.getRule(0).getBorderFormatting();
- assertNotNull(r1fp);
- assertEquals(BorderStyle.THICK, r1fp.getBorderBottom());
- assertEquals(BorderStyle.THICK, r1fp.getBorderTop());
- assertEquals(BorderStyle.THIN, r1fp.getBorderLeft());
- assertEquals(BorderStyle.HAIR, r1fp.getBorderRight());
-
- workbook.close();
- }
-
- @Test
- public void testCreateIconFormatting() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
- ConditionalFormattingRule rule1 =
- sheetCF.createConditionalFormattingRule(IconSet.GYRB_4_TRAFFIC_LIGHTS);
- IconMultiStateFormatting iconFmt = rule1.getMultiStateFormatting();
-
- assertEquals(IconSet.GYRB_4_TRAFFIC_LIGHTS, iconFmt.getIconSet());
- assertEquals(4, iconFmt.getThresholds().length);
- assertEquals(false, iconFmt.isIconOnly());
- assertEquals(false, iconFmt.isReversed());
-
- iconFmt.setIconOnly(true);
- iconFmt.getThresholds()[0].setRangeType(RangeType.MIN);
- iconFmt.getThresholds()[1].setRangeType(RangeType.NUMBER);
- iconFmt.getThresholds()[1].setValue(10d);
- iconFmt.getThresholds()[2].setRangeType(RangeType.PERCENT);
- iconFmt.getThresholds()[2].setValue(75d);
- iconFmt.getThresholds()[3].setRangeType(RangeType.MAX);
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
- sheetCF.addConditionalFormatting(regions, rule1);
-
- // Save, re-load and re-check
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheetAt(0);
- sheetCF = sheet.getSheetConditionalFormatting();
- assertEquals(1, sheetCF.getNumConditionalFormattings());
-
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertEquals(1, cf.getNumberOfRules());
- rule1 = cf.getRule(0);
- assertEquals(ConditionType.ICON_SET, rule1.getConditionTypeType());
- iconFmt = rule1.getMultiStateFormatting();
-
- assertEquals(IconSet.GYRB_4_TRAFFIC_LIGHTS, iconFmt.getIconSet());
- assertEquals(4, iconFmt.getThresholds().length);
- assertEquals(true, iconFmt.isIconOnly());
- assertEquals(false, iconFmt.isReversed());
-
- assertEquals(RangeType.MIN, iconFmt.getThresholds()[0].getRangeType());
- assertEquals(RangeType.NUMBER, iconFmt.getThresholds()[1].getRangeType());
- assertEquals(RangeType.PERCENT,iconFmt.getThresholds()[2].getRangeType());
- assertEquals(RangeType.MAX, iconFmt.getThresholds()[3].getRangeType());
- assertEquals(null, iconFmt.getThresholds()[0].getValue());
- assertEquals(10d, iconFmt.getThresholds()[1].getValue(), 0);
- assertEquals(75d, iconFmt.getThresholds()[2].getValue(), 0);
- assertEquals(null, iconFmt.getThresholds()[3].getValue());
-
- wb2.close();
- }
-
- @Test
- public void testCreateColorScaleFormatting() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
-
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
- ConditionalFormattingRule rule1 =
- sheetCF.createConditionalFormattingColorScaleRule();
- ColorScaleFormatting clrFmt = rule1.getColorScaleFormatting();
-
- assertEquals(3, clrFmt.getNumControlPoints());
- assertEquals(3, clrFmt.getColors().length);
- assertEquals(3, clrFmt.getThresholds().length);
-
- clrFmt.getThresholds()[0].setRangeType(RangeType.MIN);
- clrFmt.getThresholds()[1].setRangeType(RangeType.NUMBER);
- clrFmt.getThresholds()[1].setValue(10d);
- clrFmt.getThresholds()[2].setRangeType(RangeType.MAX);
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
- sheetCF.addConditionalFormatting(regions, rule1);
-
- // Save, re-load and re-check
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheetAt(0);
- sheetCF = sheet.getSheetConditionalFormatting();
- assertEquals(1, sheetCF.getNumConditionalFormattings());
-
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertEquals(1, cf.getNumberOfRules());
- rule1 = cf.getRule(0);
- clrFmt = rule1.getColorScaleFormatting();
- assertEquals(ConditionType.COLOR_SCALE, rule1.getConditionTypeType());
-
- assertEquals(3, clrFmt.getNumControlPoints());
- assertEquals(3, clrFmt.getColors().length);
- assertEquals(3, clrFmt.getThresholds().length);
-
- assertEquals(RangeType.MIN, clrFmt.getThresholds()[0].getRangeType());
- assertEquals(RangeType.NUMBER, clrFmt.getThresholds()[1].getRangeType());
- assertEquals(RangeType.MAX, clrFmt.getThresholds()[2].getRangeType());
- assertEquals(null, clrFmt.getThresholds()[0].getValue());
- assertEquals(10d, clrFmt.getThresholds()[1].getValue(), 0);
- assertEquals(null, clrFmt.getThresholds()[2].getValue());
-
- wb2.close();
- }
-
- @Test
- public void testCreateDataBarFormatting() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
-
- String colorHex = "FFFFEB84";
- ExtendedColor color = wb1.getCreationHelper().createExtendedColor();
- color.setARGBHex(colorHex);
- SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting();
- ConditionalFormattingRule rule1 =
- sheetCF.createConditionalFormattingRule(color);
- DataBarFormatting dbFmt = rule1.getDataBarFormatting();
-
- assertEquals(false, dbFmt.isIconOnly());
- assertEquals(true, dbFmt.isLeftToRight());
- assertEquals(0, dbFmt.getWidthMin());
- assertEquals(100, dbFmt.getWidthMax());
- assertColour(colorHex, dbFmt.getColor());
-
- dbFmt.getMinThreshold().setRangeType(RangeType.MIN);
- dbFmt.getMaxThreshold().setRangeType(RangeType.MAX);
-
- CellRangeAddress [] regions = { CellRangeAddress.valueOf("A1:A5") };
- sheetCF.addConditionalFormatting(regions, rule1);
-
- // Save, re-load and re-check
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheetAt(0);
- sheetCF = sheet.getSheetConditionalFormatting();
- assertEquals(1, sheetCF.getNumConditionalFormattings());
-
- ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0);
- assertEquals(1, cf.getNumberOfRules());
- rule1 = cf.getRule(0);
- dbFmt = rule1.getDataBarFormatting();
- assertEquals(ConditionType.DATA_BAR, rule1.getConditionTypeType());
-
- assertEquals(false, dbFmt.isIconOnly());
- assertEquals(true, dbFmt.isLeftToRight());
- assertEquals(0, dbFmt.getWidthMin());
- assertEquals(100, dbFmt.getWidthMax());
- assertColour(colorHex, dbFmt.getColor());
-
- assertEquals(RangeType.MIN, dbFmt.getMinThreshold().getRangeType());
- assertEquals(RangeType.MAX, dbFmt.getMaxThreshold().getRangeType());
- assertEquals(null, dbFmt.getMinThreshold().getValue());
- assertEquals(null, dbFmt.getMaxThreshold().getValue());
-
- wb2.close();
- }
-
- @Test
- public void testBug55380() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- CellRangeAddress[] ranges = new CellRangeAddress[] {
- CellRangeAddress.valueOf("C9:D30"), CellRangeAddress.valueOf("C7:C31")
- };
- ConditionalFormattingRule rule = sheet.getSheetConditionalFormatting().createConditionalFormattingRule("$A$1>0");
- sheet.getSheetConditionalFormatting().addConditionalFormatting(ranges, rule);
- wb.close();
- }
- }
|