]> source.dussan.org Git - poi.git/commitdiff
Fixed XSSFCell to properly read inline strings
authorYegor Kozlov <yegor@apache.org>
Sat, 23 May 2009 08:20:55 +0000 (08:20 +0000)
committerYegor Kozlov <yegor@apache.org>
Sat, 23 May 2009 08:20:55 +0000 (08:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@777834 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
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
src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx [new file with mode: 0755]

index 939ab49263a7738d43f7ed56c5cd09d33d526661..b79dac6509e7c44a5869ba5230adc5ecdafef6c2 100644 (file)
@@ -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>
index 481dce9d5058ca03ae90dc67c4a22fac76989109..5689633510e98ab6ba54fb772eb660a22e150778 100644 (file)
@@ -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>
index 3143037430a79f74312a2e9d03c66e16cf4d6335..63a3d80813d33327ccb663e7e7ac17a2f58831ca 100644 (file)
@@ -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:
index f97a6d1b8155f46b7905f105faacce051334048b..40a937b11021418d7390e2f293c7d7842ca625cd 100755 (executable)
@@ -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());
+    }
 }
\ No newline at end of file
diff --git a/src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx b/src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx
new file mode 100755 (executable)
index 0000000..d9823b4
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/xlsx-jdbc.xlsx differ