Fixed XSSFCell to properly read inline strings
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@777834 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5a9db459c4
commit
a9b8aa1be6
@ -37,6 +37,7 @@
|
||||
|
||||
<!-- Don't forget to update status.xml too! -->
|
||||
<release version="3.5-beta6" date="2009-??-??">
|
||||
<action dev="POI-DEVELOPERS" type="fix">47206 - Fixed XSSFCell to properly read inline strings</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47250 - Fixed FontRecord to expect unicode flags even when name length is zero</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47198 - Fixed formula evaluator comparison of -0.0 and 0.0</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47229 - Fixed ExternalNameRecord to handle DDE links</action>
|
||||
|
@ -34,6 +34,7 @@
|
||||
<!-- Don't forget to update changes.xml too! -->
|
||||
<changes>
|
||||
<release version="3.5-beta6" date="2009-??-??">
|
||||
<action dev="POI-DEVELOPERS" type="fix">47206 - Fixed XSSFCell to properly read inline strings</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47250 - Fixed FontRecord to expect unicode flags even when name length is zero</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47198 - Fixed formula evaluator comparison of -0.0 and 0.0</action>
|
||||
<action dev="POI-DEVELOPERS" type="add">47229 - Fixed ExternalNameRecord to handle DDE links</action>
|
||||
|
@ -242,14 +242,24 @@ public final class XSSFCell implements Cell {
|
||||
rt = new XSSFRichTextString("");
|
||||
break;
|
||||
case CELL_TYPE_STRING:
|
||||
if (!cell.isSetV()) rt = new XSSFRichTextString("");
|
||||
else {
|
||||
if (cell.getT() == STCellType.INLINE_STR) {
|
||||
return new XSSFRichTextString(cell.getV());
|
||||
if (cell.getT() == STCellType.INLINE_STR) {
|
||||
if(cell.isSetIs()) {
|
||||
//string is expressed directly in the cell definition instead of implementing the shared string table.
|
||||
rt = new XSSFRichTextString(cell.getIs());
|
||||
} else if (cell.isSetV()) {
|
||||
//cached result of a formula
|
||||
rt = new XSSFRichTextString(cell.getV());
|
||||
} else {
|
||||
rt = new XSSFRichTextString("");
|
||||
}
|
||||
} else {
|
||||
if (cell.isSetV()) {
|
||||
int idx = Integer.parseInt(cell.getV());
|
||||
rt = new XSSFRichTextString(sharedStringSource.getEntryAt(idx));
|
||||
}
|
||||
else {
|
||||
rt = new XSSFRichTextString("");
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CELL_TYPE_FORMULA:
|
||||
|
@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel;
|
||||
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.apache.poi.xssf.XSSFITestDataProvider;
|
||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellType;
|
||||
|
||||
/**
|
||||
* @author Yegor Kozlov
|
||||
@ -50,4 +51,32 @@ public final class TestXSSFCell extends BaseTestCell {
|
||||
cell.setCellFormula(null);
|
||||
cell.setCellValue("456");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that we can read inline strings that are expressed directly in the cell definition
|
||||
* instead of implementing the shared string table.
|
||||
*
|
||||
* Some programs, for example, Microsoft Excel Driver for .xlsx insert inline string
|
||||
* instead of using the shared string table. See bug 47206
|
||||
*/
|
||||
public void testInlineString() throws Exception {
|
||||
XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("xlsx-jdbc.xlsx");
|
||||
XSSFSheet sheet = wb.getSheetAt(0);
|
||||
XSSFRow row = sheet.getRow(1);
|
||||
|
||||
XSSFCell cell_0 = row.getCell(0);
|
||||
assertEquals(STCellType.INT_INLINE_STR, cell_0.getCTCell().getT().intValue());
|
||||
assertTrue(cell_0.getCTCell().isSetIs());
|
||||
assertEquals("A Very large string in column 1 AAAAAAAAAAAAAAAAAAAAA", cell_0.getStringCellValue());
|
||||
|
||||
XSSFCell cell_1 = row.getCell(1);
|
||||
assertEquals(STCellType.INT_INLINE_STR, cell_1.getCTCell().getT().intValue());
|
||||
assertTrue(cell_1.getCTCell().isSetIs());
|
||||
assertEquals("foo", cell_1.getStringCellValue());
|
||||
|
||||
XSSFCell cell_2 = row.getCell(2);
|
||||
assertEquals(STCellType.INT_INLINE_STR, cell_2.getCTCell().getT().intValue());
|
||||
assertTrue(cell_2.getCTCell().isSetIs());
|
||||
assertEquals("bar", row.getCell(2).getStringCellValue());
|
||||
}
|
||||
}
|
BIN
src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx
Executable file
BIN
src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user