diff options
-rw-r--r-- | src/documentation/content/xdocs/changes.xml | 2 | ||||
-rw-r--r-- | src/documentation/content/xdocs/status.xml | 2 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java | 2 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java | 10 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java | 4 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/data/45322.xls | bin | 0 -> 86528 bytes | |||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java | 19 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java | 9 |
8 files changed, 39 insertions, 9 deletions
diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 7e1ccbfba5..1fee98e86e 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -50,6 +50,8 @@ <action dev="POI-DEVELOPERS" type="add">Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx</action> </release> <release version="3.1.1-alpha1" date="2008-??-??"> + <action dev="POI-DEVELOPERS" type="fix">45322 - Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found</action> + <action dev="POI-DEVELOPERS" type="add">45380 - Missing return keyword in ArrayPtg.toFormulaString()</action> <action dev="POI-DEVELOPERS" type="add">44958 - Record level support for Data Tables. (No formula parser support though)</action> <action dev="POI-DEVELOPERS" type="add">35583 - Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version</action> <action dev="POI-DEVELOPERS" type="add">Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another</action> diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index febf5bd1d5..e6472d6e9a 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -47,6 +47,8 @@ <action dev="POI-DEVELOPERS" type="add">Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx</action> </release> <release version="3.1.1-alpha1" date="2008-??-??"> + <action dev="POI-DEVELOPERS" type="fix">45322 - Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found</action> + <action dev="POI-DEVELOPERS" type="add">45380 - Missing return keyword in ArrayPtg.toFormulaString()</action> <action dev="POI-DEVELOPERS" type="add">44958 - Record level support for Data Tables. (No formula parser support though)</action> <action dev="POI-DEVELOPERS" type="add">35583 - Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version</action> <action dev="POI-DEVELOPERS" type="add">Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another</action> diff --git a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java b/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java index 3717530079..b38bcd27de 100644 --- a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java @@ -176,7 +176,7 @@ public final class ArrayPtg extends Ptg { return ((Double)o).toString(); } if (o instanceof Boolean) { - ((Boolean)o).toString(); + return ((Boolean)o).booleanValue() ? "TRUE" : "FALSE"; } if (o instanceof ErrorConstant) { return ((ErrorConstant)o).getText(); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java index 5bf795e453..64c5b6df44 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java @@ -280,21 +280,23 @@ public class HSSFCellStyle implements CellStyle * Get the contents of the format string, by looking up * the DataFormat against the bound workbook * @see org.apache.poi.hssf.usermodel.HSSFDataFormat + * @return the format string or "General" if not found */ public String getDataFormatString() { - HSSFDataFormat format = new HSSFDataFormat(workbook); - - return format.getFormat(getDataFormat()); + return getDataFormatString(workbook); } /** * Get the contents of the format string, by looking up * the DataFormat against the supplied workbook * @see org.apache.poi.hssf.usermodel.HSSFDataFormat + * + * @return the format string or "General" if not found */ public String getDataFormatString(org.apache.poi.ss.usermodel.Workbook workbook) { HSSFDataFormat format = new HSSFDataFormat( ((HSSFWorkbook)workbook).getWorkbook() ); - return format.getFormat(getDataFormat()); + int idx = getDataFormat(); + return idx == -1 ? "General" : format.getFormat(getDataFormat()); } /** * Get the contents of the format string, by looking up diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index e9e3be6b3c..d4bc9613d0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -1868,9 +1868,7 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet } else { String sval = null; if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { - HSSFDataFormat dataformat = wb.createDataFormat(); - short idx = style.getDataFormat(); - String format = dataformat.getFormat(idx).replaceAll("\"", ""); + String format = style.getDataFormatString().replaceAll("\"", ""); double value = cell.getNumericCellValue(); try { NumberFormat fmt; diff --git a/src/testcases/org/apache/poi/hssf/data/45322.xls b/src/testcases/org/apache/poi/hssf/data/45322.xls Binary files differnew file mode 100644 index 0000000000..711721400e --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/data/45322.xls diff --git a/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java b/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java index 2ba27e963b..14bcde38b3 100644 --- a/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java @@ -102,7 +102,7 @@ public final class TestArrayPtg extends TestCase { public void testElementOrderingInSpreadsheet() { HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ex42564-elementOrder.xls"); - // The formula has an array with 3 rows and 5 column + // The formula has an array with 3 rows and 5 columns String formula = wb.getSheetAt(0).getRow(0).getCell((short)0).getCellFormula(); // TODO - These number literals should not have '.0'. Excel has different number rendering rules @@ -111,4 +111,21 @@ public final class TestArrayPtg extends TestCase { } assertEquals("SUM({1.0,2.0,3.0;4.0,5.0,6.0;7.0,8.0,9.0;10.0,11.0,12.0;13.0,14.0,15.0})", formula); } + + public void testToFormulaString() { + ArrayPtg ptg = new ArrayPtg(new TestcaseRecordInputStream(ArrayPtg.sid, ENCODED_PTG_DATA)); + + ptg.readTokenValues(new TestcaseRecordInputStream(0, ENCODED_CONSTANT_DATA)); + + String actualFormula; + try { + actualFormula = ptg.toFormulaString(null); + } catch (IllegalArgumentException e) { + if (e.getMessage().equals("Unexpected constant class (java.lang.Boolean)")) { + throw new AssertionFailedError("Identified bug 45380"); + } + throw e; + } + assertEquals("{TRUE,\"ABCD\";\"E\",0.0;FALSE,\"FG\"}", actualFormula); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 24d7ccfdad..40e4bd34dd 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -1354,4 +1354,13 @@ public final class TestBugs extends TestCase { // TODO - check the formula once tables and // arrays are properly supported } + + /** + * 45322: HSSFSheet.autoSizeColumn fails when style.getDataFormat() returns -1 + */ + public void test45322() throws Exception { + HSSFWorkbook wb = openSample("44958.xls"); + HSSFSheet sh = wb.getSheetAt(0); + for(short i=0; i < 30; i++) sh.autoSizeColumn(i); + } } |