Have the HSSF ConditionalFormattingTable look for CF12 records as well, and begin more detailed testing of the high level rules #58130

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690796 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2015-07-13 18:55:42 +00:00
parent fda28eae8b
commit 705c3fe1f9
2 changed files with 32 additions and 8 deletions

View 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;

View File

@ -20,6 +20,8 @@
package org.apache.poi.ss.usermodel;
import junit.framework.TestCase;
import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.util.CellRangeAddress;
@ -528,6 +530,7 @@ public abstract class BaseTestConditionalFormatting extends TestCase {
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());
@ -535,16 +538,38 @@ public abstract class BaseTestConditionalFormatting extends TestCase {
// Check we found all the conditional formattings rules we should have
SheetConditionalFormatting sheetCF = s.getSheetConditionalFormatting();
assertEquals(1, sheetCF.getNumConditionalFormattings()); // TODO Should be more!
int numCF = 3;
int numCF12 = 15;
int numCFEX = 0; // TODO This should be 1, but we don't support CFEX formattings yet
assertEquals(numCF+numCF12+numCFEX, sheetCF.getNumConditionalFormattings());
cf = sheetCF.getConditionalFormattingAt(0);
//System.out.println(cf);
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 {
fail("TODO!");
}
}
assertEquals(numCF, fCF);
assertEquals(numCF12, fCF12);
assertEquals(numCFEX, fCFEX);
// Check the rules / values in detail
// Highlight Positive values - Column C
// TODO
cf = sheetCF.getConditionalFormattingAt(0);
assertEquals(1, cf.getFormattingRanges().length);
assertEquals("C2:C17", cf.getFormattingRanges()[0].formatAsString());
assertEquals(1, cf.getNumberOfRules());
cr = cf.getRule(0);
// TODO Check the rest of this
// Highlight 10-30 - Column D
// TODO