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
This commit is contained in:
parent
1e40b052a3
commit
ecb76070a9
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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()) {
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
BIN
src/testcases/org/apache/poi/hssf/data/47026.xlsm
Executable file
BIN
src/testcases/org/apache/poi/hssf/data/47026.xlsm
Executable file
Binary file not shown.
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user