You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2009/09/26 12:41:01 UTC
svn commit: r819106 - in /poi/trunk:
src/documentation/content/xdocs/status.xml
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
test-data/spreadsheet/47889.xlsx
Author: yegor
Date: Sat Sep 26 10:41:01 2009
New Revision: 819106
URL: http://svn.apache.org/viewvc?rev=819106&view=rev
Log:
fixed XSSFCell.getStringCellValue() to properly handle cached formula results
Added:
poi/trunk/test-data/spreadsheet/47889.xlsx (with props)
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=819106&r1=819105&r2=819106&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sat Sep 26 10:41:01 2009
@@ -33,6 +33,7 @@
<changes>
<release version="3.6-beta1" date="2009-??-??">
+ <action dev="POI-DEVELOPERS" type="fix">47889 - fixed XSSFCell.getStringCellValue() to properly handle cached formula results</action>
</release>
<release version="3.5-FINAL" date="2009-09-28">
<action dev="POI-DEVELOPERS" type="fix">47747 - fixed logic for locating shared formula records</action>
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java?rev=819106&r1=819105&r2=819106&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java Sat Sep 26 10:41:01 2009
@@ -249,6 +249,9 @@
} else {
rt = new XSSFRichTextString("");
}
+ } else if (_cell.getT() == STCellType.STR) {
+ //cached formula value
+ rt = new XSSFRichTextString(_cell.isSetV() ? _cell.getV() : "");
} else {
if (_cell.isSetV()) {
int idx = Integer.parseInt(_cell.getV());
@@ -411,12 +414,15 @@
/**
* Return the cell's style.
*
- * @return the cell's style. Always not-null. Default cell style has zero index and can be obtained as
- * <code>workbook.getCellStyleAt(0)</code>
+ * @return the cell's style.</code>
*/
public XSSFCellStyle getCellStyle() {
- long idx = _cell.isSetS() ? _cell.getS() : 0;
- return _stylesSource.getStyleAt((int)idx);
+ XSSFCellStyle style = null;
+ if(_stylesSource.getNumCellStyles() > 0){
+ long idx = _cell.isSetS() ? _cell.getS() : 0;
+ style = _stylesSource.getStyleAt((int)idx);
+ }
+ return style;
}
/**
@@ -629,7 +635,7 @@
private void setBlank(){
CTCell blank = CTCell.Factory.newInstance();
blank.setR(_cell.getR());
- blank.setS(_cell.getS());
+ if(_cell.isSetS()) blank.setS(_cell.getS());
_cell.set(blank);
}
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java?rev=819106&r1=819105&r2=819106&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java Sat Sep 26 10:41:01 2009
@@ -21,6 +21,7 @@
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellType;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell;
/**
* @author Yegor Kozlov
@@ -105,4 +106,64 @@
assertEquals(0, sst.getCount());
assertEquals(XSSFCell.CELL_TYPE_BLANK, cell_1.getCellType());
}
+
+ public void testFormulaString() {
+ XSSFWorkbook wb = new XSSFWorkbook();
+ XSSFCell cell = wb.createSheet().createRow(0).createCell(0);
+ CTCell ctCell = cell.getCTCell(); //low-level bean holding cell's xml
+
+ cell.setCellFormula("A2");
+ assertEquals(XSSFCell.CELL_TYPE_FORMULA, cell.getCellType());
+ //the value is not set and cell's type='N' which means blank
+ assertEquals(STCellType.N, ctCell.getT());
+
+ //set cached formula value
+ cell.setCellValue("t='str'");
+ //we are still of 'formula' type
+ assertEquals(XSSFCell.CELL_TYPE_FORMULA, cell.getCellType());
+ //cached formula value is set and cell's type='STR'
+ assertEquals(STCellType.STR, ctCell.getT());
+ assertEquals("t='str'", cell.getStringCellValue());
+
+ //now remove the formula, the cached formula result remains
+ cell.setCellFormula(null);
+ assertEquals(XSSFCell.CELL_TYPE_STRING, cell.getCellType());
+ assertEquals(STCellType.STR, ctCell.getT());
+ //the line below failed prior to fix of Bug #47889
+ assertEquals("t='str'", cell.getStringCellValue());
+
+ //revert to a blank cell
+ cell.setCellValue((String)null);
+ assertEquals(XSSFCell.CELL_TYPE_BLANK, cell.getCellType());
+ assertEquals(STCellType.N, ctCell.getT());
+ assertEquals("", cell.getStringCellValue());
+ }
+
+ /**
+ * Bug 47889: problems when calling XSSFCell.getStringCellValue() on a workbook created in Gnumeric
+ */
+ public void test47889() {
+ XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("47889.xlsx");
+ XSSFSheet sh = wb.getSheetAt(0);
+
+ XSSFCell cell;
+
+ //try a string cell
+ cell = sh.getRow(0).getCell(0);
+ assertEquals(XSSFCell.CELL_TYPE_STRING, cell.getCellType());
+ assertEquals("a", cell.getStringCellValue());
+ assertEquals("a", cell.toString());
+ //Gnumeric produces spreadsheets without styles
+ //make sure we return null for that instead of throwing OutOfBounds
+ assertEquals(null, cell.getCellStyle());
+
+ //try a numeric cell
+ cell = sh.getRow(1).getCell(0);
+ assertEquals(XSSFCell.CELL_TYPE_NUMERIC, cell.getCellType());
+ assertEquals(1.0, cell.getNumericCellValue());
+ assertEquals("1.0", cell.toString());
+ //Gnumeric produces spreadsheets without styles
+ //make sure we return null for that instead of throwing OutOfBounds
+ assertEquals(null, cell.getCellStyle());
+ }
}
Added: poi/trunk/test-data/spreadsheet/47889.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/47889.xlsx?rev=819106&view=auto
==============================================================================
Binary file - no diff available.
Propchange: poi/trunk/test-data/spreadsheet/47889.xlsx
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org