Bläddra i källkod

Fix bug #50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1072022 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_8_BETA1
Nick Burch 13 år sedan
förälder
incheckning
51653729ce

+ 1
- 0
src/documentation/content/xdocs/status.xml Visa fil



<changes> <changes>
<release version="3.8-beta1" date="2010-??-??"> <release version="3.8-beta1" date="2010-??-??">
<action dev="poi-developers" type="fix">50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another</action>
<action dev="poi-developers" type="fix">46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based</action> <action dev="poi-developers" type="fix">46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based</action>
<action dev="poi-developers" type="fix">50756 - When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General</action> <action dev="poi-developers" type="fix">50756 - When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General</action>
<action dev="poi-developers" type="fix">fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded</action> <action dev="poi-developers" type="fix">fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded</action>

+ 10
- 1
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java Visa fil

_comment.setRef(ref.formatAsString()); _comment.setRef(ref.formatAsString());
_comments.referenceUpdated(oldRef, _comment); _comments.referenceUpdated(oldRef, _comment);
if(_vmlShape != null) _vmlShape.getClientDataArray(0).setColumnArray(0, new BigInteger(String.valueOf(col)));
if(_vmlShape != null) {
_vmlShape.getClientDataArray(0).setColumnArray(
new BigInteger[] { new BigInteger(String.valueOf(col)) }
);
// There is a very odd xmlbeans bug when changing the column
// arrays which can lead to corrupt pointer
// This call seems to fix them again... See bug #50795
_vmlShape.getClientDataList().toString();
}
} }


/** /**

+ 52
- 0
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java Visa fil

assertEquals("SUM(\n1,2\n)", c.getCellFormula()); assertEquals("SUM(\n1,2\n)", c.getCellFormula());
assertEquals(3.0, c.getNumericCellValue()); assertEquals(3.0, c.getNumericCellValue());
} }
/**
* Moving a cell comment from one cell to another
*/
public void test50795() throws Exception {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50795.xlsx");
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row = sheet.getRow(0);

XSSFCell cellWith = row.getCell(0);
XSSFCell cellWithoutComment = row.getCell(1);
assertNotNull(cellWith.getCellComment());
assertNull(cellWithoutComment.getCellComment());
String exp = "\u0410\u0432\u0442\u043e\u0440:\ncomment";
XSSFComment comment = cellWith.getCellComment();
assertEquals(exp, comment.getString().getString());
// Check we can write it out and read it back as-is
wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
cellWith = row.getCell(0);
cellWithoutComment = row.getCell(1);
// Double check things are as expected
assertNotNull(cellWith.getCellComment());
assertNull(cellWithoutComment.getCellComment());
comment = cellWith.getCellComment();
assertEquals(exp, comment.getString().getString());

// Move the comment
cellWithoutComment.setCellComment(comment);
// Write out and re-check
wb = XSSFTestDataSamples.writeOutAndReadBack(wb);
sheet = wb.getSheetAt(0);
row = sheet.getRow(0);
// Ensure it swapped over
cellWith = row.getCell(0);
cellWithoutComment = row.getCell(1);
assertNull(cellWith.getCellComment());
assertNotNull(cellWithoutComment.getCellComment());
comment = cellWithoutComment.getCellComment();
assertEquals(exp, comment.getString().getString());
}
} }

Binär
test-data/spreadsheet/50795.xlsx Visa fil


Laddar…
Avbryt
Spara