package org.apache.poi.ss.usermodel;
+import static org.apache.poi.POITestCase.assertBetween;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeTrue;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
import org.apache.poi.common.usermodel.HyperlinkType;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.util.CellAddress;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.PaneInformation;
-import org.junit.Rule;
import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import java.io.IOException;
-import java.util.*;
-import java.util.Map.Entry;
-
-import static org.apache.poi.POITestCase.assertBetween;
-import static org.junit.Assert.*;
-import static org.junit.Assume.assumeTrue;
/**
* Common superclass for testing {@link org.apache.poi.hssf.usermodel.HSSFCell},
public abstract class BaseTestSheet {
private static final int ROW_COUNT = 40000;
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
protected final ITestDataProvider _testDataProvider;
protected BaseTestSheet(ITestDataProvider testDataProvider) {
_testDataProvider = testDataProvider;
}
-
+
protected void trackColumnsForAutoSizingIfSXSSF(Sheet sheet) {
// do nothing for Sheet base class. This will be overridden for SXSSFSheets.
}
@Test
public void createRow() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- assertEquals(0, sheet.getPhysicalNumberOfRows());
-
- //Test that we get null for undefined rownumber
- assertNull(sheet.getRow(1));
-
- // Test row creation with consecutive indexes
- Row row1 = sheet.createRow(0);
- Row row2 = sheet.createRow(1);
- assertEquals(0, row1.getRowNum());
- assertEquals(1, row2.getRowNum());
- Iterator<Row> it = sheet.rowIterator();
- assertTrue(it.hasNext());
- assertSame(row1, it.next());
- assertTrue(it.hasNext());
- assertSame(row2, it.next());
- assertEquals(1, sheet.getLastRowNum());
-
- // Test row creation with non consecutive index
- Row row101 = sheet.createRow(100);
- assertNotNull(row101);
- assertEquals(100, sheet.getLastRowNum());
- assertEquals(3, sheet.getPhysicalNumberOfRows());
-
- // Test overwriting an existing row
- Row row2_ovrewritten = sheet.createRow(1);
- Cell cell = row2_ovrewritten.createCell(0);
- cell.setCellValue(100);
- Iterator<Row> it2 = sheet.rowIterator();
- assertTrue(it2.hasNext());
- assertSame(row1, it2.next());
- assertTrue(it2.hasNext());
- Row row2_ovrewritten_ref = it2.next();
- assertSame(row2_ovrewritten, row2_ovrewritten_ref);
- assertEquals(100.0, row2_ovrewritten_ref.getCell(0).getNumericCellValue(), 0.0);
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ assertEquals(0, sheet.getPhysicalNumberOfRows());
+
+ //Test that we get null for undefined rownumber
+ assertNull(sheet.getRow(1));
+
+ // Test row creation with consecutive indexes
+ Row row1 = sheet.createRow(0);
+ Row row2 = sheet.createRow(1);
+ assertEquals(0, row1.getRowNum());
+ assertEquals(1, row2.getRowNum());
+ Iterator<Row> it = sheet.rowIterator();
+ assertTrue(it.hasNext());
+ assertSame(row1, it.next());
+ assertTrue(it.hasNext());
+ assertSame(row2, it.next());
+ assertEquals(1, sheet.getLastRowNum());
+
+ // Test row creation with non consecutive index
+ Row row101 = sheet.createRow(100);
+ assertNotNull(row101);
+ assertEquals(100, sheet.getLastRowNum());
+ assertEquals(3, sheet.getPhysicalNumberOfRows());
+
+ // Test overwriting an existing row
+ Row row2_ovrewritten = sheet.createRow(1);
+ Cell cell = row2_ovrewritten.createCell(0);
+ cell.setCellValue(100);
+ Iterator<Row> it2 = sheet.rowIterator();
+ assertTrue(it2.hasNext());
+ assertSame(row1, it2.next());
+ assertTrue(it2.hasNext());
+ Row row2_ovrewritten_ref = it2.next();
+ assertSame(row2_ovrewritten, row2_ovrewritten_ref);
+ assertEquals(100.0, row2_ovrewritten_ref.getCell(0).getNumericCellValue(), 0.0);
+ }
}
-
+
@Test(expected=IllegalArgumentException.class)
public void createRowBeforeFirstRow() throws IOException {
- final Workbook workbook = _testDataProvider.createWorkbook();
- final Sheet sh = workbook.createSheet();
- sh.createRow(0);
- try {
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ final Sheet sh = workbook.createSheet();
+ sh.createRow(0);
// Negative rows not allowed
sh.createRow(-1);
- } finally {
- workbook.close();
}
}
-
+
@Test(expected=IllegalArgumentException.class)
public void createRowAfterLastRow() throws IOException {
final SpreadsheetVersion version = _testDataProvider.getSpreadsheetVersion();
- final Workbook workbook = _testDataProvider.createWorkbook();
- final Sheet sh = workbook.createSheet();
- sh.createRow(version.getLastRowIndex());
- try {
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ final Sheet sh = workbook.createSheet();
+ sh.createRow(version.getLastRowIndex());
// Row number must be between 0 and last row
sh.createRow(version.getLastRowIndex() + 1);
- } finally {
- workbook.close();
}
}
@Test
public void removeRow() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet1 = workbook.createSheet();
- assertEquals(0, sheet1.getPhysicalNumberOfRows());
- assertEquals(-1, sheet1.getFirstRowNum());
- assertEquals(-1, sheet1.getLastRowNum());
-
- Row row0 = sheet1.createRow(0);
- assertEquals(1, sheet1.getPhysicalNumberOfRows());
- assertEquals(0, sheet1.getFirstRowNum());
- assertEquals(0, sheet1.getLastRowNum());
- sheet1.removeRow(row0);
- assertEquals(0, sheet1.getPhysicalNumberOfRows());
- assertEquals(-1, sheet1.getFirstRowNum());
- assertEquals(-1, sheet1.getLastRowNum());
-
- sheet1.createRow(1);
- Row row2 = sheet1.createRow(2);
- assertEquals(2, sheet1.getPhysicalNumberOfRows());
- assertEquals(1, sheet1.getFirstRowNum());
- assertEquals(2, sheet1.getLastRowNum());
-
- assertNotNull(sheet1.getRow(1));
- assertNotNull(sheet1.getRow(2));
- sheet1.removeRow(row2);
- assertNotNull(sheet1.getRow(1));
- assertNull(sheet1.getRow(2));
- assertEquals(1, sheet1.getPhysicalNumberOfRows());
- assertEquals(1, sheet1.getFirstRowNum());
- assertEquals(1, sheet1.getLastRowNum());
-
- Row row3 = sheet1.createRow(3);
- Sheet sheet2 = workbook.createSheet();
-
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Specified row does not belong to this sheet");
- sheet2.removeRow(row3);
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet1 = workbook.createSheet();
+ assertEquals(0, sheet1.getPhysicalNumberOfRows());
+ assertEquals(-1, sheet1.getFirstRowNum());
+ assertEquals(-1, sheet1.getLastRowNum());
+
+ Row row0 = sheet1.createRow(0);
+ assertEquals(1, sheet1.getPhysicalNumberOfRows());
+ assertEquals(0, sheet1.getFirstRowNum());
+ assertEquals(0, sheet1.getLastRowNum());
+ sheet1.removeRow(row0);
+ assertEquals(0, sheet1.getPhysicalNumberOfRows());
+ assertEquals(-1, sheet1.getFirstRowNum());
+ assertEquals(-1, sheet1.getLastRowNum());
+
+ sheet1.createRow(1);
+ Row row2 = sheet1.createRow(2);
+ assertEquals(2, sheet1.getPhysicalNumberOfRows());
+ assertEquals(1, sheet1.getFirstRowNum());
+ assertEquals(2, sheet1.getLastRowNum());
+
+ assertNotNull(sheet1.getRow(1));
+ assertNotNull(sheet1.getRow(2));
+ sheet1.removeRow(row2);
+ assertNotNull(sheet1.getRow(1));
+ assertNull(sheet1.getRow(2));
+ assertEquals(1, sheet1.getPhysicalNumberOfRows());
+ assertEquals(1, sheet1.getFirstRowNum());
+ assertEquals(1, sheet1.getLastRowNum());
+
+ Row row3 = sheet1.createRow(3);
+ Sheet sheet2 = workbook.createSheet();
+
+ IllegalArgumentException ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet2.removeRow(row3)
+ );
+ assertEquals("Specified row does not belong to this sheet", ex.getMessage());
+ }
}
@Test
public void cloneSheet() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- CreationHelper factory = workbook.getCreationHelper();
- Sheet sheet = workbook.createSheet("Test Clone");
- Row row = sheet.createRow(0);
- Cell cell = row.createCell(0);
- Cell cell2 = row.createCell(1);
- cell.setCellValue(factory.createRichTextString("clone_test"));
- cell2.setCellFormula("SIN(1)");
-
- Sheet clonedSheet = workbook.cloneSheet(0);
- Row clonedRow = clonedSheet.getRow(0);
-
- //Check for a good clone
- assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
-
- //Check that the cells are not somehow linked
- cell.setCellValue(factory.createRichTextString("Difference Check"));
- cell2.setCellFormula("cos(2)");
- if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) {
- fail("string cell not properly cloned");
- }
- if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) {
- fail("formula cell not properly cloned");
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ CreationHelper factory = workbook.getCreationHelper();
+ Sheet sheet = workbook.createSheet("Test Clone");
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ Cell cell2 = row.createCell(1);
+ cell.setCellValue(factory.createRichTextString("clone_test"));
+ cell2.setCellFormula("SIN(1)");
+
+ Sheet clonedSheet = workbook.cloneSheet(0);
+ Row clonedRow = clonedSheet.getRow(0);
+
+ //Check for a good clone
+ assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
+
+ //Check that the cells are not somehow linked
+ cell.setCellValue(factory.createRichTextString("Difference Check"));
+ cell2.setCellFormula("cos(2)");
+ if ("Difference Check".equals(clonedRow.getCell(0).getRichStringCellValue().getString())) {
+ fail("string cell not properly cloned");
+ }
+ if ("COS(2)".equals(clonedRow.getCell(1).getCellFormula())) {
+ fail("formula cell not properly cloned");
+ }
+ assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
+ assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)");
}
- assertEquals(clonedRow.getCell(0).getRichStringCellValue().getString(), "clone_test");
- assertEquals(clonedRow.getCell(1).getCellFormula(), "SIN(1)");
-
- workbook.close();
}
/** tests that the sheet name for multiple clones of the same sheet is unique
*/
@Test
public void cloneSheetMultipleTimes() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- CreationHelper factory = workbook.getCreationHelper();
- Sheet sheet = workbook.createSheet("Test Clone");
- Row row = sheet.createRow(0);
- Cell cell = row.createCell(0);
- cell.setCellValue(factory.createRichTextString("clone_test"));
- //Clone the sheet multiple times
- workbook.cloneSheet(0);
- workbook.cloneSheet(0);
-
- assertNotNull(workbook.getSheet("Test Clone"));
- assertNotNull(workbook.getSheet("Test Clone (2)"));
- assertEquals("Test Clone (3)", workbook.getSheetName(2));
- assertNotNull(workbook.getSheet("Test Clone (3)"));
-
- workbook.removeSheetAt(0);
- workbook.removeSheetAt(0);
- workbook.removeSheetAt(0);
- workbook.createSheet("abc ( 123)");
- workbook.cloneSheet(0);
- assertEquals("abc (124)", workbook.getSheetName(1));
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ CreationHelper factory = workbook.getCreationHelper();
+ Sheet sheet = workbook.createSheet("Test Clone");
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ cell.setCellValue(factory.createRichTextString("clone_test"));
+ //Clone the sheet multiple times
+ workbook.cloneSheet(0);
+ workbook.cloneSheet(0);
+
+ assertNotNull(workbook.getSheet("Test Clone"));
+ assertNotNull(workbook.getSheet("Test Clone (2)"));
+ assertEquals("Test Clone (3)", workbook.getSheetName(2));
+ assertNotNull(workbook.getSheet("Test Clone (3)"));
+
+ workbook.removeSheetAt(0);
+ workbook.removeSheetAt(0);
+ workbook.removeSheetAt(0);
+ workbook.createSheet("abc ( 123)");
+ workbook.cloneSheet(0);
+ assertEquals("abc (124)", workbook.getSheetName(1));
+ }
}
/**
*/
@Test
public void printSetupLandscapeNew() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheetL = wb1.createSheet("LandscapeS");
- Sheet sheetP = wb1.createSheet("LandscapeP");
-
- // Check two aspects of the print setup
- assertFalse(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(1, sheetP.getPrintSetup().getCopies());
-
- // Change one on each
- sheetL.getPrintSetup().setLandscape(true);
- sheetP.getPrintSetup().setCopies((short)3);
-
- // Check taken
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetP.getPrintSetup().getCopies());
-
- // Save and re-load, and check still there
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheetL = wb2.getSheet("LandscapeS");
- sheetP = wb2.getSheet("LandscapeP");
-
- assertTrue(sheetL.getPrintSetup().getLandscape());
- assertFalse(sheetP.getPrintSetup().getLandscape());
- assertEquals(1, sheetL.getPrintSetup().getCopies());
- assertEquals(3, sheetP.getPrintSetup().getCopies());
- wb2.close();
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheetL = wb1.createSheet("LandscapeS");
+ Sheet sheetP = wb1.createSheet("LandscapeP");
+
+ // Check two aspects of the print setup
+ assertFalse(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(1, sheetP.getPrintSetup().getCopies());
+
+ // Change one on each
+ sheetL.getPrintSetup().setLandscape(true);
+ sheetP.getPrintSetup().setCopies((short) 3);
+
+ // Check taken
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetP.getPrintSetup().getCopies());
+
+ // Save and re-load, and check still there
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ sheetL = wb2.getSheet("LandscapeS");
+ sheetP = wb2.getSheet("LandscapeP");
+
+ assertTrue(sheetL.getPrintSetup().getLandscape());
+ assertFalse(sheetP.getPrintSetup().getLandscape());
+ assertEquals(1, sheetL.getPrintSetup().getCopies());
+ assertEquals(3, sheetP.getPrintSetup().getCopies());
+ }
+ }
}
-
+
/**
* Disallow creating wholly or partially overlapping merged regions
* as this results in a corrupted workbook
*/
@Test
public void addOverlappingMergedRegions() throws IOException {
- final Workbook wb = _testDataProvider.createWorkbook();
- final Sheet sheet = wb.createSheet();
-
- final CellRangeAddress baseRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
- assertEquals(0, sheet.addMergedRegion(baseRegion));
-
- try {
+ try (final Workbook wb = _testDataProvider.createWorkbook()) {
+ final Sheet sheet = wb.createSheet();
+
+ final CellRangeAddress baseRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
+ assertEquals(0, sheet.addMergedRegion(baseRegion));
+
final CellRangeAddress duplicateRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
- sheet.addMergedRegion(duplicateRegion);
- fail("Should not be able to add a merged region (" + duplicateRegion.formatAsString() + ") " +
- "if sheet already contains the same merged region (" + baseRegion.formatAsString() + ")");
- } catch (final IllegalStateException e) {
- // expected here
- }
-
- try {
+ assertThrows(
+ "Should not be able to add a merged region (" + duplicateRegion.formatAsString() + ") " +
+ "if sheet already contains the same merged region (" + baseRegion.formatAsString() + ")",
+ IllegalStateException.class,
+ () -> sheet.addMergedRegion(duplicateRegion)
+ );
+
final CellRangeAddress partiallyOverlappingRegion = new CellRangeAddress(1, 2, 1, 2); //B2:C3
- sheet.addMergedRegion(partiallyOverlappingRegion);
- fail("Should not be able to add a merged region (" + partiallyOverlappingRegion.formatAsString() + ") " +
- "if it partially overlaps with an existing merged region (" + baseRegion.formatAsString() + ")");
- } catch (final IllegalStateException e) {
- // expected here
- }
-
- try {
+ assertThrows(
+ "Should not be able to add a merged region (" + partiallyOverlappingRegion.formatAsString() + ") " +
+ "if it partially overlaps with an existing merged region (" + baseRegion.formatAsString() + ")",
+ IllegalStateException.class,
+ () -> sheet.addMergedRegion(partiallyOverlappingRegion)
+ );
+
final CellRangeAddress subsetRegion = new CellRangeAddress(0, 1, 0, 0); //A1:A2
- sheet.addMergedRegion(subsetRegion);
- fail("Should not be able to add a merged region (" + subsetRegion.formatAsString() + ") " +
- "if it is a formal subset of an existing merged region (" + baseRegion.formatAsString() + ")");
- } catch (final IllegalStateException e) {
- // expected here
- }
-
- try {
+ assertThrows(
+ "Should not be able to add a merged region (" + subsetRegion.formatAsString() + ") " +
+ "if it is a formal subset of an existing merged region (" + baseRegion.formatAsString() + ")",
+ IllegalStateException.class,
+ () -> sheet.addMergedRegion(subsetRegion)
+ );
+
final CellRangeAddress supersetRegion = new CellRangeAddress(0, 2, 0, 2); //A1:C3
- sheet.addMergedRegion(supersetRegion);
- fail("Should not be able to add a merged region (" + supersetRegion.formatAsString() + ") " +
- "if it is a formal superset of an existing merged region (" + baseRegion.formatAsString() + ")");
- } catch (final IllegalStateException e) {
- // expected here
+ assertThrows(
+ "Should not be able to add a merged region (" + supersetRegion.formatAsString() + ") " +
+ "if it is a formal superset of an existing merged region (" + baseRegion.formatAsString() + ")",
+ IllegalStateException.class,
+ () -> sheet.addMergedRegion(supersetRegion)
+ );
+
+ final CellRangeAddress disjointRegion = new CellRangeAddress(10, 11, 10, 11);
+ assertEquals(1, sheet.addMergedRegion(disjointRegion));
}
-
- final CellRangeAddress disjointRegion = new CellRangeAddress(10, 11, 10, 11);
- assertEquals(1, sheet.addMergedRegion(disjointRegion));
-
- wb.close();
}
/*
*/
@Test
public void addMergedRegionWithSingleCellShouldFail() throws IOException {
- final Workbook wb = _testDataProvider.createWorkbook();
-
- final Sheet sheet = wb.createSheet();
- final CellRangeAddress region = CellRangeAddress.valueOf("A1:A1");
- try {
- sheet.addMergedRegion(region);
- fail("Should not be able to add a single-cell merged region (" + region.formatAsString() + ")");
- } catch (final IllegalArgumentException e) {
- // expected
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+
+ final Sheet sheet = wb.createSheet();
+ final CellRangeAddress region = CellRangeAddress.valueOf("A1:A1");
+ assertThrows(
+ "Should not be able to add a single-cell merged region (" + region.formatAsString() + ")",
+ IllegalArgumentException.class,
+ () -> sheet.addMergedRegion(region)
+ );
}
- wb.close();
}
/**
*/
@Test
public void addMerged() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- assertEquals(0, sheet.getNumMergedRegions());
- SpreadsheetVersion ssVersion = _testDataProvider.getSpreadsheetVersion();
-
- CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
- assertEquals(0, sheet.addMergedRegion(region));
- assertEquals(1, sheet.getNumMergedRegions());
-
- try {
- region = new CellRangeAddress(-1, -1, -1, -1);
- sheet.addMergedRegion(region);
- fail("Expected exception");
- } catch (IllegalArgumentException e){
- // TODO: assertEquals("Minimum row number is 0.", e.getMessage());
- }
- try {
- region = new CellRangeAddress(0, 0, 0, ssVersion.getLastColumnIndex() + 1);
- sheet.addMergedRegion(region);
- fail("Expected exception");
- } catch (IllegalArgumentException e){
- assertEquals("Maximum column number is " + ssVersion.getLastColumnIndex(), e.getMessage());
- }
- try {
- region = new CellRangeAddress(0, ssVersion.getLastRowIndex() + 1, 0, 1);
- sheet.addMergedRegion(region);
- fail("Expected exception");
- } catch (IllegalArgumentException e){
- assertEquals("Maximum row number is " + ssVersion.getLastRowIndex(), e.getMessage());
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ assertEquals(0, sheet.getNumMergedRegions());
+ SpreadsheetVersion ssVersion = _testDataProvider.getSpreadsheetVersion();
+
+ CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
+ assertEquals(0, sheet.addMergedRegion(region));
+ assertEquals(1, sheet.getNumMergedRegions());
+
+ IllegalArgumentException ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet.addMergedRegion(new CellRangeAddress(-1, -1, -1, -1))
+ );
+ assertEquals("Merged region : must contain 2 or more cells", ex.getMessage());
+
+ ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, ssVersion.getLastColumnIndex() + 1))
+ );
+ assertEquals("Maximum column number is " + ssVersion.getLastColumnIndex(), ex.getMessage());
+
+ ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet.addMergedRegion(new CellRangeAddress(0, ssVersion.getLastRowIndex() + 1, 0, 1))
+ );
+ assertEquals("Maximum row number is " + ssVersion.getLastRowIndex(), ex.getMessage());
+
+ assertEquals(1, sheet.getNumMergedRegions());
}
- assertEquals(1, sheet.getNumMergedRegions());
-
- wb.close();
}
/**
*/
@Test
public void removeMerged() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
- assertEquals(0, sheet.addMergedRegion(region));
- region = new CellRangeAddress(2, 3, 0, 1);
- assertEquals(1, sheet.addMergedRegion(region));
-
- sheet.removeMergedRegion(0);
-
- region = sheet.getMergedRegion(0);
- assertEquals("Left over region should be starting at row 2", 2, region.getFirstRow());
-
- sheet.removeMergedRegion(0);
-
- assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
-
- //an, add, remove, get(0) would null pointer
- assertEquals(0, sheet.addMergedRegion(region));
- assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
- sheet.removeMergedRegion(0);
- assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
- //add it again!
- region.setLastRow(4);
-
- assertEquals(0, sheet.addMergedRegion(region));
- assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
-
- //should exist now!
- assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
- region = sheet.getMergedRegion(0);
- assertEquals("the merged row to doesn't match the one we put in ", 4, region.getLastRow());
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
+ assertEquals(0, sheet.addMergedRegion(region));
+ region = new CellRangeAddress(2, 3, 0, 1);
+ assertEquals(1, sheet.addMergedRegion(region));
+
+ sheet.removeMergedRegion(0);
+
+ region = sheet.getMergedRegion(0);
+ assertEquals("Left over region should be starting at row 2", 2, region.getFirstRow());
+
+ sheet.removeMergedRegion(0);
+
+ assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
+
+ //an, add, remove, get(0) would null pointer
+ assertEquals(0, sheet.addMergedRegion(region));
+ assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
+ sheet.removeMergedRegion(0);
+ assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
+ //add it again!
+ region.setLastRow(4);
+
+ assertEquals(0, sheet.addMergedRegion(region));
+ assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
+
+ //should exist now!
+ assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
+ region = sheet.getMergedRegion(0);
+ assertEquals("the merged row to doesn't match the one we put in ", 4, region.getLastRow());
+ }
}
-
+
/**
* Remove multiple merged regions
*/
@Test
public void removeMergedRegions() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- Map<Integer, CellRangeAddress> mergedRegions = new HashMap<>();
- for (int r=0; r<10; r++) {
- CellRangeAddress region = new CellRangeAddress(r, r, 0, 1);
- mergedRegions.put(r, region);
- assertEquals(r, sheet.addMergedRegion(region));
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ Map<Integer, CellRangeAddress> mergedRegions = new HashMap<>();
+ for (int r = 0; r < 10; r++) {
+ CellRangeAddress region = new CellRangeAddress(r, r, 0, 1);
+ mergedRegions.put(r, region);
+ assertEquals(r, 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());
}
- 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 <T> void assertCollectionEquals(Collection<T> expected, Collection<T> actual) {
Set<T> e = new HashSet<>(expected);
Set<T> a = new HashSet<>(actual);
@Test
public void shiftMerged() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- CreationHelper factory = wb.getCreationHelper();
- Sheet sheet = wb.createSheet();
- Row row = sheet.createRow(0);
- Cell cell = row.createCell(0);
- cell.setCellValue(factory.createRichTextString("first row, first cell"));
-
- row = sheet.createRow(1);
- cell = row.createCell(1);
- cell.setCellValue(factory.createRichTextString("second row, second cell"));
-
- CellRangeAddress region = CellRangeAddress.valueOf("A2:B2");
- assertEquals(0, sheet.addMergedRegion(region));
-
- sheet.shiftRows(1, 1, 1);
-
- region = sheet.getMergedRegion(0);
-
- CellRangeAddress expectedRegion = CellRangeAddress.valueOf("A3:B3");
- assertEquals("Merged region should shift down a row", expectedRegion, region);
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ CreationHelper factory = wb.getCreationHelper();
+ Sheet sheet = wb.createSheet();
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ cell.setCellValue(factory.createRichTextString("first row, first cell"));
+
+ row = sheet.createRow(1);
+ cell = row.createCell(1);
+ cell.setCellValue(factory.createRichTextString("second row, second cell"));
+
+ CellRangeAddress region = CellRangeAddress.valueOf("A2:B2");
+ assertEquals(0, sheet.addMergedRegion(region));
+
+ sheet.shiftRows(1, 1, 1);
+
+ region = sheet.getMergedRegion(0);
+
+ CellRangeAddress expectedRegion = CellRangeAddress.valueOf("A3:B3");
+ assertEquals("Merged region should shift down a row", expectedRegion, region);
+ }
}
/**
*/
@Test
public void addMergedRegionUnsafe() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sh = wb.createSheet();
- CellRangeAddress region1 = CellRangeAddress.valueOf("A1:B2");
- CellRangeAddress region2 = CellRangeAddress.valueOf("B2:C3");
- CellRangeAddress region3 = CellRangeAddress.valueOf("C3:D4");
- CellRangeAddress region4 = CellRangeAddress.valueOf("J10:K11");
- assumeTrue(region1.intersects(region2));
- assumeTrue(region2.intersects(region3));
-
- assertEquals(0, sh.addMergedRegionUnsafe(region1));
- assertTrue(sh.getMergedRegions().contains(region1));
-
- // adding a duplicate or overlapping merged region should not
- // raise an exception with the unsafe version of addMergedRegion.
-
- assertEquals(1, sh.addMergedRegionUnsafe(region2));
-
- // the safe version of addMergedRegion should throw when trying to add a merged region that overlaps an existing region
- assertTrue(sh.getMergedRegions().contains(region2));
- try {
- sh.addMergedRegion(region3);
- fail("Expected IllegalStateException. region3 overlaps already added merged region2.");
- } catch (final IllegalStateException e) {
- // expected
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sh = wb.createSheet();
+ CellRangeAddress region1 = CellRangeAddress.valueOf("A1:B2");
+ CellRangeAddress region2 = CellRangeAddress.valueOf("B2:C3");
+ CellRangeAddress region3 = CellRangeAddress.valueOf("C3:D4");
+ CellRangeAddress region4 = CellRangeAddress.valueOf("J10:K11");
+ assumeTrue(region1.intersects(region2));
+ assumeTrue(region2.intersects(region3));
+
+ assertEquals(0, sh.addMergedRegionUnsafe(region1));
+ assertTrue(sh.getMergedRegions().contains(region1));
+
+ // adding a duplicate or overlapping merged region should not
+ // raise an exception with the unsafe version of addMergedRegion.
+
+ assertEquals(1, sh.addMergedRegionUnsafe(region2));
+
+ // the safe version of addMergedRegion should throw when trying to add a merged region that overlaps an existing region
+ assertTrue(sh.getMergedRegions().contains(region2));
+ assertThrows(
+ "region3 overlaps already added merged region2.",
+ IllegalStateException.class,
+ () -> sh.addMergedRegion(region3)
+ );
assertFalse(sh.getMergedRegions().contains(region3));
- }
- // addMergedRegion should not re-validate previously-added merged regions
- assertEquals(2, sh.addMergedRegion(region4));
-
- // validation methods should detect a problem with previously added merged regions (runs in O(n^2) time)
- try {
- sh.validateMergedRegions();
- fail("Expected validation to fail. Sheet contains merged regions A1:B2 and B2:C3, which overlap at B2.");
- } catch (final IllegalStateException e) {
- // expected
- }
- wb.close();
+ // addMergedRegion should not re-validate previously-added merged regions
+ assertEquals(2, sh.addMergedRegion(region4));
+
+ // validation methods should detect a problem with previously added merged regions (runs in O(n^2) time)
+ assertThrows(
+ "Sheet contains merged regions A1:B2 and B2:C3, which overlap at B2.",
+ IllegalStateException.class,
+ sh::validateMergedRegions
+ );
+ }
}
/**
*/
@Test
public void displayOptions() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
-
- assertTrue(sheet.isDisplayGridlines());
- assertTrue(sheet.isDisplayRowColHeadings());
- assertFalse(sheet.isDisplayFormulas());
- assertTrue(sheet.isDisplayZeros());
-
- sheet.setDisplayGridlines(false);
- sheet.setDisplayRowColHeadings(false);
- sheet.setDisplayFormulas(true);
- sheet.setDisplayZeros(false);
-
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheetAt(0);
-
- assertFalse(sheet.isDisplayGridlines());
- assertFalse(sheet.isDisplayRowColHeadings());
- assertTrue(sheet.isDisplayFormulas());
- assertFalse(sheet.isDisplayZeros());
-
- wb2.close();
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb1.createSheet();
+
+ assertTrue(sheet.isDisplayGridlines());
+ assertTrue(sheet.isDisplayRowColHeadings());
+ assertFalse(sheet.isDisplayFormulas());
+ assertTrue(sheet.isDisplayZeros());
+
+ sheet.setDisplayGridlines(false);
+ sheet.setDisplayRowColHeadings(false);
+ sheet.setDisplayFormulas(true);
+ sheet.setDisplayZeros(false);
+
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ sheet = wb2.getSheetAt(0);
+
+ assertFalse(sheet.isDisplayGridlines());
+ assertFalse(sheet.isDisplayRowColHeadings());
+ assertTrue(sheet.isDisplayFormulas());
+ assertFalse(sheet.isDisplayZeros());
+ }
+ }
}
@Test
public void columnWidth() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
-
- //default column width measured in characters
- sheet.setDefaultColumnWidth(10);
- assertEquals(10, sheet.getDefaultColumnWidth());
- //columns A-C have default width
- assertEquals(256*10, sheet.getColumnWidth(0));
- assertEquals(256*10, sheet.getColumnWidth(1));
- assertEquals(256*10, sheet.getColumnWidth(2));
-
- //set custom width for D-F
- for (char i = 'D'; i <= 'F'; i++) {
- //Sheet#setColumnWidth accepts the width in units of 1/256th of a character width
- int w = 256*12;
- sheet.setColumnWidth(i, w);
- assertEquals(w, sheet.getColumnWidth(i));
- }
- //reset the default column width, columns A-C change, D-F still have custom width
- sheet.setDefaultColumnWidth(20);
- assertEquals(20, sheet.getDefaultColumnWidth());
- assertEquals(256*20, sheet.getColumnWidth(0));
- assertEquals(256*20, sheet.getColumnWidth(1));
- assertEquals(256*20, sheet.getColumnWidth(2));
- for (char i = 'D'; i <= 'F'; i++) {
- int w = 256*12;
- assertEquals(w, sheet.getColumnWidth(i));
- }
-
- // check for 16-bit signed/unsigned error:
- sheet.setColumnWidth(10, 40000);
- assertEquals(40000, sheet.getColumnWidth(10));
-
- //The maximum column width for an individual cell is 255 characters
- try {
- sheet.setColumnWidth(9, 256*256);
- fail("expected exception");
- } catch(IllegalArgumentException e){
- assertEquals("The maximum column width for an individual cell is 255 characters.", e.getMessage());
- }
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet1 = wb1.createSheet();
+
+ //default column width measured in characters
+ sheet1.setDefaultColumnWidth(10);
+ assertEquals(10, sheet1.getDefaultColumnWidth());
+ //columns A-C have default width
+ assertEquals(256 * 10, sheet1.getColumnWidth(0));
+ assertEquals(256 * 10, sheet1.getColumnWidth(1));
+ assertEquals(256 * 10, sheet1.getColumnWidth(2));
+
+ //set custom width for D-F
+ for (char i = 'D'; i <= 'F'; i++) {
+ //Sheet#setColumnWidth accepts the width in units of 1/256th of a character width
+ int w = 256 * 12;
+ sheet1.setColumnWidth(i, w);
+ assertEquals(w, sheet1.getColumnWidth(i));
+ }
+ //reset the default column width, columns A-C change, D-F still have custom width
+ sheet1.setDefaultColumnWidth(20);
+ assertEquals(20, sheet1.getDefaultColumnWidth());
+ assertEquals(256 * 20, sheet1.getColumnWidth(0));
+ assertEquals(256 * 20, sheet1.getColumnWidth(1));
+ assertEquals(256 * 20, sheet1.getColumnWidth(2));
+ for (char i = 'D'; i <= 'F'; i++) {
+ int w = 256 * 12;
+ assertEquals(w, sheet1.getColumnWidth(i));
+ }
- //serialize and read again
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
-
- sheet = wb2.getSheetAt(0);
- assertEquals(20, sheet.getDefaultColumnWidth());
- //columns A-C have default width
- assertEquals(256*20, sheet.getColumnWidth(0));
- assertEquals(256*20, sheet.getColumnWidth(1));
- assertEquals(256*20, sheet.getColumnWidth(2));
- //columns D-F have custom width
- for (char i = 'D'; i <= 'F'; i++) {
- short w = (256*12);
- assertEquals(w, sheet.getColumnWidth(i));
+ // check for 16-bit signed/unsigned error:
+ sheet1.setColumnWidth(10, 40000);
+ assertEquals(40000, sheet1.getColumnWidth(10));
+
+ //The maximum column width for an individual cell is 255 characters
+ IllegalArgumentException ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet1.setColumnWidth(9, 256 * 256)
+ );
+ assertEquals("The maximum column width for an individual cell is 255 characters.", ex.getMessage());
+
+ //serialize and read again
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ Sheet sheet2 = wb2.getSheetAt(0);
+ assertEquals(20, sheet2.getDefaultColumnWidth());
+ //columns A-C have default width
+ assertEquals(256 * 20, sheet2.getColumnWidth(0));
+ assertEquals(256 * 20, sheet2.getColumnWidth(1));
+ assertEquals(256 * 20, sheet2.getColumnWidth(2));
+ //columns D-F have custom width
+ for (char i = 'D'; i <= 'F'; i++) {
+ short w = (256 * 12);
+ assertEquals(w, sheet2.getColumnWidth(i));
+ }
+ assertEquals(40000, sheet2.getColumnWidth(10));
+ }
}
- assertEquals(40000, sheet.getColumnWidth(10));
-
- wb2.close();
}
-
+
@Test
public void defaultRowHeight() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- sheet.setDefaultRowHeightInPoints(15);
- assertEquals((short) 300, sheet.getDefaultRowHeight());
- assertEquals(15.0F, sheet.getDefaultRowHeightInPoints(), 0F);
-
- Row row = sheet.createRow(1);
- // new row inherits default height from the sheet
- assertEquals(sheet.getDefaultRowHeight(), row.getHeight());
-
- // Set a new default row height in twips and test getting the value in points
- sheet.setDefaultRowHeight((short) 360);
- assertEquals(18.0f, sheet.getDefaultRowHeightInPoints(), 0F);
- assertEquals((short) 360, sheet.getDefaultRowHeight());
-
- // Test that defaultRowHeight is a truncated short: E.G. 360inPoints -> 18; 361inPoints -> 18
- sheet.setDefaultRowHeight((short) 361);
- assertEquals((float)361/20, sheet.getDefaultRowHeightInPoints(), 0F);
- assertEquals((short) 361, sheet.getDefaultRowHeight());
-
- // Set a new default row height in points and test getting the value in twips
- sheet.setDefaultRowHeightInPoints(17.5f);
- assertEquals(17.5f, sheet.getDefaultRowHeightInPoints(), 0F);
- assertEquals((short)(17.5f*20), sheet.getDefaultRowHeight());
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ sheet.setDefaultRowHeightInPoints(15);
+ assertEquals((short) 300, sheet.getDefaultRowHeight());
+ assertEquals(15.0F, sheet.getDefaultRowHeightInPoints(), 0F);
+
+ Row row = sheet.createRow(1);
+ // new row inherits default height from the sheet
+ assertEquals(sheet.getDefaultRowHeight(), row.getHeight());
+
+ // Set a new default row height in twips and test getting the value in points
+ sheet.setDefaultRowHeight((short) 360);
+ assertEquals(18.0f, sheet.getDefaultRowHeightInPoints(), 0F);
+ assertEquals((short) 360, sheet.getDefaultRowHeight());
+
+ // Test that defaultRowHeight is a truncated short: E.G. 360inPoints -> 18; 361inPoints -> 18
+ sheet.setDefaultRowHeight((short) 361);
+ assertEquals((float) 361 / 20, sheet.getDefaultRowHeightInPoints(), 0F);
+ assertEquals((short) 361, sheet.getDefaultRowHeight());
+
+ // Set a new default row height in points and test getting the value in twips
+ sheet.setDefaultRowHeightInPoints(17.5f);
+ assertEquals(17.5f, sheet.getDefaultRowHeightInPoints(), 0F);
+ assertEquals((short) (17.5f * 20), sheet.getDefaultRowHeight());
+ }
}
/** cell with formula becomes null on cloning a sheet*/
@Test
public void bug35084() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet s = wb.createSheet("Sheet1");
- Row r = s.createRow(0);
- r.createCell(0).setCellValue(1);
- r.createCell(1).setCellFormula("A1*2");
- Sheet s1 = wb.cloneSheet(0);
- r = s1.getRow(0);
- assertEquals("double", r.getCell(0).getNumericCellValue(), 1, 0); // sanity check
- assertNotNull(r.getCell(1));
- assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2");
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet s = wb.createSheet("Sheet1");
+ Row r = s.createRow(0);
+ r.createCell(0).setCellValue(1);
+ r.createCell(1).setCellFormula("A1*2");
+ Sheet s1 = wb.cloneSheet(0);
+ r = s1.getRow(0);
+ assertEquals("double", r.getCell(0).getNumericCellValue(), 1, 0); // sanity check
+ assertNotNull(r.getCell(1));
+ assertEquals("formula", r.getCell(1).getCellFormula(), "A1*2");
+ }
}
/** test that new default column styles get applied */
@Test
public void defaultColumnStyle() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- CellStyle style = wb.createCellStyle();
- Sheet sheet = wb.createSheet();
- sheet.setDefaultColumnStyle(0, style);
- assertNotNull(sheet.getColumnStyle(0));
- assertEquals(style.getIndex(), sheet.getColumnStyle(0).getIndex());
-
- Row row = sheet.createRow(0);
- Cell cell = row.createCell(0);
- CellStyle style2 = cell.getCellStyle();
- assertNotNull(style2);
- assertEquals("style should match", style.getIndex(), style2.getIndex());
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ CellStyle style = wb.createCellStyle();
+ Sheet sheet = wb.createSheet();
+ sheet.setDefaultColumnStyle(0, style);
+ assertNotNull(sheet.getColumnStyle(0));
+ assertEquals(style.getIndex(), sheet.getColumnStyle(0).getIndex());
+
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ CellStyle style2 = cell.getCellStyle();
+ assertNotNull(style2);
+ assertEquals("style should match", style.getIndex(), style2.getIndex());
+ }
}
@Test
public void outlineProperties() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
-
- Sheet sheet = wb1.createSheet();
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb1.createSheet();
- //TODO defaults are different in HSSF and XSSF
- //assertTrue(sheet.getRowSumsBelow());
- //assertTrue(sheet.getRowSumsRight());
+ //TODO defaults are different in HSSF and XSSF
+ //assertTrue(sheet.getRowSumsBelow());
+ //assertTrue(sheet.getRowSumsRight());
- sheet.setRowSumsBelow(false);
- sheet.setRowSumsRight(false);
+ sheet.setRowSumsBelow(false);
+ sheet.setRowSumsRight(false);
- assertFalse(sheet.getRowSumsBelow());
- assertFalse(sheet.getRowSumsRight());
+ assertFalse(sheet.getRowSumsBelow());
+ assertFalse(sheet.getRowSumsRight());
- sheet.setRowSumsBelow(true);
- sheet.setRowSumsRight(true);
+ sheet.setRowSumsBelow(true);
+ sheet.setRowSumsRight(true);
- assertTrue(sheet.getRowSumsBelow());
- assertTrue(sheet.getRowSumsRight());
+ assertTrue(sheet.getRowSumsBelow());
+ assertTrue(sheet.getRowSumsRight());
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet = wb2.getSheetAt(0);
- assertTrue(sheet.getRowSumsBelow());
- assertTrue(sheet.getRowSumsRight());
- wb2.close();
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ sheet = wb2.getSheetAt(0);
+ assertTrue(sheet.getRowSumsBelow());
+ assertTrue(sheet.getRowSumsRight());
+ }
+ }
}
/**
*/
@Test
public void sheetProperties() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- assertFalse(sheet.getHorizontallyCenter());
- sheet.setHorizontallyCenter(true);
- assertTrue(sheet.getHorizontallyCenter());
- sheet.setHorizontallyCenter(false);
- assertFalse(sheet.getHorizontallyCenter());
-
- assertFalse(sheet.getVerticallyCenter());
- sheet.setVerticallyCenter(true);
- assertTrue(sheet.getVerticallyCenter());
- sheet.setVerticallyCenter(false);
- assertFalse(sheet.getVerticallyCenter());
-
- assertFalse(sheet.isPrintGridlines());
- sheet.setPrintGridlines(true);
- assertTrue(sheet.isPrintGridlines());
-
- assertFalse(sheet.isPrintRowAndColumnHeadings());
- sheet.setPrintRowAndColumnHeadings(true);
- assertTrue(sheet.isPrintRowAndColumnHeadings());
-
- assertFalse(sheet.isDisplayFormulas());
- sheet.setDisplayFormulas(true);
- assertTrue(sheet.isDisplayFormulas());
-
- assertTrue(sheet.isDisplayGridlines());
- sheet.setDisplayGridlines(false);
- assertFalse(sheet.isDisplayGridlines());
-
- //TODO: default "guts" is different in HSSF and XSSF
- //assertTrue(sheet.getDisplayGuts());
- sheet.setDisplayGuts(false);
- assertFalse(sheet.getDisplayGuts());
-
- assertTrue(sheet.isDisplayRowColHeadings());
- sheet.setDisplayRowColHeadings(false);
- assertFalse(sheet.isDisplayRowColHeadings());
-
- //TODO: default "autobreaks" is different in HSSF and XSSF
- //assertTrue(sheet.getAutobreaks());
- sheet.setAutobreaks(false);
- assertFalse(sheet.getAutobreaks());
-
- assertFalse(sheet.getScenarioProtect());
-
- //TODO: default "fit-to-page" is different in HSSF and XSSF
- //assertFalse(sheet.getFitToPage());
- sheet.setFitToPage(true);
- assertTrue(sheet.getFitToPage());
- sheet.setFitToPage(false);
- assertFalse(sheet.getFitToPage());
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ assertFalse(sheet.getHorizontallyCenter());
+ sheet.setHorizontallyCenter(true);
+ assertTrue(sheet.getHorizontallyCenter());
+ sheet.setHorizontallyCenter(false);
+ assertFalse(sheet.getHorizontallyCenter());
+
+ assertFalse(sheet.getVerticallyCenter());
+ sheet.setVerticallyCenter(true);
+ assertTrue(sheet.getVerticallyCenter());
+ sheet.setVerticallyCenter(false);
+ assertFalse(sheet.getVerticallyCenter());
+
+ assertFalse(sheet.isPrintGridlines());
+ sheet.setPrintGridlines(true);
+ assertTrue(sheet.isPrintGridlines());
+
+ assertFalse(sheet.isPrintRowAndColumnHeadings());
+ sheet.setPrintRowAndColumnHeadings(true);
+ assertTrue(sheet.isPrintRowAndColumnHeadings());
+
+ assertFalse(sheet.isDisplayFormulas());
+ sheet.setDisplayFormulas(true);
+ assertTrue(sheet.isDisplayFormulas());
+
+ assertTrue(sheet.isDisplayGridlines());
+ sheet.setDisplayGridlines(false);
+ assertFalse(sheet.isDisplayGridlines());
+
+ //TODO: default "guts" is different in HSSF and XSSF
+ //assertTrue(sheet.getDisplayGuts());
+ sheet.setDisplayGuts(false);
+ assertFalse(sheet.getDisplayGuts());
+
+ assertTrue(sheet.isDisplayRowColHeadings());
+ sheet.setDisplayRowColHeadings(false);
+ assertFalse(sheet.isDisplayRowColHeadings());
+
+ //TODO: default "autobreaks" is different in HSSF and XSSF
+ //assertTrue(sheet.getAutobreaks());
+ sheet.setAutobreaks(false);
+ assertFalse(sheet.getAutobreaks());
+
+ assertFalse(sheet.getScenarioProtect());
+
+ //TODO: default "fit-to-page" is different in HSSF and XSSF
+ //assertFalse(sheet.getFitToPage());
+ sheet.setFitToPage(true);
+ assertTrue(sheet.getFitToPage());
+ sheet.setFitToPage(false);
+ assertFalse(sheet.getFitToPage());
+ }
}
public void baseTestGetSetMargin(double[] defaultMargins) throws IOException {
//double marginHeader = defaultMargins[4];
//double marginFooter = defaultMargins[5];
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet("Sheet 1");
- assertEquals(marginLeft, sheet.getMargin(Sheet.LeftMargin), 0.0);
- sheet.setMargin(Sheet.LeftMargin, 10.0);
- //left margin is custom, all others are default
- assertEquals(10.0, sheet.getMargin(Sheet.LeftMargin), 0.0);
- assertEquals(marginRight, sheet.getMargin(Sheet.RightMargin), 0.0);
- assertEquals(marginTop, sheet.getMargin(Sheet.TopMargin), 0.0);
- assertEquals(marginBottom, sheet.getMargin(Sheet.BottomMargin), 0.0);
- sheet.setMargin(Sheet.RightMargin, 11.0);
- assertEquals(11.0, sheet.getMargin(Sheet.RightMargin), 0.0);
- sheet.setMargin(Sheet.TopMargin, 12.0);
- assertEquals(12.0, sheet.getMargin(Sheet.TopMargin), 0.0);
- sheet.setMargin(Sheet.BottomMargin, 13.0);
- assertEquals(13.0, sheet.getMargin(Sheet.BottomMargin), 0.0);
-
- sheet.setMargin(Sheet.FooterMargin, 5.6);
- assertEquals(5.6, sheet.getMargin(Sheet.FooterMargin), 0.0);
- sheet.setMargin(Sheet.HeaderMargin, 11.5);
- assertEquals(11.5, sheet.getMargin(Sheet.HeaderMargin), 0.0);
-
- // incorrect margin constant
- thrown.expect(IllegalArgumentException.class);
- thrown.expectMessage("Unknown margin constant: 65");
- sheet.setMargin((short) 65, 15);
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet("Sheet 1");
+ assertEquals(marginLeft, sheet.getMargin(Sheet.LeftMargin), 0.0);
+ sheet.setMargin(Sheet.LeftMargin, 10.0);
+ //left margin is custom, all others are default
+ assertEquals(10.0, sheet.getMargin(Sheet.LeftMargin), 0.0);
+ assertEquals(marginRight, sheet.getMargin(Sheet.RightMargin), 0.0);
+ assertEquals(marginTop, sheet.getMargin(Sheet.TopMargin), 0.0);
+ assertEquals(marginBottom, sheet.getMargin(Sheet.BottomMargin), 0.0);
+ sheet.setMargin(Sheet.RightMargin, 11.0);
+ assertEquals(11.0, sheet.getMargin(Sheet.RightMargin), 0.0);
+ sheet.setMargin(Sheet.TopMargin, 12.0);
+ assertEquals(12.0, sheet.getMargin(Sheet.TopMargin), 0.0);
+ sheet.setMargin(Sheet.BottomMargin, 13.0);
+ assertEquals(13.0, sheet.getMargin(Sheet.BottomMargin), 0.0);
+
+ sheet.setMargin(Sheet.FooterMargin, 5.6);
+ assertEquals(5.6, sheet.getMargin(Sheet.FooterMargin), 0.0);
+ sheet.setMargin(Sheet.HeaderMargin, 11.5);
+ assertEquals(11.5, sheet.getMargin(Sheet.HeaderMargin), 0.0);
+
+ // incorrect margin constant
+ IllegalArgumentException ex = assertThrows(
+ IllegalArgumentException.class,
+ () -> sheet.setMargin((short) 65, 15)
+ );
+ assertEquals("Unknown margin constant: 65", ex.getMessage());
+ }
}
@Test
public void rowBreaks() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- //Sheet#getRowBreaks() returns an empty array if no row breaks are defined
- assertNotNull(sheet.getRowBreaks());
- assertEquals(0, sheet.getRowBreaks().length);
-
- sheet.setRowBreak(1);
- assertEquals(1, sheet.getRowBreaks().length);
- sheet.setRowBreak(15);
- assertEquals(2, sheet.getRowBreaks().length);
- assertEquals(1, sheet.getRowBreaks()[0]);
- assertEquals(15, sheet.getRowBreaks()[1]);
- sheet.setRowBreak(1);
- assertEquals(2, sheet.getRowBreaks().length);
- assertTrue(sheet.isRowBroken(1));
- assertTrue(sheet.isRowBroken(15));
-
- //now remove the created breaks
- sheet.removeRowBreak(1);
- assertEquals(1, sheet.getRowBreaks().length);
- sheet.removeRowBreak(15);
- assertEquals(0, sheet.getRowBreaks().length);
-
- assertFalse(sheet.isRowBroken(1));
- assertFalse(sheet.isRowBroken(15));
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ //Sheet#getRowBreaks() returns an empty array if no row breaks are defined
+ assertNotNull(sheet.getRowBreaks());
+ assertEquals(0, sheet.getRowBreaks().length);
+
+ sheet.setRowBreak(1);
+ assertEquals(1, sheet.getRowBreaks().length);
+ sheet.setRowBreak(15);
+ assertEquals(2, sheet.getRowBreaks().length);
+ assertEquals(1, sheet.getRowBreaks()[0]);
+ assertEquals(15, sheet.getRowBreaks()[1]);
+ sheet.setRowBreak(1);
+ assertEquals(2, sheet.getRowBreaks().length);
+ assertTrue(sheet.isRowBroken(1));
+ assertTrue(sheet.isRowBroken(15));
+
+ //now remove the created breaks
+ sheet.removeRowBreak(1);
+ assertEquals(1, sheet.getRowBreaks().length);
+ sheet.removeRowBreak(15);
+ assertEquals(0, sheet.getRowBreaks().length);
+
+ assertFalse(sheet.isRowBroken(1));
+ assertFalse(sheet.isRowBroken(15));
+ }
}
@Test
public void columnBreaks() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- assertNotNull(sheet.getColumnBreaks());
- assertEquals(0, sheet.getColumnBreaks().length);
-
- assertFalse(sheet.isColumnBroken(0));
-
- sheet.setColumnBreak(11);
- assertNotNull(sheet.getColumnBreaks());
- assertEquals(11, sheet.getColumnBreaks()[0]);
- sheet.setColumnBreak(12);
- assertEquals(2, sheet.getColumnBreaks().length);
- assertTrue(sheet.isColumnBroken(11));
- assertTrue(sheet.isColumnBroken(12));
-
- sheet.removeColumnBreak((short) 11);
- assertEquals(1, sheet.getColumnBreaks().length);
- sheet.removeColumnBreak((short) 15); //remove non-existing
- assertEquals(1, sheet.getColumnBreaks().length);
- sheet.removeColumnBreak((short) 12);
- assertEquals(0, sheet.getColumnBreaks().length);
-
- assertFalse(sheet.isColumnBroken(11));
- assertFalse(sheet.isColumnBroken(12));
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ assertNotNull(sheet.getColumnBreaks());
+ assertEquals(0, sheet.getColumnBreaks().length);
+
+ assertFalse(sheet.isColumnBroken(0));
+
+ sheet.setColumnBreak(11);
+ assertNotNull(sheet.getColumnBreaks());
+ assertEquals(11, sheet.getColumnBreaks()[0]);
+ sheet.setColumnBreak(12);
+ assertEquals(2, sheet.getColumnBreaks().length);
+ assertTrue(sheet.isColumnBroken(11));
+ assertTrue(sheet.isColumnBroken(12));
+
+ sheet.removeColumnBreak((short) 11);
+ assertEquals(1, sheet.getColumnBreaks().length);
+ sheet.removeColumnBreak((short) 15); //remove non-existing
+ assertEquals(1, sheet.getColumnBreaks().length);
+ sheet.removeColumnBreak((short) 12);
+ assertEquals(0, sheet.getColumnBreaks().length);
+
+ assertFalse(sheet.isColumnBroken(11));
+ assertFalse(sheet.isColumnBroken(12));
+ }
}
@Test
public void getFirstLastRowNum() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet("Sheet 1");
- sheet.createRow(9);
- sheet.createRow(0);
- sheet.createRow(1);
- assertEquals(0, sheet.getFirstRowNum());
- assertEquals(9, sheet.getLastRowNum());
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet("Sheet 1");
+ sheet.createRow(9);
+ sheet.createRow(0);
+ sheet.createRow(1);
+ assertEquals(0, sheet.getFirstRowNum());
+ assertEquals(9, sheet.getLastRowNum());
+ }
}
@Test
public void getFooter() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet("Sheet 1");
- assertNotNull(sheet.getFooter());
- sheet.getFooter().setCenter("test center footer");
- assertEquals("test center footer", sheet.getFooter().getCenter());
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet("Sheet 1");
+ assertNotNull(sheet.getFooter());
+ sheet.getFooter().setCenter("test center footer");
+ assertEquals("test center footer", sheet.getFooter().getCenter());
+ }
}
@Test
public void getSetColumnHidden() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet("Sheet 1");
- sheet.setColumnHidden(2, true);
- assertTrue(sheet.isColumnHidden(2));
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet("Sheet 1");
+ sheet.setColumnHidden(2, true);
+ assertTrue(sheet.isColumnHidden(2));
+ }
}
@Test
public void protectSheet() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- assertFalse(sheet.getProtect());
- sheet.protectSheet("Test");
- assertTrue(sheet.getProtect());
- sheet.protectSheet(null);
- assertFalse(sheet.getProtect());
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ assertFalse(sheet.getProtect());
+ sheet.protectSheet("Test");
+ assertTrue(sheet.getProtect());
+ sheet.protectSheet(null);
+ assertFalse(sheet.getProtect());
+ }
}
@Test
public void createFreezePane() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- // create a workbook
- Sheet sheet = wb.createSheet();
- assertNull(sheet.getPaneInformation());
- sheet.createFreezePane(0, 0);
- // still null
- assertNull(sheet.getPaneInformation());
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ // create a workbook
+ Sheet sheet = wb.createSheet();
+ assertNull(sheet.getPaneInformation());
+ sheet.createFreezePane(0, 0);
+ // still null
+ assertNull(sheet.getPaneInformation());
- sheet.createFreezePane(2, 3);
+ sheet.createFreezePane(2, 3);
- PaneInformation info = sheet.getPaneInformation();
+ PaneInformation info = sheet.getPaneInformation();
- assertEquals(PaneInformation.PANE_LOWER_RIGHT, info.getActivePane());
- assertEquals(3, info.getHorizontalSplitPosition());
- assertEquals(3, info.getHorizontalSplitTopRow());
- assertEquals(2, info.getVerticalSplitLeftColumn());
- assertEquals(2, info.getVerticalSplitPosition());
+ assertEquals(PaneInformation.PANE_LOWER_RIGHT, info.getActivePane());
+ assertEquals(3, info.getHorizontalSplitPosition());
+ assertEquals(3, info.getHorizontalSplitTopRow());
+ assertEquals(2, info.getVerticalSplitLeftColumn());
+ assertEquals(2, info.getVerticalSplitPosition());
- sheet.createFreezePane(0, 0);
- // If both colSplit and rowSplit are zero then the existing freeze pane is removed
- assertNull(sheet.getPaneInformation());
+ sheet.createFreezePane(0, 0);
+ // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+ assertNull(sheet.getPaneInformation());
- sheet.createFreezePane(0, 3);
+ sheet.createFreezePane(0, 3);
- info = sheet.getPaneInformation();
+ info = sheet.getPaneInformation();
- assertEquals(PaneInformation.PANE_LOWER_LEFT, info.getActivePane());
- assertEquals(3, info.getHorizontalSplitPosition());
- assertEquals(3, info.getHorizontalSplitTopRow());
- assertEquals(0, info.getVerticalSplitLeftColumn());
- assertEquals(0, info.getVerticalSplitPosition());
+ assertEquals(PaneInformation.PANE_LOWER_LEFT, info.getActivePane());
+ assertEquals(3, info.getHorizontalSplitPosition());
+ assertEquals(3, info.getHorizontalSplitTopRow());
+ assertEquals(0, info.getVerticalSplitLeftColumn());
+ assertEquals(0, info.getVerticalSplitPosition());
- sheet.createFreezePane(3, 0);
+ sheet.createFreezePane(3, 0);
- info = sheet.getPaneInformation();
+ info = sheet.getPaneInformation();
- assertEquals(PaneInformation.PANE_UPPER_RIGHT, info.getActivePane());
- assertEquals(0, info.getHorizontalSplitPosition());
- assertEquals(0, info.getHorizontalSplitTopRow());
- assertEquals(3, info.getVerticalSplitLeftColumn());
- assertEquals(3, info.getVerticalSplitPosition());
+ assertEquals(PaneInformation.PANE_UPPER_RIGHT, info.getActivePane());
+ assertEquals(0, info.getHorizontalSplitPosition());
+ assertEquals(0, info.getHorizontalSplitTopRow());
+ assertEquals(3, info.getVerticalSplitLeftColumn());
+ assertEquals(3, info.getVerticalSplitPosition());
- sheet.createFreezePane(0, 0);
- // If both colSplit and rowSplit are zero then the existing freeze pane is removed
- assertNull(sheet.getPaneInformation());
-
- wb.close();
+ sheet.createFreezePane(0, 0);
+ // If both colSplit and rowSplit are zero then the existing freeze pane is removed
+ assertNull(sheet.getPaneInformation());
+ }
}
-
+
@Test
public void getRepeatingRowsAndColumns() throws IOException {
- Workbook wb = _testDataProvider.openSampleWorkbook(
- "RepeatingRowsCols."
- + _testDataProvider.getStandardFileNameExtension());
-
- checkRepeatingRowsAndColumns(wb.getSheetAt(0), null, null);
- checkRepeatingRowsAndColumns(wb.getSheetAt(1), "1:1", null);
- checkRepeatingRowsAndColumns(wb.getSheetAt(2), null, "A:A");
- checkRepeatingRowsAndColumns(wb.getSheetAt(3), "2:3", "A:B");
- wb.close();
+ try (Workbook wb = _testDataProvider.openSampleWorkbook(
+ "RepeatingRowsCols."
+ + _testDataProvider.getStandardFileNameExtension())) {
+
+ checkRepeatingRowsAndColumns(wb.getSheetAt(0), null, null);
+ checkRepeatingRowsAndColumns(wb.getSheetAt(1), "1:1", null);
+ checkRepeatingRowsAndColumns(wb.getSheetAt(2), null, "A:A");
+ checkRepeatingRowsAndColumns(wb.getSheetAt(3), "2:3", "A:B");
+ }
}
@Test
public void setRepeatingRowsAndColumnsBug47294() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet1 = wb.createSheet();
- sheet1.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
- assertEquals("1:4", sheet1.getRepeatingRows().formatAsString());
-
- //must handle sheets with quotas, see Bugzilla #47294
- Sheet sheet2 = wb.createSheet("My' Sheet");
- sheet2.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
- assertEquals("1:4", sheet2.getRepeatingRows().formatAsString());
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet1 = wb.createSheet();
+ sheet1.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
+ assertEquals("1:4", sheet1.getRepeatingRows().formatAsString());
+
+ //must handle sheets with quotas, see Bugzilla #47294
+ Sheet sheet2 = wb.createSheet("My' Sheet");
+ sheet2.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
+ assertEquals("1:4", sheet2.getRepeatingRows().formatAsString());
+ }
}
@Test
public void setRepeatingRowsAndColumns() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet1 = wb1.createSheet("Sheet1");
- Sheet sheet2 = wb1.createSheet("Sheet2");
- Sheet sheet3 = wb1.createSheet("Sheet3");
-
- checkRepeatingRowsAndColumns(sheet1, null, null);
-
- sheet1.setRepeatingRows(CellRangeAddress.valueOf("4:5"));
- sheet2.setRepeatingColumns(CellRangeAddress.valueOf("A:C"));
- sheet3.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
- sheet3.setRepeatingColumns(CellRangeAddress.valueOf("A:A"));
-
- checkRepeatingRowsAndColumns(sheet1, "4:5", null);
- checkRepeatingRowsAndColumns(sheet2, null, "A:C");
- checkRepeatingRowsAndColumns(sheet3, "1:4", "A:A");
-
- // write out, read back, and test refrain...
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- wb1.close();
- sheet1 = wb2.getSheetAt(0);
- sheet2 = wb2.getSheetAt(1);
- sheet3 = wb2.getSheetAt(2);
-
- checkRepeatingRowsAndColumns(sheet1, "4:5", null);
- checkRepeatingRowsAndColumns(sheet2, null, "A:C");
- checkRepeatingRowsAndColumns(sheet3, "1:4", "A:A");
-
- // check removing repeating rows and columns
- sheet3.setRepeatingRows(null);
- checkRepeatingRowsAndColumns(sheet3, null, "A:A");
-
- sheet3.setRepeatingColumns(null);
- checkRepeatingRowsAndColumns(sheet3, null, null);
- wb2.close();
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet1 = wb1.createSheet("Sheet1");
+ Sheet sheet2 = wb1.createSheet("Sheet2");
+ Sheet sheet3 = wb1.createSheet("Sheet3");
+
+ checkRepeatingRowsAndColumns(sheet1, null, null);
+
+ sheet1.setRepeatingRows(CellRangeAddress.valueOf("4:5"));
+ sheet2.setRepeatingColumns(CellRangeAddress.valueOf("A:C"));
+ sheet3.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
+ sheet3.setRepeatingColumns(CellRangeAddress.valueOf("A:A"));
+
+ checkRepeatingRowsAndColumns(sheet1, "4:5", null);
+ checkRepeatingRowsAndColumns(sheet2, null, "A:C");
+ checkRepeatingRowsAndColumns(sheet3, "1:4", "A:A");
+
+ // write out, read back, and test refrain...
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ sheet1 = wb2.getSheetAt(0);
+ sheet2 = wb2.getSheetAt(1);
+ sheet3 = wb2.getSheetAt(2);
+
+ checkRepeatingRowsAndColumns(sheet1, "4:5", null);
+ checkRepeatingRowsAndColumns(sheet2, null, "A:C");
+ checkRepeatingRowsAndColumns(sheet3, "1:4", "A:A");
+
+ // check removing repeating rows and columns
+ sheet3.setRepeatingRows(null);
+ checkRepeatingRowsAndColumns(sheet3, null, "A:A");
+
+ sheet3.setRepeatingColumns(null);
+ checkRepeatingRowsAndColumns(sheet3, null, null);
+ }
+ }
}
private void checkRepeatingRowsAndColumns(
@Test
public void baseZoom() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- // here we can only verify that setting some zoom values works, range-checking is different between the implementations
- sheet.setZoom(75);
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ // here we can only verify that setting some zoom values works,
+ // range-checking is different between the implementations
+ sheet.setZoom(75);
+ }
}
-
+
@Test
public void baseShowInPane() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- sheet.showInPane(2, 3);
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ sheet.showInPane(2, 3);
+ }
}
@Test
public void bug55723() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- CellRangeAddress range = CellRangeAddress.valueOf("A:B");
- AutoFilter filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
- // there seems to be currently no generic way to check the setting...
-
- range = CellRangeAddress.valueOf("B:C");
- filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
- // there seems to be currently no generic way to check the setting...
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ CellRangeAddress range = CellRangeAddress.valueOf("A:B");
+ AutoFilter filter = sheet.setAutoFilter(range);
+ assertNotNull(filter);
+ // there seems to be currently no generic way to check the setting...
+
+ range = CellRangeAddress.valueOf("B:C");
+ filter = sheet.setAutoFilter(range);
+ assertNotNull(filter);
+ // there seems to be currently no generic way to check the setting...
+ }
}
@Test
public void bug55723_Rows() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- CellRangeAddress range = CellRangeAddress.valueOf("A4:B55000");
- AutoFilter filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ CellRangeAddress range = CellRangeAddress.valueOf("A4:B55000");
+ AutoFilter filter = sheet.setAutoFilter(range);
+ assertNotNull(filter);
+ }
}
@Test
public void bug55723d_RowsOver65k() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- CellRangeAddress range = CellRangeAddress.valueOf("A4:B75000");
- AutoFilter filter = sheet.setAutoFilter(range);
- assertNotNull(filter);
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ CellRangeAddress range = CellRangeAddress.valueOf("A4:B75000");
+ AutoFilter filter = sheet.setAutoFilter(range);
+ assertNotNull(filter);
+ }
}
/**
*/
@Test
public void bug48325() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet("Test");
- trackColumnsForAutoSizingIfSXSSF(sheet);
- CreationHelper factory = wb.getCreationHelper();
-
- Row row = sheet.createRow(0);
- Cell cell = row.createCell(0);
-
- Font font = wb.createFont();
- RichTextString rts = factory.createRichTextString("");
- rts.applyFont(font);
- cell.setCellValue(rts);
-
- sheet.autoSizeColumn(0);
-
- assertNotNull(_testDataProvider.writeOutAndReadBack(wb));
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet("Test");
+ trackColumnsForAutoSizingIfSXSSF(sheet);
+ CreationHelper factory = wb.getCreationHelper();
+
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+
+ Font font = wb.createFont();
+ RichTextString rts = factory.createRichTextString("");
+ rts.applyFont(font);
+ cell.setCellValue(rts);
+
+ sheet.autoSizeColumn(0);
+
+ assertNotNull(_testDataProvider.writeOutAndReadBack(wb));
+ }
}
@Test
public void getCellComment() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- Drawing<?> dg = sheet.createDrawingPatriarch();
- Comment comment = dg.createCellComment(workbook.getCreationHelper().createClientAnchor());
- Cell cell = sheet.createRow(9).createCell(2);
- comment.setAuthor("test C10 author");
- cell.setCellComment(comment);
-
- CellAddress ref = new CellAddress(9, 2);
- assertNotNull(sheet.getCellComment(ref));
- assertEquals("test C10 author", sheet.getCellComment(ref).getAuthor());
-
- assertNotNull(_testDataProvider.writeOutAndReadBack(workbook));
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ Drawing<?> dg = sheet.createDrawingPatriarch();
+ Comment comment = dg.createCellComment(workbook.getCreationHelper().createClientAnchor());
+ Cell cell = sheet.createRow(9).createCell(2);
+ comment.setAuthor("test C10 author");
+ cell.setCellComment(comment);
+
+ CellAddress ref = new CellAddress(9, 2);
+ assertNotNull(sheet.getCellComment(ref));
+ assertEquals("test C10 author", sheet.getCellComment(ref).getAuthor());
+
+ assertNotNull(_testDataProvider.writeOutAndReadBack(workbook));
+ }
}
@Test
public void getCellComments() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet("TEST");
-
- // a sheet with no cell comments should return an empty map (not null or raise NPE).
- assertTrue(sheet.getCellComments().isEmpty());
-
- Drawing<?> dg = sheet.createDrawingPatriarch();
- ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
-
- int nRows = 5;
- int nCols = 6;
-
- for (int r=0; r<nRows; r++) {
- sheet.createRow(r);
- // Create columns in reverse order
- for (int c=nCols-1; c>=0; c--) {
- // When the comment box is visible, have it show in a 1x3 space
- anchor.setCol1(c);
- anchor.setCol2(c);
- anchor.setRow1(r);
- anchor.setRow2(r);
-
- // Create the comment and set the text-author
- Comment comment = dg.createCellComment(anchor);
- Cell cell = sheet.getRow(r).createCell(c);
- comment.setAuthor("Author " + r);
- RichTextString text = workbook.getCreationHelper().createRichTextString("Test comment at row=" + r + ", column=" + c);
- comment.setString(text);
-
- // Assign the comment to the cell
- cell.setCellComment(comment);
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb1.createSheet("TEST");
+
+ // a sheet with no cell comments should return an empty map (not null or raise NPE).
+ assertTrue(sheet.getCellComments().isEmpty());
+
+ Drawing<?> dg = sheet.createDrawingPatriarch();
+ ClientAnchor anchor = wb1.getCreationHelper().createClientAnchor();
+
+ int nRows = 5;
+ int nCols = 6;
+
+ for (int r = 0; r < nRows; r++) {
+ sheet.createRow(r);
+ // Create columns in reverse order
+ for (int c = nCols - 1; c >= 0; c--) {
+ // When the comment box is visible, have it show in a 1x3 space
+ anchor.setCol1(c);
+ anchor.setCol2(c);
+ anchor.setRow1(r);
+ anchor.setRow2(r);
+
+ // Create the comment and set the text-author
+ Comment comment = dg.createCellComment(anchor);
+ Cell cell = sheet.getRow(r).createCell(c);
+ comment.setAuthor("Author " + r);
+ RichTextString text = wb1.getCreationHelper().createRichTextString("Test comment at row=" + r + ", column=" + c);
+ comment.setString(text);
+
+ // Assign the comment to the cell
+ cell.setCellComment(comment);
+ }
+ }
+
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ Sheet sh = wb2.getSheet("TEST");
+ Map<CellAddress, ? extends Comment> cellComments = sh.getCellComments();
+ assertEquals(nRows * nCols, cellComments.size());
+
+ for (Entry<CellAddress, ? extends Comment> e : cellComments.entrySet()) {
+ CellAddress ref = e.getKey();
+ Comment aComment = e.getValue();
+ assertEquals("Author " + ref.getRow(), aComment.getAuthor());
+ String text = "Test comment at row=" + ref.getRow() + ", column=" + ref.getColumn();
+ assertEquals(text, aComment.getString().getString());
+ }
}
}
-
- Workbook wb = _testDataProvider.writeOutAndReadBack(workbook);
- Sheet sh = wb.getSheet("TEST");
- Map<CellAddress, ? extends Comment> cellComments = sh.getCellComments();
- assertEquals(nRows*nCols, cellComments.size());
-
- for (Entry<CellAddress, ? extends Comment> e : cellComments.entrySet()) {
- CellAddress ref = e.getKey();
- Comment aComment = e.getValue();
- assertEquals("Author " + ref.getRow(), aComment.getAuthor());
- String text = "Test comment at row=" + ref.getRow() + ", column=" + ref.getColumn();
- assertEquals(text, aComment.getString().getString());
- }
-
- workbook.close();
- wb.close();
}
-
+
@Test
public void getHyperlink() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
- hyperlink.setAddress("https://poi.apache.org/");
-
- Sheet sheet = workbook.createSheet();
- Cell cell = sheet.createRow(5).createCell(1);
-
- assertEquals("list size before add", 0, sheet.getHyperlinkList().size());
- cell.setHyperlink(hyperlink);
- assertEquals("list size after add", 1, sheet.getHyperlinkList().size());
-
- assertEquals("list", hyperlink, sheet.getHyperlinkList().get(0));
- CellAddress B6 = new CellAddress(5, 1);
- assertEquals("row, col", hyperlink, sheet.getHyperlink(5, 1));
- assertEquals("addr", hyperlink, sheet.getHyperlink(B6));
- assertNull("no hyperlink at A1", sheet.getHyperlink(CellAddress.A1));
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
+ hyperlink.setAddress("https://poi.apache.org/");
+
+ Sheet sheet = workbook.createSheet();
+ Cell cell = sheet.createRow(5).createCell(1);
+
+ assertEquals("list size before add", 0, sheet.getHyperlinkList().size());
+ cell.setHyperlink(hyperlink);
+ assertEquals("list size after add", 1, sheet.getHyperlinkList().size());
+
+ assertEquals("list", hyperlink, sheet.getHyperlinkList().get(0));
+ CellAddress B6 = new CellAddress(5, 1);
+ assertEquals("row, col", hyperlink, sheet.getHyperlink(5, 1));
+ assertEquals("addr", hyperlink, sheet.getHyperlink(B6));
+ assertNull("no hyperlink at A1", sheet.getHyperlink(CellAddress.A1));
+ }
}
-
+
@Test
- public void removeAllHyperlinks() {
- Workbook workbook = _testDataProvider.createWorkbook();
- Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
- hyperlink.setAddress("https://poi.apache.org/");
- Sheet sheet = workbook.createSheet();
- Cell cell = sheet.createRow(5).createCell(1);
- cell.setHyperlink(hyperlink);
-
- assertEquals(1, workbook.getSheetAt(0).getHyperlinkList().size());
- // Save a workbook with a hyperlink
- Workbook workbook2 = _testDataProvider.writeOutAndReadBack(workbook);
- assertEquals(1, workbook2.getSheetAt(0).getHyperlinkList().size());
-
- // Remove all hyperlinks from a saved workbook
- workbook2.getSheetAt(0).getRow(5).getCell(1).removeHyperlink();
- assertEquals(0, workbook2.getSheetAt(0).getHyperlinkList().size());
-
- // Verify that hyperlink was removed from workbook after writing out
- Workbook workbook3 = _testDataProvider.writeOutAndReadBack(workbook2);
- assertEquals(0, workbook3.getSheetAt(0).getHyperlinkList().size());
+ public void removeAllHyperlinks() throws IOException {
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
+ hyperlink.setAddress("https://poi.apache.org/");
+ Sheet sheet = workbook.createSheet();
+ Cell cell = sheet.createRow(5).createCell(1);
+ cell.setHyperlink(hyperlink);
+
+ assertEquals(1, workbook.getSheetAt(0).getHyperlinkList().size());
+
+ // Save a workbook with a hyperlink
+ try (Workbook workbook2 = _testDataProvider.writeOutAndReadBack(workbook)) {
+ assertEquals(1, workbook2.getSheetAt(0).getHyperlinkList().size());
+
+ // Remove all hyperlinks from a saved workbook
+ workbook2.getSheetAt(0).getRow(5).getCell(1).removeHyperlink();
+ assertEquals(0, workbook2.getSheetAt(0).getHyperlinkList().size());
+
+ // Verify that hyperlink was removed from workbook after writing out
+ try (Workbook workbook3 = _testDataProvider.writeOutAndReadBack(workbook2)) {
+ assertEquals(0, workbook3.getSheetAt(0).getHyperlinkList().size());
+ }
+ }
+ }
}
@Test
public void newMergedRegionAt() throws IOException {
- Workbook workbook = _testDataProvider.createWorkbook();
- Sheet sheet = workbook.createSheet();
- CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
- assertEquals(0, sheet.addMergedRegion(region));
- assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
- assertEquals(1, sheet.getNumMergedRegions());
-
- assertNotNull(_testDataProvider.writeOutAndReadBack(workbook));
-
- workbook.close();
+ try (Workbook workbook = _testDataProvider.createWorkbook()) {
+ Sheet sheet = workbook.createSheet();
+ CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
+ assertEquals(0, sheet.addMergedRegion(region));
+ assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
+ assertEquals(1, sheet.getNumMergedRegions());
+
+ assertNotNull(_testDataProvider.writeOutAndReadBack(workbook));
+ }
}
@Test
public void showInPaneManyRowsBug55248() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet("Sheet 1");
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb1.createSheet("Sheet 1");
- sheet.showInPane(0, 0);
+ sheet.showInPane(0, 0);
- for(int i = ROW_COUNT/2;i < ROW_COUNT;i++) {
- sheet.createRow(i);
- sheet.showInPane(i, 0);
- // this one fails: sheet.showInPane((short)i, 0);
- }
+ for (int i = ROW_COUNT / 2; i < ROW_COUNT; i++) {
+ sheet.createRow(i);
+ sheet.showInPane(i, 0);
+ // this one fails: sheet.showInPane((short)i, 0);
+ }
- int i = 0;
- sheet.showInPane(i, i);
+ int i = 0;
+ sheet.showInPane(i, i);
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
- checkRowCount(wb2);
-
- wb2.close();
- wb1.close();
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ checkRowCount(wb2);
+ }
+ }
}
private void checkRowCount(Workbook wb) {
assertNotNull(sh);
assertEquals(ROW_COUNT-1, sh.getLastRowNum());
}
-
-
+
+
@Test
public void testRightToLeft() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
-
- assertFalse(sheet.isRightToLeft());
- sheet.setRightToLeft(true);
- assertTrue(sheet.isRightToLeft());
- sheet.setRightToLeft(false);
- assertFalse(sheet.isRightToLeft());
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+
+ assertFalse(sheet.isRightToLeft());
+ sheet.setRightToLeft(true);
+ assertTrue(sheet.isRightToLeft());
+ sheet.setRightToLeft(false);
+ assertFalse(sheet.isRightToLeft());
+ }
}
-
+
@Test
public void testNoMergedRegionsIsEmptyList() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet sheet = wb.createSheet();
- assertTrue(sheet.getMergedRegions().isEmpty());
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb.createSheet();
+ assertTrue(sheet.getMergedRegions().isEmpty());
+ }
}
/**
*/
@Test
public void setActiveCell() throws IOException {
- Workbook wb1 = _testDataProvider.createWorkbook();
- Sheet sheet = wb1.createSheet();
- CellAddress B42 = new CellAddress("B42");
-
- // active cell behavior is undefined if not set.
- // HSSFSheet defaults to A1 active cell, while XSSFSheet defaults to null.
- if (sheet.getActiveCell() != null && !sheet.getActiveCell().equals(CellAddress.A1)) {
- fail("If not set, active cell should default to null or A1");
- }
-
- sheet.setActiveCell(B42);
-
- Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ Sheet sheet = wb1.createSheet();
+ CellAddress B42 = new CellAddress("B42");
+
+ // active cell behavior is undefined if not set.
+ // HSSFSheet defaults to A1 active cell, while XSSFSheet defaults to null.
+ if (sheet.getActiveCell() != null && !sheet.getActiveCell().equals(CellAddress.A1)) {
+ fail("If not set, active cell should default to null or A1");
+ }
- assertEquals(B42, sheet.getActiveCell());
+ sheet.setActiveCell(B42);
- wb1.close();
- wb2.close();
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ sheet = wb2.getSheetAt(0);
+ assertEquals(B42, sheet.getActiveCell());
+ }
+ }
}
@Test
public void autoSizeDate() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
- Sheet s = wb.createSheet("Sheet1");
- Row r = s.createRow(0);
- r.createCell(0).setCellValue(1);
- r.createCell(1).setCellValue(123456);
-
- // for the streaming-variant we need to enable autosize-tracking to make it work
- trackColumnsForAutoSizingIfSXSSF(s);
-
- // Will be sized fairly small
- s.autoSizeColumn((short)0);
- s.autoSizeColumn((short)1);
-
- // Size ranges due to different fonts on different machines
- assertBetween("Single number column width", s.getColumnWidth(0), 350, 570);
- assertBetween("6 digit number column width", s.getColumnWidth(1), 1500, 2100);
-
- // Set a date format
- CellStyle cs = wb.createCellStyle();
- DataFormat f = wb.createDataFormat();
- cs.setDataFormat(f.getFormat("yyyy-mm-dd MMMM hh:mm:ss"));
- r.getCell(0).setCellStyle(cs);
- r.getCell(1).setCellStyle(cs);
-
- assertTrue(DateUtil.isCellDateFormatted(r.getCell(0)));
- assertTrue(DateUtil.isCellDateFormatted(r.getCell(1)));
-
- // Should get much bigger now
- s.autoSizeColumn((short)0);
- s.autoSizeColumn((short)1);
-
- assertBetween("Date column width", s.getColumnWidth(0), 4750, 7300);
- assertBetween("Date column width", s.getColumnWidth(1), 4750, 7300);
-
- wb.close();
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Sheet s = wb.createSheet("Sheet1");
+ Row r = s.createRow(0);
+ r.createCell(0).setCellValue(1);
+ r.createCell(1).setCellValue(123456);
+
+ // for the streaming-variant we need to enable autosize-tracking to make it work
+ trackColumnsForAutoSizingIfSXSSF(s);
+
+ // Will be sized fairly small
+ s.autoSizeColumn((short) 0);
+ s.autoSizeColumn((short) 1);
+
+ // Size ranges due to different fonts on different machines
+ assertBetween("Single number column width", s.getColumnWidth(0), 350, 570);
+ assertBetween("6 digit number column width", s.getColumnWidth(1), 1500, 2100);
+
+ // Set a date format
+ CellStyle cs = wb.createCellStyle();
+ DataFormat f = wb.createDataFormat();
+ cs.setDataFormat(f.getFormat("yyyy-mm-dd MMMM hh:mm:ss"));
+ r.getCell(0).setCellStyle(cs);
+ r.getCell(1).setCellStyle(cs);
+
+ assertTrue(DateUtil.isCellDateFormatted(r.getCell(0)));
+ assertTrue(DateUtil.isCellDateFormatted(r.getCell(1)));
+
+ // Should get much bigger now
+ s.autoSizeColumn((short) 0);
+ s.autoSizeColumn((short) 1);
+
+ assertBetween("Date column width", s.getColumnWidth(0), 4750, 7300);
+ assertBetween("Date column width", s.getColumnWidth(1), 4750, 7300);
+ }
}
}