diff options
author | Dominik Stadler <centic@apache.org> | 2015-05-19 13:13:09 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2015-05-19 13:13:09 +0000 |
commit | 5209d15d1c2d12346ba57fdc41267ffd4e45a1f0 (patch) | |
tree | 77e0fc99de3c8f77365ab2de42720c23c92577d0 /src/ooxml/testcases/org | |
parent | 636fefef8a9355e4e96fa2cdbb99f9b4abb03673 (diff) | |
download | poi-5209d15d1c2d12346ba57fdc41267ffd4e45a1f0.tar.gz poi-5209d15d1c2d12346ba57fdc41267ffd4e45a1f0.zip |
Prevent problems reported in Bug 56574 by ensuring that Cells are properly removed when a row is overwritten by calling createRow() with it's rownum.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1680280 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/testcases/org')
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 5658f4c12a..60f6188a01 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -34,6 +34,9 @@ import java.io.IOException; import java.util.Arrays; import java.util.Calendar; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.POIDataSamples; @@ -87,6 +90,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.extensions.XSSFCellFill; import org.junit.Ignore; import org.junit.Test; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCalcCell; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedName; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDefinedNames; @@ -2502,4 +2506,98 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { wb.close(); tmp.delete(); } + + @Test + public void test56574() throws IOException { + runTest56574(false); + runTest56574(true); + } + + @SuppressWarnings("deprecation") + private void runTest56574(boolean createRow) throws IOException { + Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56574.xlsx"); + + Sheet sheet = wb.getSheet("Func"); + assertNotNull(sheet); + + Map<String, Object[]> data; + data = new TreeMap<String, Object[]>(); + data.put("1", new Object[] {"ID", "NAME", "LASTNAME"}); + data.put("2", new Object[] {2, "Amit", "Shukla"}); + data.put("3", new Object[] {1, "Lokesh", "Gupta"}); + data.put("4", new Object[] {4, "John", "Adwards"}); + data.put("5", new Object[] {2, "Brian", "Schultz"}); + + Set<String> keyset = data.keySet(); + int rownum = 1; + for (String key : keyset) + { + final Row row; + if(createRow) { + row = sheet.createRow(rownum++); + } else { + row = sheet.getRow(rownum++); + } + assertNotNull(row); + + Object [] objArr = data.get(key); + int cellnum = 0; + for (Object obj : objArr) + { + Cell cell = row.getCell(cellnum); + if(cell == null){ + cell = row.createCell(cellnum); + } else { + if(cell.getCellType() == Cell.CELL_TYPE_FORMULA) { + cell.setCellFormula(null); + cell.getCellStyle().setDataFormat((short) 0); + } + } + if(obj instanceof String) { + cell.setCellValue((String)obj); + } else if(obj instanceof Integer) { + cell.setCellValue((Integer)obj); + } + cellnum++; + } + } + + XSSFFormulaEvaluator.evaluateAllFormulaCells((XSSFWorkbook) wb); + wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); + + CalculationChain chain = ((XSSFWorkbook)wb).getCalculationChain(); + CTCalcCell[] cArray = chain.getCTCalcChain().getCArray(); + for(CTCalcCell calc : cArray) { + // A2 to A6 should be gone + assertFalse(calc.getR().equals("A2")); + assertFalse(calc.getR().equals("A3")); + assertFalse(calc.getR().equals("A4")); + assertFalse(calc.getR().equals("A5")); + assertFalse(calc.getR().equals("A6")); + } + + /*FileOutputStream out = new FileOutputStream(new File("C:\\temp\\56574.xlsx")); + try { + wb.write(out); + } finally { + out.close(); + }*/ + + Workbook wbBack = XSSFTestDataSamples.writeOutAndReadBack(wb); + Sheet sheetBack = wbBack.getSheet("Func"); + assertNotNull(sheetBack); + + chain = ((XSSFWorkbook)wbBack).getCalculationChain(); + cArray = chain.getCTCalcChain().getCArray(); + for(CTCalcCell calc : cArray) { + // A2 to A6 should be gone + assertFalse(calc.getR().equals("A2")); + assertFalse(calc.getR().equals("A3")); + assertFalse(calc.getR().equals("A4")); + assertFalse(calc.getR().equals("A5")); + assertFalse(calc.getR().equals("A6")); + } + + wb.close(); + } } |