From 1f6833c72d934fe4d9d0233321a9a6dc5f8cff08 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Sat, 11 Sep 2010 13:48:00 +0000 Subject: [PATCH] avoid corruption of XSSFWorkbook after removing all merged cells from sheet, see Bugzilla 49895 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@996148 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java | 6 +++++- .../org/apache/poi/xssf/usermodel/TestXSSFSheet.java | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index a837169ed..0e77fa1bd 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 49895 - avoid corruption of XSSFWorkbook after removing all merged cells from sheet 49907 - fixed inconsistent behaviour between HSSF and XSSF when creating consecutive names Add getMimeType() method to HWPF Picture, alongside existing file extension Add code for reading Ole10Native data diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index d33bea8f9..ce870cfcf 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -1350,7 +1350,11 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { mergeCellsArray[i - 1] = ctMergeCells.getMergeCellArray(i); } } - ctMergeCells.setMergeCellArray(mergeCellsArray); + if(mergeCellsArray.length > 0){ + ctMergeCells.setMergeCellArray(mergeCellsArray); + } else{ + worksheet.unsetMergeCells(); + } } /** diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 7eec1794a..f38d773e6 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -253,6 +253,8 @@ public final class TestXSSFSheet extends BaseTestSheet { sheet.removeMergedRegion(1); sheet.removeMergedRegion(0); assertEquals(0, sheet.getNumMergedRegions()); + assertNull(" CTMergeCells should be deleted after removing the last merged " + + "region on the sheet.", sheet.getCTWorksheet().getMergeCells()); } public void testSetDefaultColumnStyle() {