import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import java.util.TreeSet;
import org.apache.poi.ddf.EscherRecord;
import org.apache.poi.hssf.model.DrawingManager2;
*
* @param index of the region to unmerge
*/
-
@Override
public void removeMergedRegion(int index) {
_sheet.removeMergedRegion(index);
}
+
+ /**
+ * Removes a number of merged regions of cells (hence letting them free)
+ *
+ * @param indices A set of the regions to unmerge
+ */
+ @Override
+ public void removeMergedRegions(Collection<Integer> indices) {
+ for (int i : (new TreeSet<Integer>(indices)).descendingSet()) {
+ _sheet.removeMergedRegion(i);
+ }
+ }
/**
* returns the number of merged regions
package org.apache.poi.ss.usermodel;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
* @param index of the region to unmerge
*/
void removeMergedRegion(int index);
+
+ /**
+ * Removes a number of merged regions of cells (hence letting them free)
+ *
+ * @param indices A set of the regions to unmerge
+ */
+ void removeMergedRegions(Collection<Integer> indices);
/**
* Returns the number of merged regions
import static org.junit.Assume.assumeTrue;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
import org.apache.poi.hssf.util.PaneInformation;
import org.apache.poi.ss.ITestDataProvider;
wb.close();
}
+
+ /**
+ * Remove multiple merged regions
+ */
+ @Test
+ public void removeMergedRegions() throws IOException {
+ Workbook wb = _testDataProvider.createWorkbook();
+ Sheet sheet = wb.createSheet();
+
+ Map<Integer, CellRangeAddress> mergedRegions = new HashMap<Integer, CellRangeAddress>();
+ for (int r=0; r<10; r++) {
+ CellRangeAddress region = new CellRangeAddress(r, r, 0, 1);
+ mergedRegions.put(r, region);
+ sheet.addMergedRegion(region);
+ }
+ assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions());
+
+ Collection<Integer> removed = Arrays.asList(0, 2, 3, 6, 8);
+ mergedRegions.keySet().removeAll(removed);
+ sheet.removeMergedRegions(removed);
+ assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions());
+
+ wb.close();
+ }
+
+ private static void assertCollectionEquals(Collection<? extends Object> expected, Collection<? extends Object> actual) {
+ Set<Object> e = new HashSet<Object>(expected);
+ Set<Object> a = new HashSet<Object>(actual);
+ assertEquals(e, a);
+ }
@Test
public void shiftMerged() throws IOException {