diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java index 29bcc04c7..d42641eb8 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java @@ -82,6 +82,7 @@ public class XSSFDataValidationConstraint implements DataValidationConstraint { */ public XSSFDataValidationConstraint(int validationType, int operator, String formula1, String formula2) { super(); + //removes leading equals sign if present setFormula1(formula1); setFormula2(formula2); this.validationType = validationType; @@ -92,12 +93,10 @@ public class XSSFDataValidationConstraint implements DataValidationConstraint { //FIXME: Need to confirm if this is not a formula. // empirical testing shows Excel saves explicit lists surrounded by double quotes, // range formula expressions can't start with quotes (I think - anyone have a creative counter example?) - if( ValidationType.LIST==validationType - && formula1 != null - && formula1.startsWith(QUOTE) - && formula1.endsWith(QUOTE) ) { - final String formulaWithoutQuotes = formula1.substring(1, formula1.length()-1); - explicitListOfValues = LIST_SPLIT_REGEX.split(formulaWithoutQuotes); + if ( ValidationType.LIST == validationType + && this.formula1 != null + && isQuoted(this.formula1) ) { + explicitListOfValues = LIST_SPLIT_REGEX.split(unquote(this.formula1)); } } @@ -168,6 +167,19 @@ public class XSSFDataValidationConstraint implements DataValidationConstraint { protected static String removeLeadingEquals(String formula1) { return isFormulaEmpty(formula1) ? formula1 : formula1.charAt(0)=='=' ? formula1.substring(1) : formula1; } + private static boolean isQuoted(String s) { + return s.startsWith(QUOTE) && s.endsWith(QUOTE); + } + private static String unquote(String s) { + // removes leading and trailing quotes from a quoted string + if (isQuoted(s)) { + return s.substring(1, s.length()-1); + } + return s; + } + protected static boolean isFormulaEmpty(String formula1) { + return formula1 == null || formula1.trim().length()==0; + } /* (non-Javadoc) * @see org.apache.poi.ss.usermodel.DataValidationConstraint#setFormula2(java.lang.String) @@ -207,9 +219,6 @@ public class XSSFDataValidationConstraint implements DataValidationConstraint { } } - protected static boolean isFormulaEmpty(String formula1) { - return formula1 == null || formula1.trim().length()==0; - } public String prettyPrint() { StringBuilder builder = new StringBuilder();