]> source.dussan.org Git - poi.git/commitdiff
Have the HSSF ConditionalFormattingTable look for CF12 records as well, and begin...
authorNick Burch <nick@apache.org>
Mon, 13 Jul 2015 18:55:42 +0000 (18:55 +0000)
committerNick Burch <nick@apache.org>
Mon, 13 Jul 2015 18:55:42 +0000 (18:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690796 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/aggregates/ConditionalFormattingTable.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java

index 33a2f7b2949cc79ef7782a48d4fde57a2e79f37f..e5ea515e807e655f839376c114805afa5991b08a 100644 (file)
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.poi.hssf.model.RecordStream;
+import org.apache.poi.hssf.record.CFHeader12Record;
 import org.apache.poi.hssf.record.CFHeaderRecord;
 import org.apache.poi.ss.formula.FormulaShifter;
 
@@ -28,11 +29,8 @@ import org.apache.poi.ss.formula.FormulaShifter;
  * Holds all the conditional formatting for a workbook sheet.<p/>
  * 
  * See OOO exelfileformat.pdf sec 4.12 'Conditional Formatting Table'
- * 
- * @author Josh Micich
  */
 public final class ConditionalFormattingTable extends RecordAggregate {
-
        private final List<CFRecordsAggregate> _cfHeaders;
 
        /**
@@ -45,7 +43,8 @@ public final class ConditionalFormattingTable extends RecordAggregate {
        public ConditionalFormattingTable(RecordStream rs) {
 
                List<CFRecordsAggregate> temp = new ArrayList<CFRecordsAggregate>();
-               while (rs.peekNextClass() == CFHeaderRecord.class) {
+               while (rs.peekNextClass() == CFHeaderRecord.class ||
+                      rs.peekNextClass() == CFHeader12Record.class) {
                        temp.add(CFRecordsAggregate.createCFAggregate(rs));
                }
                _cfHeaders = temp;
index 1fb7ada60682440883fb8aa00f779ebe0622de4d..cb7f19aa8fd46a0b2e77e302e3e40333a5ef9e33 100644 (file)
@@ -20,6 +20,8 @@
 package org.apache.poi.ss.usermodel;\r
 \r
 import junit.framework.TestCase;\r
+\r
+import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting;\r
 import org.apache.poi.ss.ITestDataProvider;\r
 import org.apache.poi.ss.util.CellRangeAddress;\r
 \r
@@ -528,6 +530,7 @@ public abstract class BaseTestConditionalFormatting extends TestCase {
         Workbook wb = _testDataProvider.openSampleWorkbook(filename);\r
         Sheet s = wb.getSheet("CF");\r
         ConditionalFormatting cf = null;\r
+        ConditionalFormattingRule cr = null;\r
         \r
         // Sanity check data\r
         assertEquals("Values", s.getRow(0).getCell(0).toString());\r
@@ -535,16 +538,38 @@ public abstract class BaseTestConditionalFormatting extends TestCase {
 \r
         // Check we found all the conditional formattings rules we should have\r
         SheetConditionalFormatting sheetCF = s.getSheetConditionalFormatting();\r
-        assertEquals(1, sheetCF.getNumConditionalFormattings()); // TODO Should be more!\r
+        int numCF = 3;\r
+        int numCF12 = 15;\r
+        int numCFEX = 0; // TODO This should be 1, but we don't support CFEX formattings yet\r
+        assertEquals(numCF+numCF12+numCFEX, sheetCF.getNumConditionalFormattings());\r
         \r
-        cf = sheetCF.getConditionalFormattingAt(0);\r
-        //System.out.println(cf);\r
+        int fCF = 0, fCF12 = 0, fCFEX = 0;\r
+        for (int i=0; i<sheetCF.getNumConditionalFormattings(); i++) {\r
+            cf = sheetCF.getConditionalFormattingAt(i);\r
+            if (cf instanceof HSSFConditionalFormatting) {\r
+                String str = cf.toString();\r
+                if (str.contains("[CF]")) fCF++;\r
+                if (str.contains("[CF12]")) fCF12++;\r
+                if (str.contains("[CFEX]")) fCFEX++;\r
+            } else {\r
+                fail("TODO!"); \r
+            }\r
+        }\r
+        assertEquals(numCF, fCF);\r
+        assertEquals(numCF12, fCF12);\r
+        assertEquals(numCFEX, fCFEX);\r
         \r
         \r
         // Check the rules / values in detail\r
         \r
         // Highlight Positive values - Column C\r
-        // TODO\r
+        cf = sheetCF.getConditionalFormattingAt(0);\r
+        assertEquals(1, cf.getFormattingRanges().length);\r
+        assertEquals("C2:C17", cf.getFormattingRanges()[0].formatAsString());\r
+        \r
+        assertEquals(1, cf.getNumberOfRules());\r
+        cr = cf.getRule(0);\r
+        // TODO Check the rest of this\r
         \r
         // Highlight 10-30 - Column D\r
         // TODO\r