diff --git a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java index e3eb40e20..761d821dc 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java @@ -266,5 +266,10 @@ public class FormulaRecordAggregate return true; } + + public String getStringValue() { + if(stringRecord==null) return null; + return stringRecord.getString(); + } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 394c60c7d..00c0a32d2 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -338,6 +338,7 @@ public class HSSFCell case CELL_TYPE_FORMULA : cellValue = (( FormulaRecordAggregate ) cval).getFormulaRecord().getValue(); + stringValue=((FormulaRecordAggregate) cval).getStringValue(); break; case CELL_TYPE_BOOLEAN : @@ -820,6 +821,7 @@ public class HSSFCell /** * get the value of the cell as a string - for numeric cells we throw an exception. * For blank cells we return an empty string. + * For formulaCells that are not string Formulas, we return empty String */ public String getStringCellValue() @@ -843,6 +845,10 @@ public class HSSFCell throw new NumberFormatException( "You cannot get a string value from an error cell"); } + if (cellType == CELL_TYPE_FORMULA) + { + if (stringValue==null) return ""; + } return stringValue; } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java index 0baf1a3b6..5b75303e1 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java @@ -1106,6 +1106,20 @@ extends TestCase { assertEquals(4d, d2.getNumericCellValue(), 1e-9); } + public void testStringFormulaRead() throws IOException { + File dir = new File(System.getProperty("HSSF.testdata.path")); + File xls = new File(dir, "StringFormulas.xls"); + FileInputStream in = new FileInputStream(xls); + HSSFWorkbook w; + try { + w = new HSSFWorkbook(in); + } finally { + in.close(); + } + HSSFCell c = w.getSheetAt(0).getRow(0).getCell((short)0); + assertEquals("String Cell value","XYZ",c.getStringCellValue()); + } + public static void main(String [] args) { System.out .println("Testing org.apache.poi.hssf.usermodel.TestFormulas");