aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorNick Burch <nick@apache.org>2015-07-12 20:38:57 +0000
committerNick Burch <nick@apache.org>2015-07-12 20:38:57 +0000
commit192d798a0f2d4ff28489b4a3ea58960e934f8af7 (patch)
tree5f764661bb77244dedc12fecebdcb4614f7fa587 /src/java
parent5d31aa3a79d60f1b4ba2da48b42f7430bd5735ee (diff)
downloadpoi-192d798a0f2d4ff28489b4a3ea58960e934f8af7.tar.gz
poi-192d798a0f2d4ff28489b4a3ea58960e934f8af7.zip
Refactor some of the CFRuleRecord logic out to CFRuleBase, and begin work on CFRule12Record #58130
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690527 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/poi/hssf/record/CFRule12Record.java166
-rw-r--r--src/java/org/apache/poi/hssf/record/CFRuleBase.java165
-rw-r--r--src/java/org/apache/poi/hssf/record/CFRuleRecord.java146
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java2
4 files changed, 361 insertions, 118 deletions
diff --git a/src/java/org/apache/poi/hssf/record/CFRule12Record.java b/src/java/org/apache/poi/hssf/record/CFRule12Record.java
new file mode 100644
index 0000000000..6758978d81
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/CFRule12Record.java
@@ -0,0 +1,166 @@
+/* ====================================================================
+ 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.hssf.record;
+
+import java.util.Arrays;
+
+import org.apache.poi.hssf.record.common.FtrHeader;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.ss.formula.Formula;
+import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.util.LittleEndianOutput;
+
+/**
+ * Conditional Formatting v12 Rule Record (0x087A).
+ *
+ * <p>This is for newer-style Excel conditional formattings,
+ * from Excel 2007 onwards.
+ *
+ * <p>{@link CFRuleRecord} is used where the condition type is
+ * {@link #CONDITION_TYPE_CELL_VALUE_IS} or {@link #CONDITION_TYPE_FORMULA},
+ * this is only used for the other types
+ */
+public final class CFRule12Record extends CFRuleBase {
+ public static final short sid = 0x087A;
+
+ private FtrHeader futureHeader;
+ private Formula formulaScale;
+
+ /** Creates new CFRuleRecord */
+ private CFRule12Record(byte conditionType, byte comparisonOperation) {
+ super(conditionType, comparisonOperation);
+ futureHeader = new FtrHeader();
+ futureHeader.setRecordType(sid);
+ // TODO Remaining fields
+ }
+
+ private CFRule12Record(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2, Ptg[] formulaScale) {
+ super(conditionType, comparisonOperation, formula1, formula2);
+ this.formulaScale = Formula.create(formulaScale);
+ // TODO Remaining fields
+ }
+
+ /**
+ * Creates a new comparison operation rule
+ */
+ public static CFRule12Record create(HSSFSheet sheet, String formulaText) {
+ Ptg[] formula1 = parseFormula(formulaText, sheet);
+ return new CFRule12Record(CONDITION_TYPE_FORMULA, ComparisonOperator.NO_COMPARISON,
+ formula1, null, null);
+ }
+ /**
+ * Creates a new comparison operation rule
+ */
+ public static CFRule12Record create(HSSFSheet sheet, byte comparisonOperation,
+ String formulaText1, String formulaText2) {
+ Ptg[] formula1 = parseFormula(formulaText1, sheet);
+ Ptg[] formula2 = parseFormula(formulaText2, sheet);
+ return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation,
+ formula1, formula2, null);
+ }
+ /**
+ * Creates a new comparison operation rule
+ */
+ public static CFRule12Record create(HSSFSheet sheet, byte comparisonOperation,
+ String formulaText1, String formulaText2, String formulaTextScale) {
+ Ptg[] formula1 = parseFormula(formulaText1, sheet);
+ Ptg[] formula2 = parseFormula(formulaText2, sheet);
+ Ptg[] formula3 = parseFormula(formulaTextScale, sheet);
+ return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation,
+ formula1, formula2, formula3);
+ }
+
+ public CFRule12Record(RecordInputStream in) {
+ futureHeader = new FtrHeader(in);
+ setConditionType(in.readByte());
+ setComparisonOperation(in.readByte());
+ int field_3_formula1_len = in.readUShort();
+ int field_4_formula2_len = in.readUShort();
+
+ // TODO Handle the remainder
+ }
+
+ /**
+ * get the stack of the scale expression as a list
+ *
+ * @return list of tokens (casts stack to a list and returns it!)
+ * this method can return null is we are unable to create Ptgs from
+ * existing excel file
+ * callers should check for null!
+ */
+ public Ptg[] getParsedExpressionScale() {
+ return formulaScale.getTokens();
+ }
+ public void setParsedExpressionScale(Ptg[] ptgs) {
+ formulaScale = Formula.create(ptgs);
+ }
+
+ public short getSid() {
+ return sid;
+ }
+
+ /**
+ * called by the class that is responsible for writing this sucker.
+ * Subclasses should implement this so that their data is passed back in a
+ * byte array.
+ *
+ * @param out the stream to write to
+ */
+ public void serialize(LittleEndianOutput out) {
+ futureHeader.serialize(out);
+
+ int formula1Len=getFormulaSize(getFormula1());
+ int formula2Len=getFormulaSize(getFormula2());
+
+ out.writeByte(getConditionType());
+ out.writeByte(getComparisonOperation());
+ out.writeShort(formula1Len);
+ out.writeShort(formula2Len);
+
+ // TODO Output the rest
+ }
+
+ protected int getDataSize() {
+ // TODO Calculate
+ return 0;
+ }
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("[CFRULE12]\n");
+ buffer.append(" .condition_type =").append(getConditionType()).append("\n");
+ buffer.append(" TODO The rest!\n");
+ buffer.append(" Formula 1 =").append(Arrays.toString(getFormula1().getTokens())).append("\n");
+ buffer.append(" Formula 2 =").append(Arrays.toString(getFormula2().getTokens())).append("\n");
+ buffer.append(" Formula S =").append(Arrays.toString(formulaScale.getTokens())).append("\n");
+ buffer.append("[/CFRULE12]\n");
+ return buffer.toString();
+ }
+
+ public Object clone() {
+ CFRule12Record rec = new CFRule12Record(getConditionType(), getComparisonOperation());
+
+ // TODO The other fields
+
+ rec.setFormula1(getFormula1().copy());
+ rec.setFormula2(getFormula2().copy());
+ rec.formulaScale = formulaScale.copy();
+
+ return rec;
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/CFRuleBase.java b/src/java/org/apache/poi/hssf/record/CFRuleBase.java
new file mode 100644
index 0000000000..7b31ee6baf
--- /dev/null
+++ b/src/java/org/apache/poi/hssf/record/CFRuleBase.java
@@ -0,0 +1,165 @@
+/* ====================================================================
+ 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.hssf.record;
+
+import org.apache.poi.hssf.model.HSSFFormulaParser;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.ss.formula.Formula;
+import org.apache.poi.ss.formula.FormulaType;
+import org.apache.poi.ss.formula.ptg.Ptg;
+
+/**
+ * Conditional Formatting Rules. This can hold old-style rules
+ *
+ *
+ * <p>This is for the older-style Excel conditional formattings,
+ * new-style (Excel 2007+) also make use of {@link CFRule12Record}
+ * and {@link CFExRuleRecord} for their rules.
+ */
+public abstract class CFRuleBase extends StandardRecord {
+ public static final class ComparisonOperator {
+ public static final byte NO_COMPARISON = 0;
+ public static final byte BETWEEN = 1;
+ public static final byte NOT_BETWEEN = 2;
+ public static final byte EQUAL = 3;
+ public static final byte NOT_EQUAL = 4;
+ public static final byte GT = 5;
+ public static final byte LT = 6;
+ public static final byte GE = 7;
+ public static final byte LE = 8;
+ private static final byte max_operator = 8;
+ }
+
+ private byte condition_type;
+ // The only kinds that CFRuleRecord handles
+ public static final byte CONDITION_TYPE_CELL_VALUE_IS = 1;
+ public static final byte CONDITION_TYPE_FORMULA = 2;
+ // These are CFRule12Rule only
+ public static final byte CONDITION_TYPE_COLOR_SCALE = 3;
+ public static final byte CONDITION_TYPE_DATA_BAR = 4;
+ public static final byte CONDITION_TYPE_FILTER = 5;
+ public static final byte CONDITION_TYPE_ICON_SET = 6;
+
+ private byte comparison_operator;
+
+ private Formula formula1;
+ private Formula formula2;
+
+ /** Creates new CFRuleRecord */
+ protected CFRuleBase(byte conditionType, byte comparisonOperation) {
+ setConditionType(conditionType);
+ setComparisonOperation(comparisonOperation);
+ formula1 = Formula.create(Ptg.EMPTY_PTG_ARRAY);
+ formula2 = Formula.create(Ptg.EMPTY_PTG_ARRAY);
+ }
+ protected CFRuleBase(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2) {
+ this(conditionType, comparisonOperation);
+ this.formula1 = Formula.create(formula1);
+ this.formula2 = Formula.create(formula2);
+ }
+ protected CFRuleBase() {}
+
+ public byte getConditionType() {
+ return condition_type;
+ }
+ protected void setConditionType(byte condition_type) {
+ if ((this instanceof CFRuleRecord)) {
+ if (condition_type == CONDITION_TYPE_CELL_VALUE_IS ||
+ condition_type == CONDITION_TYPE_FORMULA) {
+ // Good, valid combination
+ } else {
+ throw new IllegalArgumentException("CFRuleRecord only accepts Value-Is and Formula types");
+ }
+ }
+ this.condition_type = condition_type;
+ }
+
+ public void setComparisonOperation(byte operation) {
+ if (operation < 0 || operation > ComparisonOperator.max_operator)
+ throw new IllegalArgumentException(
+ "Valid operators are only in the range 0 to " +ComparisonOperator.max_operator);
+
+ this.comparison_operator = operation;
+ }
+ public byte getComparisonOperation() {
+ return comparison_operator;
+ }
+
+ /**
+ * get the stack of the 1st expression as a list
+ *
+ * @return list of tokens (casts stack to a list and returns it!)
+ * this method can return null is we are unable to create Ptgs from
+ * existing excel file
+ * callers should check for null!
+ */
+ public Ptg[] getParsedExpression1() {
+ return formula1.getTokens();
+ }
+ public void setParsedExpression1(Ptg[] ptgs) {
+ formula1 = Formula.create(ptgs);
+ }
+ protected Formula getFormula1() {
+ return formula1;
+ }
+ protected void setFormula1(Formula formula1) {
+ this.formula1 = formula1;
+ }
+
+ /**
+ * get the stack of the 2nd expression as a list
+ *
+ * @return array of {@link Ptg}s, possibly <code>null</code>
+ */
+ public Ptg[] getParsedExpression2() {
+ return Formula.getTokens(formula2);
+ }
+ public void setParsedExpression2(Ptg[] ptgs) {
+ formula2 = Formula.create(ptgs);
+ }
+ protected Formula getFormula2() {
+ return formula2;
+ }
+ protected void setFormula2(Formula formula2) {
+ this.formula2 = formula2;
+ }
+
+ /**
+ * @param ptgs must not be <code>null</code>
+ * @return encoded size of the formula tokens (does not include 2 bytes for ushort length)
+ */
+ protected static int getFormulaSize(Formula formula) {
+ return formula.getEncodedTokenSize();
+ }
+
+ /**
+ * TODO - parse conditional format formulas properly i.e. produce tRefN and tAreaN instead of tRef and tArea
+ * this call will produce the wrong results if the formula contains any cell references
+ * One approach might be to apply the inverse of SharedFormulaRecord.convertSharedFormulas(Stack, int, int)
+ * Note - two extra parameters (rowIx & colIx) will be required. They probably come from one of the Region objects.
+ *
+ * @return <code>null</code> if <tt>formula</tt> was null.
+ */
+ protected static Ptg[] parseFormula(String formula, HSSFSheet sheet) {
+ if(formula == null) {
+ return null;
+ }
+ int sheetIndex = sheet.getWorkbook().getSheetIndex(sheet);
+ return HSSFFormulaParser.parse(formula, sheet.getWorkbook(), FormulaType.CELL, sheetIndex);
+ }
+}
diff --git a/src/java/org/apache/poi/hssf/record/CFRuleRecord.java b/src/java/org/apache/poi/hssf/record/CFRuleRecord.java
index 81d61454ba..eeb76e6950 100644
--- a/src/java/org/apache/poi/hssf/record/CFRuleRecord.java
+++ b/src/java/org/apache/poi/hssf/record/CFRuleRecord.java
@@ -19,13 +19,11 @@ package org.apache.poi.hssf.record;
import java.util.Arrays;
-import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.cf.BorderFormatting;
import org.apache.poi.hssf.record.cf.FontFormatting;
import org.apache.poi.hssf.record.cf.PatternFormatting;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.formula.Formula;
-import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
@@ -38,28 +36,10 @@ import org.apache.poi.util.LittleEndianOutput;
* new-style (Excel 2007+) also make use of {@link CFRule12Record}
* and {@link CFExRuleRecord} for their rules.
*/
-public final class CFRuleRecord extends StandardRecord {
+public final class CFRuleRecord extends CFRuleBase {
public static final short sid = 0x01B1;
- public static final class ComparisonOperator {
- public static final byte NO_COMPARISON = 0;
- public static final byte BETWEEN = 1;
- public static final byte NOT_BETWEEN = 2;
- public static final byte EQUAL = 3;
- public static final byte NOT_EQUAL = 4;
- public static final byte GT = 5;
- public static final byte LT = 6;
- public static final byte GE = 7;
- public static final byte LE = 8;
- }
-
- private byte field_1_condition_type;
- public static final byte CONDITION_TYPE_CELL_VALUE_IS = 1;
- public static final byte CONDITION_TYPE_FORMULA = 2;
-
- private byte field_2_comparison_operator;
-
- private int field_5_options;
+ private int field_5_options;
private static final BitField modificationBits = bf(0x003FFFFF); // Bits: font,align,bord,patt,prot
private static final BitField alignHor = bf(0x00000001); // 0 = Horizontal alignment modified
@@ -104,15 +84,17 @@ public final class CFRuleRecord extends StandardRecord {
private PatternFormatting _patternFormatting;
- private Formula field_17_formula1;
- private Formula field_18_formula2;
-
/** Creates new CFRuleRecord */
- private CFRuleRecord(byte conditionType, byte comparisonOperation)
- {
- field_1_condition_type=conditionType;
- field_2_comparison_operator=comparisonOperation;
+ private CFRuleRecord(byte conditionType, byte comparisonOperation) {
+ super(conditionType, comparisonOperation);
+ setDefaults();
+ }
+ private CFRuleRecord(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2) {
+ super(conditionType, comparisonOperation, formula1, formula2);
+ setDefaults();
+ }
+ private void setDefaults() {
// Set modification flags to 1: by default options are not modified
field_5_options = modificationBits.setValue(field_5_options, -1);
// Set formatting block flags to 0 (no formatting blocks)
@@ -123,14 +105,6 @@ public final class CFRuleRecord extends StandardRecord {
_fontFormatting=null;
_borderFormatting=null;
_patternFormatting=null;
- field_17_formula1=Formula.create(Ptg.EMPTY_PTG_ARRAY);
- field_18_formula2=Formula.create(Ptg.EMPTY_PTG_ARRAY);
- }
-
- private CFRuleRecord(byte conditionType, byte comparisonOperation, Ptg[] formula1, Ptg[] formula2) {
- this(conditionType, comparisonOperation);
- field_17_formula1 = Formula.create(formula1);
- field_18_formula2 = Formula.create(formula2);
}
/**
@@ -152,8 +126,8 @@ public final class CFRuleRecord extends StandardRecord {
}
public CFRuleRecord(RecordInputStream in) {
- field_1_condition_type = in.readByte();
- field_2_comparison_operator = in.readByte();
+ setConditionType(in.readByte());
+ setComparisonOperation(in.readByte());
int field_3_formula1_len = in.readUShort();
int field_4_formula2_len = in.readUShort();
field_5_options = in.readInt();
@@ -172,12 +146,8 @@ public final class CFRuleRecord extends StandardRecord {
}
// "You may not use unions, intersections or array constants in Conditional Formatting criteria"
- field_17_formula1 = Formula.read(field_3_formula1_len, in);
- field_18_formula2 = Formula.read(field_4_formula2_len, in);
- }
-
- public byte getConditionType() {
- return field_1_condition_type;
+ setFormula1(Formula.read(field_3_formula1_len, in));
+ setFormula2(Formula.read(field_4_formula2_len, in));
}
public boolean containsFontFormattingBlock() {
@@ -237,13 +207,6 @@ public final class CFRuleRecord extends StandardRecord {
setOptionFlag(false,prot);
}
- public void setComparisonOperation(byte operation) {
- field_2_comparison_operator = operation;
- }
- public byte getComparisonOperation() {
- return field_2_comparison_operator;
- }
-
/**
* get the option flags
*
@@ -331,46 +294,11 @@ public final class CFRuleRecord extends StandardRecord {
field_5_options = field.setBoolean(field_5_options, flag);
}
- /**
- * get the stack of the 1st expression as a list
- *
- * @return list of tokens (casts stack to a list and returns it!)
- * this method can return null is we are unable to create Ptgs from
- * existing excel file
- * callers should check for null!
- */
- public Ptg[] getParsedExpression1() {
- return field_17_formula1.getTokens();
- }
- public void setParsedExpression1(Ptg[] ptgs) {
- field_17_formula1 = Formula.create(ptgs);
- }
-
- /**
- * get the stack of the 2nd expression as a list
- *
- * @return array of {@link Ptg}s, possibly <code>null</code>
- */
- public Ptg[] getParsedExpression2() {
- return Formula.getTokens(field_18_formula2);
- }
- public void setParsedExpression2(Ptg[] ptgs) {
- field_18_formula2 = Formula.create(ptgs);
- }
-
public short getSid() {
return sid;
}
/**
- * @param ptgs must not be <code>null</code>
- * @return encoded size of the formula tokens (does not include 2 bytes for ushort length)
- */
- private static int getFormulaSize(Formula formula) {
- return formula.getEncodedTokenSize();
- }
-
- /**
* called by the class that is responsible for writing this sucker.
* Subclasses should implement this so that their data is passed back in a
* byte array.
@@ -378,11 +306,11 @@ public final class CFRuleRecord extends StandardRecord {
* @param out the stream to write to
*/
public void serialize(LittleEndianOutput out) {
- int formula1Len=getFormulaSize(field_17_formula1);
- int formula2Len=getFormulaSize(field_18_formula2);
+ int formula1Len=getFormulaSize(getFormula1());
+ int formula2Len=getFormulaSize(getFormula2());
- out.writeByte(field_1_condition_type);
- out.writeByte(field_2_comparison_operator);
+ out.writeByte(getConditionType());
+ out.writeByte(getComparisonOperation());
out.writeShort(formula1Len);
out.writeShort(formula2Len);
out.writeInt(field_5_options);
@@ -401,8 +329,8 @@ public final class CFRuleRecord extends StandardRecord {
_patternFormatting.serialize(out);
}
- field_17_formula1.serializeTokens(out);
- field_18_formula2.serializeTokens(out);
+ getFormula1().serializeTokens(out);
+ getFormula2().serializeTokens(out);
}
protected int getDataSize() {
@@ -410,15 +338,15 @@ public final class CFRuleRecord extends StandardRecord {
(containsFontFormattingBlock()?_fontFormatting.getRawRecord().length:0)+
(containsBorderFormattingBlock()?8:0)+
(containsPatternFormattingBlock()?4:0)+
- getFormulaSize(field_17_formula1)+
- getFormulaSize(field_18_formula2);
+ getFormulaSize(getFormula1())+
+ getFormulaSize(getFormula2());
return i;
}
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("[CFRULE]\n");
- buffer.append(" .condition_type =").append(field_1_condition_type).append("\n");
+ buffer.append(" .condition_type =").append(getConditionType()).append("\n");
buffer.append(" OPTION FLAGS=0x").append(Integer.toHexString(getOptions())).append("\n");
if (containsFontFormattingBlock()) {
buffer.append(_fontFormatting.toString()).append("\n");
@@ -429,14 +357,14 @@ public final class CFRuleRecord extends StandardRecord {
if (containsPatternFormattingBlock()) {
buffer.append(_patternFormatting.toString()).append("\n");
}
- buffer.append(" Formula 1 =").append(Arrays.toString(field_17_formula1.getTokens())).append("\n");
- buffer.append(" Formula 2 =").append(Arrays.toString(field_18_formula2.getTokens())).append("\n");
+ buffer.append(" Formula 1 =").append(Arrays.toString(getFormula1().getTokens())).append("\n");
+ buffer.append(" Formula 2 =").append(Arrays.toString(getFormula2().getTokens())).append("\n");
buffer.append("[/CFRULE]\n");
return buffer.toString();
}
public Object clone() {
- CFRuleRecord rec = new CFRuleRecord(field_1_condition_type, field_2_comparison_operator);
+ CFRuleRecord rec = new CFRuleRecord(getConditionType(), getComparisonOperation());
rec.field_5_options = field_5_options;
rec.field_6_not_used = field_6_not_used;
if (containsFontFormattingBlock()) {
@@ -448,25 +376,9 @@ public final class CFRuleRecord extends StandardRecord {
if (containsPatternFormattingBlock()) {
rec._patternFormatting = (PatternFormatting) _patternFormatting.clone();
}
- rec.field_17_formula1 = field_17_formula1.copy();
- rec.field_18_formula2 = field_18_formula2.copy();
+ rec.setFormula1(getFormula1().copy());
+ rec.setFormula2(getFormula2().copy());
return rec;
}
-
- /**
- * TODO - parse conditional format formulas properly i.e. produce tRefN and tAreaN instead of tRef and tArea
- * this call will produce the wrong results if the formula contains any cell references
- * One approach might be to apply the inverse of SharedFormulaRecord.convertSharedFormulas(Stack, int, int)
- * Note - two extra parameters (rowIx & colIx) will be required. They probably come from one of the Region objects.
- *
- * @return <code>null</code> if <tt>formula</tt> was null.
- */
- private static Ptg[] parseFormula(String formula, HSSFSheet sheet) {
- if(formula == null) {
- return null;
- }
- int sheetIndex = sheet.getWorkbook().getSheetIndex(sheet);
- return HSSFFormulaParser.parse(formula, sheet.getWorkbook(), FormulaType.CELL, sheetIndex);
- }
}
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java b/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
index 6d881132fb..0ca978aaa7 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
@@ -18,8 +18,8 @@
package org.apache.poi.hssf.usermodel;
import org.apache.poi.hssf.model.HSSFFormulaParser;
+import org.apache.poi.hssf.record.CFRuleBase.ComparisonOperator;
import org.apache.poi.hssf.record.CFRuleRecord;
-import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator;
import org.apache.poi.hssf.record.cf.BorderFormatting;
import org.apache.poi.hssf.record.cf.FontFormatting;
import org.apache.poi.hssf.record.cf.PatternFormatting;