From: Yegor Kozlov Date: Fri, 17 Apr 2009 18:02:01 +0000 (+0000) Subject: Fixed XSSFCell to preserve cell style when cell value is set to blank, also avoid... X-Git-Tag: REL_3_5_BETA6~56 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9eff4e10b36d171ed5a33771066b779604897aff;p=poi.git Fixed XSSFCell to preserve cell style when cell value is set to blank, also avoid NPE in XSSFCell.setCellType() when workbook does not have SST, see bugs 47026 and 47028 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@766103 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 4a1d8116cc..f58747e7ed 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,8 @@ + 47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank + 47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST 46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 7564d7d259..4ef245ad87 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,8 @@ + 47028 - Fixed XSSFCell to preserve cell style when cell value is set to blank + 47026 - Avoid NPE in XSSFCell.setCellType() when workbook does not have SST 46987 - Allow RecordFactory to handle non-zero padding at the end of the workbook stream 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index f0ad410adf..2a0e1ff4b2 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -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); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index 9cb66c5311..1648ac86f3 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -179,6 +179,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(shIdMap.size()); for (CTSheet ctSheet : this.workbook.getSheets().getSheetArray()) { @@ -192,11 +197,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(); if(workbook.isSetDefinedNames()) { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java index b851d8827e..f97a6d1b81 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java @@ -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 index 0000000000..77e4eb97f3 Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/47026.xlsm differ diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java index 5649c950e8..1a987c1ac8 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestCell.java @@ -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); + } }