aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/documentation/content/xdocs/changes.xml2
-rw-r--r--src/documentation/content/xdocs/status.xml2
-rw-r--r--src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java2
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFCellStyle.java10
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java4
-rw-r--r--src/testcases/org/apache/poi/hssf/data/45322.xlsbin0 -> 86528 bytes
-rw-r--r--src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java19
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java9
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
new file mode 100644
index 0000000000..711721400e
--- /dev/null
+++ b/src/testcases/org/apache/poi/hssf/data/45322.xls
Binary files differ
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);
+ }
}