]> source.dussan.org Git - poi.git/commitdiff
Fixed XSSFCell to preserve cell style when cell value is set to blank, also avoid...
authorYegor Kozlov <yegor@apache.org>
Fri, 17 Apr 2009 18:02:01 +0000 (18:02 +0000)
committerYegor Kozlov <yegor@apache.org>
Fri, 17 Apr 2009 18:02:01 +0000 (18:02 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@766103 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/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java
src/testcases/org/apache/poi/hssf/data/47026.xlsm [new file with mode: 0755]
src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java

index 4a1d8116cc31395eae2362bee9512f87113962db..f58747e7edd00256ccc44b27aa499d600352d5c8 100644 (file)
@@ -37,6 +37,8 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.5-beta6" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank</action>
+           <action dev="POI-DEVELOPERS" type="fix">47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST</action>
            <action dev="POI-DEVELOPERS" type="fix">46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream</action>
            <action dev="POI-DEVELOPERS" type="fix">47034 - Fix reading the name of a NameRecord when the name is very long</action>
            <action dev="POI-DEVELOPERS" type="fix">47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs</action>
index 7564d7d2599bec394ce7833b4b78d546f8001955..4ef245ad87680cfb218d3b88c5a8c4a15bbd74f5 100644 (file)
@@ -34,6 +34,8 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.5-beta6" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank</action>
+           <action dev="POI-DEVELOPERS" type="fix">47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST</action>
            <action dev="POI-DEVELOPERS" type="fix">46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream</action>
            <action dev="POI-DEVELOPERS" type="fix">47034 - Fix reading the name of a NameRecord when the name is very long</action>
            <action dev="POI-DEVELOPERS" type="fix">47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs</action>
index f0ad410adf064c7ffb94258dc9b1730333d45e9e..2a0e1ff4b27a25d562a2da47ed3046bc313c4066 100644 (file)
@@ -627,6 +627,7 @@ public final class XSSFCell implements Cell {
     private void setBlank(){
         CTCell blank = CTCell.Factory.newInstance();
         blank.setR(cell.getR());
+        blank.setS(cell.getS());
         cell.set(blank);
     }
 
index 9cb66c53118e8e7d5f19943195fd9df250002891..1648ac86f35e79c69e0d25c187753bc578c7efea 100644 (file)
@@ -179,6 +179,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
                 }
             }
 
+            if(sharedStringSource == null) {
+                //Create SST if it is missing
+                sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
+            }
+
             // Load individual sheets. The order of sheets is defined by the order of CTSheet elements in the workbook
             sheets = new ArrayList<XSSFSheet>(shIdMap.size());
             for (CTSheet ctSheet : this.workbook.getSheets().getSheetArray()) {
@@ -192,11 +197,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
                 sheets.add(sh);
             }
 
-            if(sharedStringSource == null) {
-                //Create SST if it is missing
-                sharedStringSource = (SharedStringsTable)createRelationship(XSSFRelation.SHARED_STRINGS, XSSFFactory.getInstance());
-            }
-
             // Process the named ranges
             namedRanges = new ArrayList<XSSFName>();
             if(workbook.isSetDefinedNames()) {
index b851d8827e7f05079609c38e20fb9d9c8f5abecf..f97a6d1b8155f46b7905f105faacce051334048b 100755 (executable)
@@ -17,7 +17,7 @@
 
 package org.apache.poi.xssf.usermodel;
 
-import org.apache.poi.ss.usermodel.BaseTestCell;
+import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 
 /**
@@ -28,4 +28,26 @@ public final class TestXSSFCell extends BaseTestCell {
        public TestXSSFCell() {
                super(XSSFITestDataProvider.getInstance());
        }
+
+    /**
+     * Bug 47026: trouble changing cell type when workbook doesn't contain
+     * Shared String Table
+     */
+    public void test47026_1() throws Exception {
+        Workbook source = _testDataProvider.openSampleWorkbook("47026.xlsm");
+        Sheet sheet = source.getSheetAt(0);
+        Row row = sheet.getRow(0);
+        Cell cell = row.getCell(0);
+        cell.setCellType(Cell.CELL_TYPE_STRING);
+        cell.setCellValue("456");
+    }
+
+    public void test47026_2() throws Exception {
+        Workbook source = _testDataProvider.openSampleWorkbook("47026.xlsm");
+        Sheet sheet = source.getSheetAt(0);
+        Row row = sheet.getRow(0);
+        Cell cell = row.getCell(0);
+        cell.setCellFormula(null);
+        cell.setCellValue("456");
+    }
 }
\ No newline at end of file
diff --git a/src/testcases/org/apache/poi/hssf/data/47026.xlsm b/src/testcases/org/apache/poi/hssf/data/47026.xlsm
new file mode 100755 (executable)
index 0000000..77e4eb9
Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/47026.xlsm differ
index 5649c950e847e7aa9917d0fa8b1d041273be28de..1a987c1ac81004b57106d911eaadd50de4b4f7a3 100755 (executable)
@@ -22,7 +22,6 @@ import java.util.Calendar;
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
-import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 import org.apache.poi.ss.ITestDataProvider;
 
 /**
@@ -31,7 +30,7 @@ import org.apache.poi.ss.ITestDataProvider;
  */
 public abstract class BaseTestCell extends TestCase {
 
-       private final ITestDataProvider _testDataProvider;
+       protected final ITestDataProvider _testDataProvider;
 
        /**
         * @param testDataProvider an object that provides test data in HSSF / XSSF specific way
@@ -401,9 +400,23 @@ public abstract class BaseTestCell extends TestCase {
                Cell cell = wb.createSheet("Sheet1").createRow(0).createCell(0);
                cell.setCellFormula("B1&C1");
                try {
-                       cell.setCellValue(new HSSFRichTextString("hello"));
+                       cell.setCellValue(wb.getCreationHelper().createRichTextString("hello"));
                } catch (ClassCastException e) {
                        throw new AssertionFailedError("Identified bug 44606");
                }
        }
+
+    /**
+     *  Make sure that cell.setCellType(Cell.CELL_TYPE_BLANK) preserves the cell style
+     */
+    public void testSetBlank_bug47028() {
+        Workbook wb = _testDataProvider.createWorkbook();
+        CellStyle style = wb.createCellStyle();
+        Cell cell = wb.createSheet("Sheet1").createRow(0).createCell(0);
+        cell.setCellStyle(style);
+        int i1 = cell.getCellStyle().getIndex();
+        cell.setCellType(Cell.CELL_TYPE_BLANK);
+        int i2 = cell.getCellStyle().getIndex();
+        assertEquals(i1, i2);
+    }
 }