mirror of
https://github.com/apache/poi.git
synced 2025-02-08 02:58:18 +00:00
Bug 63073: Adjust returned index of merged regions and verify all calls in tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1858021 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d7aedc7978
commit
cd52566c98
@ -392,7 +392,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
*
|
*
|
||||||
* @param region to merge
|
* @param region to merge
|
||||||
* @param validate whether to validate merged region
|
* @param validate whether to validate merged region
|
||||||
* @return index of this region
|
* @return 0-based index of this region
|
||||||
* @throws IllegalArgumentException if region contains fewer than 2 cells (this check is inexpensive and is performed regardless of <tt>validate</tt>)
|
* @throws IllegalArgumentException if region contains fewer than 2 cells (this check is inexpensive and is performed regardless of <tt>validate</tt>)
|
||||||
* @throws IllegalStateException if region intersects with a multi-cell array formula
|
* @throws IllegalStateException if region intersects with a multi-cell array formula
|
||||||
* @throws IllegalStateException if region intersects with an existing region on this sheet
|
* @throws IllegalStateException if region intersects with an existing region on this sheet
|
||||||
@ -409,14 +409,14 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
validateArrayFormulas(region);
|
validateArrayFormulas(region);
|
||||||
|
|
||||||
// Throw IllegalStateException if the argument CellRangeAddress intersects with
|
// Throw IllegalStateException if the argument CellRangeAddress intersects with
|
||||||
// a merged region already in this sheet
|
// a merged region already in this sheet
|
||||||
validateMergedRegions(region);
|
validateMergedRegions(region);
|
||||||
}
|
}
|
||||||
|
|
||||||
CTMergeCells ctMergeCells = worksheet.isSetMergeCells() ? worksheet.getMergeCells() : worksheet.addNewMergeCells();
|
CTMergeCells ctMergeCells = worksheet.isSetMergeCells() ? worksheet.getMergeCells() : worksheet.addNewMergeCells();
|
||||||
CTMergeCell ctMergeCell = ctMergeCells.addNewMergeCell();
|
CTMergeCell ctMergeCell = ctMergeCells.addNewMergeCell();
|
||||||
ctMergeCell.setRef(region.formatAsString());
|
ctMergeCell.setRef(region.formatAsString());
|
||||||
return ctMergeCells.sizeOfMergeCellArray();
|
return ctMergeCells.sizeOfMergeCellArray()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,7 +46,7 @@ import org.junit.Test;
|
|||||||
* Tests the auto-sizing behaviour of {@link SXSSFSheet} when not all
|
* Tests the auto-sizing behaviour of {@link SXSSFSheet} when not all
|
||||||
* rows fit into the memory window size etc.
|
* rows fit into the memory window size etc.
|
||||||
*
|
*
|
||||||
* @see Bug #57450 which reported the original mis-behaviour
|
* see Bug #57450 which reported the original misbehaviour
|
||||||
*/
|
*/
|
||||||
public class TestAutoSizeColumnTracker {
|
public class TestAutoSizeColumnTracker {
|
||||||
|
|
||||||
@ -169,12 +169,12 @@ public class TestAutoSizeColumnTracker {
|
|||||||
}
|
}
|
||||||
tracker.updateColumnWidths(row1);
|
tracker.updateColumnWidths(row1);
|
||||||
tracker.updateColumnWidths(row2);
|
tracker.updateColumnWidths(row2);
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("D1:E1"));
|
assertEquals(0, sheet.addMergedRegion(CellRangeAddress.valueOf("D1:E1")));
|
||||||
|
|
||||||
assumeRequiredFontsAreInstalled(workbook, row1.getCell(columns.iterator().next()));
|
assumeRequiredFontsAreInstalled(workbook, row1.getCell(columns.iterator().next()));
|
||||||
|
|
||||||
// Excel 2013 and LibreOffice 4.2.8.2 both treat columns with merged regions as blank
|
// Excel 2013 and LibreOffice 4.2.8.2 both treat columns with merged regions as blank
|
||||||
/** A B C D E
|
/* A B C D E
|
||||||
* 1 LONG LONG LONGMERGE
|
* 1 LONG LONG LONGMERGE
|
||||||
* 2 SHORT SHORT SHORT
|
* 2 SHORT SHORT SHORT
|
||||||
*/
|
*/
|
||||||
|
@ -50,7 +50,7 @@ import org.junit.runners.Parameterized.Parameters;
|
|||||||
* Tests the auto-sizing behaviour of {@link SXSSFSheet} when not all
|
* Tests the auto-sizing behaviour of {@link SXSSFSheet} when not all
|
||||||
* rows fit into the memory window size etc.
|
* rows fit into the memory window size etc.
|
||||||
*
|
*
|
||||||
* @see Bug #57450 which reported the original mis-behaviour
|
* see Bug #57450 which reported the original misbehaviour
|
||||||
*/
|
*/
|
||||||
@RunWith(Parameterized.class)
|
@RunWith(Parameterized.class)
|
||||||
public class TestSXSSFSheetAutoSizeColumn {
|
public class TestSXSSFSheetAutoSizeColumn {
|
||||||
@ -79,7 +79,7 @@ public class TestSXSSFSheetAutoSizeColumn {
|
|||||||
private SXSSFSheet sheet;
|
private SXSSFSheet sheet;
|
||||||
private SXSSFWorkbook workbook;
|
private SXSSFWorkbook workbook;
|
||||||
|
|
||||||
@Parameter(0)
|
@Parameter
|
||||||
public boolean useMergedCells;
|
public boolean useMergedCells;
|
||||||
|
|
||||||
@Parameters(name="{index}: useMergedCells={0}")
|
@Parameters(name="{index}: useMergedCells={0}")
|
||||||
@ -189,11 +189,11 @@ public class TestSXSSFSheetAutoSizeColumn {
|
|||||||
Cell a1 = createRowWithCellValues(sheet, 0, LONG_CELL_VALUE);
|
Cell a1 = createRowWithCellValues(sheet, 0, LONG_CELL_VALUE);
|
||||||
|
|
||||||
assumeRequiredFontsAreInstalled(workbook, a1);
|
assumeRequiredFontsAreInstalled(workbook, a1);
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("A1:B1"));
|
assertEquals(0, sheet.addMergedRegion(CellRangeAddress.valueOf("A1:B1")));
|
||||||
|
|
||||||
createRowWithCellValues(sheet, 1, SHORT_CELL_VALUE, SHORT_CELL_VALUE);
|
createRowWithCellValues(sheet, 1, SHORT_CELL_VALUE, SHORT_CELL_VALUE);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* A B
|
* A B
|
||||||
* 1 LONGMERGED
|
* 1 LONGMERGED
|
||||||
* 2 SHORT SHORT
|
* 2 SHORT SHORT
|
||||||
|
@ -164,6 +164,8 @@ public final class TestUnfixedBugs {
|
|||||||
wbBack.close();
|
wbBack.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This test will run green, but the resulting file is formatted incorrectly,
|
||||||
|
// see the bug at https://bz.apache.org/bugzilla/show_bug.cgi?id=55752
|
||||||
@Test
|
@Test
|
||||||
public void testBug55752() throws IOException {
|
public void testBug55752() throws IOException {
|
||||||
try (Workbook wb = new XSSFWorkbook()) {
|
try (Workbook wb = new XSSFWorkbook()) {
|
||||||
@ -189,16 +191,16 @@ public final class TestUnfixedBugs {
|
|||||||
|
|
||||||
// merge cells
|
// merge cells
|
||||||
CellRangeAddress range1 = new CellRangeAddress(0, 0, 0, 1);
|
CellRangeAddress range1 = new CellRangeAddress(0, 0, 0, 1);
|
||||||
sheet.addMergedRegion(range1);
|
assertEquals(0, sheet.addMergedRegion(range1));
|
||||||
CellRangeAddress range2 = new CellRangeAddress(1, 1, 0, 1);
|
CellRangeAddress range2 = new CellRangeAddress(1, 1, 0, 1);
|
||||||
sheet.addMergedRegion(range2);
|
assertEquals(1, sheet.addMergedRegion(range2));
|
||||||
CellRangeAddress range3 = new CellRangeAddress(2, 2, 0, 1);
|
CellRangeAddress range3 = new CellRangeAddress(2, 2, 0, 1);
|
||||||
sheet.addMergedRegion(range3);
|
assertEquals(2, sheet.addMergedRegion(range3));
|
||||||
assertEquals(0, range3.getFirstColumn());
|
assertEquals(0, range3.getFirstColumn());
|
||||||
assertEquals(1, range3.getLastColumn());
|
assertEquals(1, range3.getLastColumn());
|
||||||
assertEquals(2, range3.getLastRow());
|
assertEquals(2, range3.getLastRow());
|
||||||
CellRangeAddress range4 = new CellRangeAddress(3, 3, 0, 1);
|
CellRangeAddress range4 = new CellRangeAddress(3, 3, 0, 1);
|
||||||
sheet.addMergedRegion(range4);
|
assertEquals(3, sheet.addMergedRegion(range4));
|
||||||
|
|
||||||
// set border
|
// set border
|
||||||
RegionUtil.setBorderBottom(BorderStyle.THIN, range1, sheet);
|
RegionUtil.setBorderBottom(BorderStyle.THIN, range1, sheet);
|
||||||
|
@ -275,9 +275,9 @@ public final class TestXSSFSheet extends BaseTestXSheet {
|
|||||||
CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4");
|
CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4");
|
||||||
CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6");
|
CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6");
|
||||||
CellRangeAddress region_4 = CellRangeAddress.valueOf("G7:H8");
|
CellRangeAddress region_4 = CellRangeAddress.valueOf("G7:H8");
|
||||||
sheet.addMergedRegion(region_1);
|
assertEquals(0, sheet.addMergedRegion(region_1));
|
||||||
sheet.addMergedRegion(region_2);
|
assertEquals(1, sheet.addMergedRegion(region_2));
|
||||||
sheet.addMergedRegion(region_3);
|
assertEquals(2, sheet.addMergedRegion(region_3));
|
||||||
assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
assertEquals("C3:D4", ctWorksheet.getMergeCells().getMergeCellArray(1).getRef());
|
||||||
assertEquals(3, sheet.getNumMergedRegions());
|
assertEquals(3, sheet.getNumMergedRegions());
|
||||||
sheet.removeMergedRegion(1);
|
sheet.removeMergedRegion(1);
|
||||||
@ -288,10 +288,10 @@ public final class TestXSSFSheet extends BaseTestXSheet {
|
|||||||
assertEquals(0, sheet.getNumMergedRegions());
|
assertEquals(0, sheet.getNumMergedRegions());
|
||||||
assertNull(" CTMergeCells should be deleted after removing the last merged " +
|
assertNull(" CTMergeCells should be deleted after removing the last merged " +
|
||||||
"region on the sheet.", sheet.getCTWorksheet().getMergeCells());
|
"region on the sheet.", sheet.getCTWorksheet().getMergeCells());
|
||||||
sheet.addMergedRegion(region_1);
|
assertEquals(0, sheet.addMergedRegion(region_1));
|
||||||
sheet.addMergedRegion(region_2);
|
assertEquals(1, sheet.addMergedRegion(region_2));
|
||||||
sheet.addMergedRegion(region_3);
|
assertEquals(2, sheet.addMergedRegion(region_3));
|
||||||
sheet.addMergedRegion(region_4);
|
assertEquals(3, sheet.addMergedRegion(region_4));
|
||||||
// test invalid indexes OOBE
|
// test invalid indexes OOBE
|
||||||
Set<Integer> rmIdx = new HashSet<>(Arrays.asList(5, 6));
|
Set<Integer> rmIdx = new HashSet<>(Arrays.asList(5, 6));
|
||||||
sheet.removeMergedRegions(rmIdx);
|
sheet.removeMergedRegions(rmIdx);
|
||||||
|
@ -524,7 +524,7 @@ public final class TestHSSFSheet extends BaseTestSheet {
|
|||||||
|
|
||||||
int sclLoc = sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid);
|
int sclLoc = sheet.getSheet().findFirstRecordLocBySid(SCLRecord.sid);
|
||||||
int window2Loc = sheet.getSheet().findFirstRecordLocBySid(WindowTwoRecord.sid);
|
int window2Loc = sheet.getSheet().findFirstRecordLocBySid(WindowTwoRecord.sid);
|
||||||
assertTrue(sclLoc == window2Loc + 1);
|
assertEquals(sclLoc, window2Loc + 1);
|
||||||
|
|
||||||
// verify limits
|
// verify limits
|
||||||
try {
|
try {
|
||||||
@ -667,7 +667,7 @@ public final class TestHSSFSheet extends BaseTestSheet {
|
|||||||
assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth(0) <= maxWithRow1And2);
|
assertTrue("Column autosized with only one row: wrong width", sheet.getColumnWidth(0) <= maxWithRow1And2);
|
||||||
|
|
||||||
//create a region over the 2nd row and auto size the first column
|
//create a region over the 2nd row and auto size the first column
|
||||||
sheet.addMergedRegion(new CellRangeAddress(1,1,0,1));
|
assertEquals(1, sheet.addMergedRegion(new CellRangeAddress(1,1,0,1)));
|
||||||
assertNotNull(sheet.getMergedRegion(0));
|
assertNotNull(sheet.getMergedRegion(0));
|
||||||
sheet.autoSizeColumn((short)0);
|
sheet.autoSizeColumn((short)0);
|
||||||
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
|
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
|
||||||
|
@ -386,8 +386,8 @@ public final class TestWorkbook {
|
|||||||
|
|
||||||
populateSheet(s);
|
populateSheet(s);
|
||||||
|
|
||||||
s.addMergedRegion(new CellRangeAddress(0, 10, 0, 10));
|
assertEquals(0, s.addMergedRegion(new CellRangeAddress(0, 10, 0, 10)));
|
||||||
s.addMergedRegion(new CellRangeAddress(30, 40, 5, 15));
|
assertEquals(1, s.addMergedRegion(new CellRangeAddress(30, 40, 5, 15)));
|
||||||
sanityChecker.checkHSSFWorkbook(wb1);
|
sanityChecker.checkHSSFWorkbook(wb1);
|
||||||
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
|
HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
|
||||||
|
|
||||||
|
@ -154,30 +154,30 @@ public abstract class BaseTestBugzillaIssues {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void bug22720() throws IOException {
|
public void bug22720() throws IOException {
|
||||||
Workbook wb = _testDataProvider.createWorkbook();
|
Workbook wb = _testDataProvider.createWorkbook();
|
||||||
wb.createSheet("TEST");
|
wb.createSheet("TEST");
|
||||||
Sheet template = wb.getSheetAt(0);
|
Sheet template = wb.getSheetAt(0);
|
||||||
|
|
||||||
template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));
|
assertEquals(0, template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)));
|
||||||
template.addMergedRegion(new CellRangeAddress(2, 3, 0, 2));
|
assertEquals(1, template.addMergedRegion(new CellRangeAddress(2, 3, 0, 2)));
|
||||||
|
|
||||||
Sheet clone = wb.cloneSheet(0);
|
Sheet clone = wb.cloneSheet(0);
|
||||||
int originalMerged = template.getNumMergedRegions();
|
int originalMerged = template.getNumMergedRegions();
|
||||||
assertEquals("2 merged regions", 2, originalMerged);
|
assertEquals("2 merged regions", 2, originalMerged);
|
||||||
|
|
||||||
//remove merged regions from clone
|
//remove merged regions from clone
|
||||||
for (int i=template.getNumMergedRegions()-1; i>=0; i--) {
|
for (int i=template.getNumMergedRegions()-1; i>=0; i--) {
|
||||||
clone.removeMergedRegion(i);
|
clone.removeMergedRegion(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions());
|
assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions());
|
||||||
//check if template's merged regions are OK
|
//check if template's merged regions are OK
|
||||||
if (template.getNumMergedRegions()>0) {
|
if (template.getNumMergedRegions()>0) {
|
||||||
// fetch the first merged region...EXCEPTION OCCURS HERE
|
// fetch the first merged region...EXCEPTION OCCURS HERE
|
||||||
template.getMergedRegion(0);
|
template.getMergedRegion(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -41,7 +41,7 @@ public abstract class BaseTestCloneSheet {
|
|||||||
public void testCloneSheetBasic() throws IOException{
|
public void testCloneSheetBasic() throws IOException{
|
||||||
Workbook b = _testDataProvider.createWorkbook();
|
Workbook b = _testDataProvider.createWorkbook();
|
||||||
Sheet s = b.createSheet("Test");
|
Sheet s = b.createSheet("Test");
|
||||||
s.addMergedRegion(new CellRangeAddress(0, 1, 0, 1));
|
assertEquals(0, s.addMergedRegion(new CellRangeAddress(0, 1, 0, 1)));
|
||||||
Sheet clonedSheet = b.cloneSheet(0);
|
Sheet clonedSheet = b.cloneSheet(0);
|
||||||
|
|
||||||
assertEquals("One merged area", 1, clonedSheet.getNumMergedRegions());
|
assertEquals("One merged area", 1, clonedSheet.getNumMergedRegions());
|
||||||
@ -51,7 +51,6 @@ public abstract class BaseTestCloneSheet {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensures that pagebreak cloning works properly
|
* Ensures that pagebreak cloning works properly
|
||||||
* @throws IOException
|
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void testPageBreakClones() throws IOException {
|
public void testPageBreakClones() throws IOException {
|
||||||
|
@ -277,7 +277,7 @@ public abstract class BaseTestSheet {
|
|||||||
final Sheet sheet = wb.createSheet();
|
final Sheet sheet = wb.createSheet();
|
||||||
|
|
||||||
final CellRangeAddress baseRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
|
final CellRangeAddress baseRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
|
||||||
sheet.addMergedRegion(baseRegion);
|
assertEquals(0, sheet.addMergedRegion(baseRegion));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final CellRangeAddress duplicateRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
|
final CellRangeAddress duplicateRegion = new CellRangeAddress(0, 1, 0, 1); //A1:B2
|
||||||
@ -316,7 +316,7 @@ public abstract class BaseTestSheet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final CellRangeAddress disjointRegion = new CellRangeAddress(10, 11, 10, 11);
|
final CellRangeAddress disjointRegion = new CellRangeAddress(10, 11, 10, 11);
|
||||||
sheet.addMergedRegion(disjointRegion);
|
assertEquals(1, sheet.addMergedRegion(disjointRegion));
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
@ -352,7 +352,7 @@ public abstract class BaseTestSheet {
|
|||||||
SpreadsheetVersion ssVersion = _testDataProvider.getSpreadsheetVersion();
|
SpreadsheetVersion ssVersion = _testDataProvider.getSpreadsheetVersion();
|
||||||
|
|
||||||
CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
|
CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
assertEquals(1, sheet.getNumMergedRegions());
|
assertEquals(1, sheet.getNumMergedRegions());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -390,9 +390,9 @@ public abstract class BaseTestSheet {
|
|||||||
Workbook wb = _testDataProvider.createWorkbook();
|
Workbook wb = _testDataProvider.createWorkbook();
|
||||||
Sheet sheet = wb.createSheet();
|
Sheet sheet = wb.createSheet();
|
||||||
CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
|
CellRangeAddress region = new CellRangeAddress(0, 1, 0, 1);
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
region = new CellRangeAddress(2, 3, 0, 1);
|
region = new CellRangeAddress(2, 3, 0, 1);
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(1, sheet.addMergedRegion(region));
|
||||||
|
|
||||||
sheet.removeMergedRegion(0);
|
sheet.removeMergedRegion(0);
|
||||||
|
|
||||||
@ -404,14 +404,14 @@ public abstract class BaseTestSheet {
|
|||||||
assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
|
assertEquals("there should be no merged regions left!", 0, sheet.getNumMergedRegions());
|
||||||
|
|
||||||
//an, add, remove, get(0) would null pointer
|
//an, add, remove, get(0) would null pointer
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
|
assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
|
||||||
sheet.removeMergedRegion(0);
|
sheet.removeMergedRegion(0);
|
||||||
assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
|
assertEquals("there should now be zero merged regions!", 0, sheet.getNumMergedRegions());
|
||||||
//add it again!
|
//add it again!
|
||||||
region.setLastRow(4);
|
region.setLastRow(4);
|
||||||
|
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
|
assertEquals("there should now be one merged region!", 1, sheet.getNumMergedRegions());
|
||||||
|
|
||||||
//should exist now!
|
//should exist now!
|
||||||
@ -434,7 +434,7 @@ public abstract class BaseTestSheet {
|
|||||||
for (int r=0; r<10; r++) {
|
for (int r=0; r<10; r++) {
|
||||||
CellRangeAddress region = new CellRangeAddress(r, r, 0, 1);
|
CellRangeAddress region = new CellRangeAddress(r, r, 0, 1);
|
||||||
mergedRegions.put(r, region);
|
mergedRegions.put(r, region);
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(r, sheet.addMergedRegion(region));
|
||||||
}
|
}
|
||||||
assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions());
|
assertCollectionEquals(mergedRegions.values(), sheet.getMergedRegions());
|
||||||
|
|
||||||
@ -466,7 +466,7 @@ public abstract class BaseTestSheet {
|
|||||||
cell.setCellValue(factory.createRichTextString("second row, second cell"));
|
cell.setCellValue(factory.createRichTextString("second row, second cell"));
|
||||||
|
|
||||||
CellRangeAddress region = CellRangeAddress.valueOf("A2:B2");
|
CellRangeAddress region = CellRangeAddress.valueOf("A2:B2");
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
|
|
||||||
sheet.shiftRows(1, 1, 1);
|
sheet.shiftRows(1, 1, 1);
|
||||||
|
|
||||||
@ -495,13 +495,13 @@ public abstract class BaseTestSheet {
|
|||||||
assumeTrue(region1.intersects(region2));
|
assumeTrue(region1.intersects(region2));
|
||||||
assumeTrue(region2.intersects(region3));
|
assumeTrue(region2.intersects(region3));
|
||||||
|
|
||||||
sh.addMergedRegionUnsafe(region1);
|
assertEquals(0, sh.addMergedRegionUnsafe(region1));
|
||||||
assertTrue(sh.getMergedRegions().contains(region1));
|
assertTrue(sh.getMergedRegions().contains(region1));
|
||||||
|
|
||||||
// adding a duplicate or overlapping merged region should not
|
// adding a duplicate or overlapping merged region should not
|
||||||
// raise an exception with the unsafe version of addMergedRegion.
|
// raise an exception with the unsafe version of addMergedRegion.
|
||||||
|
|
||||||
sh.addMergedRegionUnsafe(region2);
|
assertEquals(1, sh.addMergedRegionUnsafe(region2));
|
||||||
|
|
||||||
// the safe version of addMergedRegion should throw when trying to add a merged region that overlaps an existing region
|
// the safe version of addMergedRegion should throw when trying to add a merged region that overlaps an existing region
|
||||||
assertTrue(sh.getMergedRegions().contains(region2));
|
assertTrue(sh.getMergedRegions().contains(region2));
|
||||||
@ -513,7 +513,7 @@ public abstract class BaseTestSheet {
|
|||||||
assertFalse(sh.getMergedRegions().contains(region3));
|
assertFalse(sh.getMergedRegions().contains(region3));
|
||||||
}
|
}
|
||||||
// addMergedRegion should not re-validate previously-added merged regions
|
// addMergedRegion should not re-validate previously-added merged regions
|
||||||
sh.addMergedRegion(region4);
|
assertEquals(2, sh.addMergedRegion(region4));
|
||||||
|
|
||||||
// validation methods should detect a problem with previously added merged regions (runs in O(n^2) time)
|
// validation methods should detect a problem with previously added merged regions (runs in O(n^2) time)
|
||||||
try {
|
try {
|
||||||
@ -534,10 +534,10 @@ public abstract class BaseTestSheet {
|
|||||||
Workbook wb1 = _testDataProvider.createWorkbook();
|
Workbook wb1 = _testDataProvider.createWorkbook();
|
||||||
Sheet sheet = wb1.createSheet();
|
Sheet sheet = wb1.createSheet();
|
||||||
|
|
||||||
assertEquals(sheet.isDisplayGridlines(), true);
|
assertTrue(sheet.isDisplayGridlines());
|
||||||
assertEquals(sheet.isDisplayRowColHeadings(), true);
|
assertTrue(sheet.isDisplayRowColHeadings());
|
||||||
assertEquals(sheet.isDisplayFormulas(), false);
|
assertFalse(sheet.isDisplayFormulas());
|
||||||
assertEquals(sheet.isDisplayZeros(), true);
|
assertTrue(sheet.isDisplayZeros());
|
||||||
|
|
||||||
sheet.setDisplayGridlines(false);
|
sheet.setDisplayGridlines(false);
|
||||||
sheet.setDisplayRowColHeadings(false);
|
sheet.setDisplayRowColHeadings(false);
|
||||||
@ -548,10 +548,10 @@ public abstract class BaseTestSheet {
|
|||||||
wb1.close();
|
wb1.close();
|
||||||
sheet = wb2.getSheetAt(0);
|
sheet = wb2.getSheetAt(0);
|
||||||
|
|
||||||
assertEquals(sheet.isDisplayGridlines(), false);
|
assertFalse(sheet.isDisplayGridlines());
|
||||||
assertEquals(sheet.isDisplayRowColHeadings(), false);
|
assertFalse(sheet.isDisplayRowColHeadings());
|
||||||
assertEquals(sheet.isDisplayFormulas(), true);
|
assertTrue(sheet.isDisplayFormulas());
|
||||||
assertEquals(sheet.isDisplayZeros(), false);
|
assertFalse(sheet.isDisplayZeros());
|
||||||
|
|
||||||
wb2.close();
|
wb2.close();
|
||||||
}
|
}
|
||||||
@ -1151,15 +1151,14 @@ public abstract class BaseTestSheet {
|
|||||||
|
|
||||||
workbook.close();
|
workbook.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getCellComments() throws IOException {
|
public void getCellComments() throws IOException {
|
||||||
Workbook workbook = _testDataProvider.createWorkbook();
|
Workbook workbook = _testDataProvider.createWorkbook();
|
||||||
Sheet sheet = workbook.createSheet("TEST");
|
Sheet sheet = workbook.createSheet("TEST");
|
||||||
|
|
||||||
// a sheet with no cell comments should return an empty map (not null or raise NPE).
|
// a sheet with no cell comments should return an empty map (not null or raise NPE).
|
||||||
assertEquals(Collections.emptyMap(), sheet.getCellComments());
|
assertTrue(sheet.getCellComments().isEmpty());
|
||||||
|
|
||||||
Drawing<?> dg = sheet.createDrawingPatriarch();
|
Drawing<?> dg = sheet.createDrawingPatriarch();
|
||||||
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
|
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
|
||||||
@ -1223,13 +1222,13 @@ public abstract class BaseTestSheet {
|
|||||||
CellAddress B6 = new CellAddress(5, 1);
|
CellAddress B6 = new CellAddress(5, 1);
|
||||||
assertEquals("row, col", hyperlink, sheet.getHyperlink(5, 1));
|
assertEquals("row, col", hyperlink, sheet.getHyperlink(5, 1));
|
||||||
assertEquals("addr", hyperlink, sheet.getHyperlink(B6));
|
assertEquals("addr", hyperlink, sheet.getHyperlink(B6));
|
||||||
assertEquals("no hyperlink at A1", null, sheet.getHyperlink(CellAddress.A1));
|
assertNull("no hyperlink at A1", sheet.getHyperlink(CellAddress.A1));
|
||||||
|
|
||||||
workbook.close();
|
workbook.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void removeAllHyperlinks() throws IOException {
|
public void removeAllHyperlinks() {
|
||||||
Workbook workbook = _testDataProvider.createWorkbook();
|
Workbook workbook = _testDataProvider.createWorkbook();
|
||||||
Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
|
Hyperlink hyperlink = workbook.getCreationHelper().createHyperlink(HyperlinkType.URL);
|
||||||
hyperlink.setAddress("https://poi.apache.org/");
|
hyperlink.setAddress("https://poi.apache.org/");
|
||||||
@ -1257,7 +1256,7 @@ public abstract class BaseTestSheet {
|
|||||||
Workbook workbook = _testDataProvider.createWorkbook();
|
Workbook workbook = _testDataProvider.createWorkbook();
|
||||||
Sheet sheet = workbook.createSheet();
|
Sheet sheet = workbook.createSheet();
|
||||||
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
CellRangeAddress region = CellRangeAddress.valueOf("B2:D4");
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString());
|
||||||
assertEquals(1, sheet.getNumMergedRegions());
|
assertEquals(1, sheet.getNumMergedRegions());
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ public abstract class BaseTestSheetAutosizeColumn {
|
|||||||
trackColumnsForAutoSizingIfSXSSF(sheet);
|
trackColumnsForAutoSizingIfSXSSF(sheet);
|
||||||
Row row = sheet.createRow(0);
|
Row row = sheet.createRow(0);
|
||||||
|
|
||||||
Font defaultFont = workbook.getFontAt((short)0);
|
Font defaultFont = workbook.getFontAt(0);
|
||||||
|
|
||||||
CellStyle style1 = workbook.createCellStyle();
|
CellStyle style1 = workbook.createCellStyle();
|
||||||
Font font1 = workbook.createFont();
|
Font font1 = workbook.createFont();
|
||||||
@ -276,7 +276,7 @@ public abstract class BaseTestSheetAutosizeColumn {
|
|||||||
trackColumnsForAutoSizingIfSXSSF(sheet);
|
trackColumnsForAutoSizingIfSXSSF(sheet);
|
||||||
|
|
||||||
Row row = sheet.createRow(0);
|
Row row = sheet.createRow(0);
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("A1:B1"));
|
assertEquals(0, sheet.addMergedRegion(CellRangeAddress.valueOf("A1:B1")));
|
||||||
|
|
||||||
Cell cell0 = row.createCell(0);
|
Cell cell0 = row.createCell(0);
|
||||||
cell0.setCellValue("Apache Software Foundation");
|
cell0.setCellValue("Apache Software Foundation");
|
||||||
@ -292,7 +292,6 @@ public abstract class BaseTestSheetAutosizeColumn {
|
|||||||
workbook.close();
|
workbook.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auto-Sizing a column needs to work when we have rows
|
* Auto-Sizing a column needs to work when we have rows
|
||||||
* passed the 32767 boundary. See bug #48079
|
* passed the 32767 boundary. See bug #48079
|
||||||
@ -354,8 +353,8 @@ public abstract class BaseTestSheetAutosizeColumn {
|
|||||||
|
|
||||||
protected static void fixFonts(Workbook workbook) {
|
protected static void fixFonts(Workbook workbook) {
|
||||||
if (!JvmBugs.hasLineBreakMeasurerBug()) return;
|
if (!JvmBugs.hasLineBreakMeasurerBug()) return;
|
||||||
for (int i=workbook.getNumberOfFonts()-1; i>=0; i--) {
|
for (int i=workbook.getNumberOfFontsAsInt()-1; i>=0; i--) {
|
||||||
Font f = workbook.getFontAt((short)0);
|
Font f = workbook.getFontAt(0);
|
||||||
if ("Calibri".equals(f.getFontName())) {
|
if ("Calibri".equals(f.getFontName())) {
|
||||||
f.setFontName("Lucida Sans");
|
f.setFontName("Lucida Sans");
|
||||||
} else if ("Cambria".equals(f.getFontName())) {
|
} else if ("Cambria".equals(f.getFontName())) {
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.apache.poi.ss.usermodel;
|
package org.apache.poi.ss.usermodel;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@ -109,9 +110,9 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
assertEquals("$D1+D$2", formulaD5);
|
assertEquals("$D1+D$2", formulaD5);
|
||||||
|
|
||||||
Cell newb5Null = sheet1.getRow(4).getCell(1);
|
Cell newb5Null = sheet1.getRow(4).getCell(1);
|
||||||
assertEquals(newb5Null, null);
|
assertNull(newb5Null);
|
||||||
boolean logicalValue = sheet1.getRow(6).getCell(2).getBooleanCellValue();
|
boolean logicalValue = sheet1.getRow(6).getCell(2).getBooleanCellValue();
|
||||||
assertEquals(logicalValue, false);
|
assertFalse(logicalValue);
|
||||||
Cell textCell = sheet1.getRow(6).getCell(3);
|
Cell textCell = sheet1.getRow(6).getCell(3);
|
||||||
assertEquals(textCell.getStringCellValue(), "TEXT");
|
assertEquals(textCell.getStringCellValue(), "TEXT");
|
||||||
assertEquals(textCell.getCellStyle().getAlignment(), HorizontalAlignment.CENTER);
|
assertEquals(textCell.getCellStyle().getAlignment(), HorizontalAlignment.CENTER);
|
||||||
@ -134,11 +135,11 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
assertEquals("SUM(A3:E3)", formulaD5);
|
assertEquals("SUM(A3:E3)", formulaD5);
|
||||||
|
|
||||||
Cell b5Null = sheet1.getRow(4).getCell(1);
|
Cell b5Null = sheet1.getRow(4).getCell(1);
|
||||||
assertEquals(b5Null, null);
|
assertNull(b5Null);
|
||||||
Object c6Null = sheet1.getRow(5).getCell(2); // null cell A5 is shifted
|
Object c6Null = sheet1.getRow(5).getCell(2); // null cell A5 is shifted
|
||||||
// for 2 columns, so now
|
// for 2 columns, so now
|
||||||
// c5 should be null
|
// c5 should be null
|
||||||
assertEquals(c6Null, null);
|
assertNull(c6Null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -152,7 +153,7 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
String formulaB5 = sheet1.getRow(4).getCell(1).getCellFormula();
|
String formulaB5 = sheet1.getRow(4).getCell(1).getCellFormula();
|
||||||
assertEquals("$B1+B$2", formulaB5);
|
assertEquals("$B1+B$2", formulaB5);
|
||||||
Cell newb6Null = sheet1.getRow(5).getCell(1);
|
Cell newb6Null = sheet1.getRow(5).getCell(1);
|
||||||
assertEquals(newb6Null, null);
|
assertNull(newb6Null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expected = IllegalStateException.class)
|
@Test(expected = IllegalStateException.class)
|
||||||
@ -264,8 +265,8 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
CellRangeAddress A1_A5 = new CellRangeAddress(0, 4, 0, 0); // NOSONAR, it's more readable this way
|
CellRangeAddress A1_A5 = new CellRangeAddress(0, 4, 0, 0); // NOSONAR, it's more readable this way
|
||||||
CellRangeAddress B1_B3 = new CellRangeAddress(0, 2, 1, 1); // NOSONAR, it's more readable this way
|
CellRangeAddress B1_B3 = new CellRangeAddress(0, 2, 1, 1); // NOSONAR, it's more readable this way
|
||||||
|
|
||||||
sheet.addMergedRegion(B1_B3);
|
assertEquals(0, sheet.addMergedRegion(B1_B3));
|
||||||
sheet.addMergedRegion(A1_A5);
|
assertEquals(1, sheet.addMergedRegion(A1_A5));
|
||||||
|
|
||||||
// A1:A5 should be moved to B1:B5
|
// A1:A5 should be moved to B1:B5
|
||||||
// B1:B3 will be removed
|
// B1:B3 will be removed
|
||||||
@ -285,8 +286,8 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
CellRangeAddress A1_A5 = new CellRangeAddress(0, 4, 0, 0); // NOSONAR, it's more readable this way
|
CellRangeAddress A1_A5 = new CellRangeAddress(0, 4, 0, 0); // NOSONAR, it's more readable this way
|
||||||
CellRangeAddress B1_B3 = new CellRangeAddress(0, 2, 1, 1); // NOSONAR, it's more readable this way
|
CellRangeAddress B1_B3 = new CellRangeAddress(0, 2, 1, 1); // NOSONAR, it's more readable this way
|
||||||
|
|
||||||
sheet.addMergedRegion(A1_A5);
|
assertEquals(0, sheet.addMergedRegion(A1_A5));
|
||||||
sheet.addMergedRegion(B1_B3);
|
assertEquals(1, sheet.addMergedRegion(B1_B3));
|
||||||
|
|
||||||
// A1:E1 should be removed
|
// A1:E1 should be removed
|
||||||
// B1:B3 will be A1:A3
|
// B1:B3 will be A1:A3
|
||||||
@ -320,7 +321,7 @@ public abstract class BaseTestSheetShiftColumns {
|
|||||||
CellRangeAddress region = new CellRangeAddress(0, 2, 0, 0);
|
CellRangeAddress region = new CellRangeAddress(0, 2, 0, 0);
|
||||||
assertEquals("A1:A3", region.formatAsString());
|
assertEquals("A1:A3", region.formatAsString());
|
||||||
|
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
|
|
||||||
sheet.shiftColumns(0, 1, 2);
|
sheet.shiftColumns(0, 1, 2);
|
||||||
region = sheet.getMergedRegion(0);
|
region = sheet.getMergedRegion(0);
|
||||||
|
@ -288,7 +288,7 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress region = new CellRangeAddress(0, 0, 0, 2);
|
CellRangeAddress region = new CellRangeAddress(0, 0, 0, 2);
|
||||||
assertEquals("A1:C1", region.formatAsString());
|
assertEquals("A1:C1", region.formatAsString());
|
||||||
|
|
||||||
sheet.addMergedRegion(region);
|
assertEquals(0, sheet.addMergedRegion(region));
|
||||||
|
|
||||||
sheet.shiftRows(0, 1, 2);
|
sheet.shiftRows(0, 1, 2);
|
||||||
region = sheet.getMergedRegion(0);
|
region = sheet.getMergedRegion(0);
|
||||||
@ -313,9 +313,9 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
|
|
||||||
CellRangeAddress A4_B7 = CellRangeAddress.valueOf("A4:B7");
|
CellRangeAddress A4_B7 = CellRangeAddress.valueOf("A4:B7");
|
||||||
CellRangeAddress C4_D7 = CellRangeAddress.valueOf("C4:D7");
|
CellRangeAddress C4_D7 = CellRangeAddress.valueOf("C4:D7");
|
||||||
|
|
||||||
sheet.addMergedRegion(A4_B7);
|
assertEquals(0, sheet.addMergedRegion(A4_B7));
|
||||||
sheet.addMergedRegion(C4_D7);
|
assertEquals(1, sheet.addMergedRegion(C4_D7));
|
||||||
|
|
||||||
assumeTrue(sheet.getLastRowNum() > 8);
|
assumeTrue(sheet.getLastRowNum() > 8);
|
||||||
|
|
||||||
@ -480,8 +480,9 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
public void testBug55280() throws IOException {
|
public void testBug55280() throws IOException {
|
||||||
Workbook w = _testDataProvider.createWorkbook();
|
Workbook w = _testDataProvider.createWorkbook();
|
||||||
Sheet s = w.createSheet();
|
Sheet s = w.createSheet();
|
||||||
for (int row = 0; row < 5000; ++row)
|
for (int row = 0; row < 5000; ++row) {
|
||||||
s.addMergedRegion(new CellRangeAddress(row, row, 0, 3));
|
assertEquals(row, s.addMergedRegion(new CellRangeAddress(row, row, 0, 3)));
|
||||||
|
}
|
||||||
|
|
||||||
s.shiftRows(0, 4999, 1); // takes a long time...
|
s.shiftRows(0, 4999, 1); // takes a long time...
|
||||||
w.close();
|
w.close();
|
||||||
@ -614,8 +615,8 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress A4_B7 = new CellRangeAddress(3, 6, 0, 1);
|
CellRangeAddress A4_B7 = new CellRangeAddress(3, 6, 0, 1);
|
||||||
CellRangeAddress C5_D7 = new CellRangeAddress(4, 6, 2, 3);
|
CellRangeAddress C5_D7 = new CellRangeAddress(4, 6, 2, 3);
|
||||||
|
|
||||||
sheet.addMergedRegion(A4_B7);
|
assertEquals(0, sheet.addMergedRegion(A4_B7));
|
||||||
sheet.addMergedRegion(C5_D7);
|
assertEquals(1, sheet.addMergedRegion(C5_D7));
|
||||||
|
|
||||||
// A4:B7 will elongate vertically
|
// A4:B7 will elongate vertically
|
||||||
// C5:D7 will be shifted down with same size
|
// C5:D7 will be shifted down with same size
|
||||||
@ -646,8 +647,8 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
||||||
CellRangeAddress A2_C2 = new CellRangeAddress(1, 1, 0, 2);
|
CellRangeAddress A2_C2 = new CellRangeAddress(1, 1, 0, 2);
|
||||||
|
|
||||||
sheet.addMergedRegion(A1_E1);
|
assertEquals(0, sheet.addMergedRegion(A1_E1));
|
||||||
sheet.addMergedRegion(A2_C2);
|
assertEquals(1, sheet.addMergedRegion(A2_C2));
|
||||||
|
|
||||||
// A1:E1 should be removed
|
// A1:E1 should be removed
|
||||||
// A2:C2 will be A1:C1
|
// A2:C2 will be A1:C1
|
||||||
@ -668,8 +669,8 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
||||||
CellRangeAddress A2_C2 = new CellRangeAddress(1, 7, 0, 2);
|
CellRangeAddress A2_C2 = new CellRangeAddress(1, 7, 0, 2);
|
||||||
|
|
||||||
sheet.addMergedRegion(A1_E1);
|
assertEquals(0, sheet.addMergedRegion(A1_E1));
|
||||||
sheet.addMergedRegion(A2_C2);
|
assertEquals(1, sheet.addMergedRegion(A2_C2));
|
||||||
|
|
||||||
// A1:E1 should move to A5:E5
|
// A1:E1 should move to A5:E5
|
||||||
// A2:C2 should be removed
|
// A2:C2 should be removed
|
||||||
@ -691,8 +692,8 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress A8_E8 = new CellRangeAddress(7, 7, 0, 4);
|
CellRangeAddress A8_E8 = new CellRangeAddress(7, 7, 0, 4);
|
||||||
CellRangeAddress A9_C9 = new CellRangeAddress(8, 8, 0, 2);
|
CellRangeAddress A9_C9 = new CellRangeAddress(8, 8, 0, 2);
|
||||||
|
|
||||||
sheet.addMergedRegion(A8_E8);
|
assertEquals(0, sheet.addMergedRegion(A8_E8));
|
||||||
sheet.addMergedRegion(A9_C9);
|
assertEquals(1, sheet.addMergedRegion(A9_C9));
|
||||||
|
|
||||||
// A1:E1 should be removed
|
// A1:E1 should be removed
|
||||||
// A2:C2 will be A1:C1
|
// A2:C2 will be A1:C1
|
||||||
@ -727,8 +728,8 @@ public abstract class BaseTestSheetShiftRows {
|
|||||||
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
CellRangeAddress A1_E1 = new CellRangeAddress(0, 0, 0, 4);
|
||||||
CellRangeAddress A2_C2 = new CellRangeAddress(1, 1, 0, 2);
|
CellRangeAddress A2_C2 = new CellRangeAddress(1, 1, 0, 2);
|
||||||
|
|
||||||
sheet.addMergedRegion(A1_E1);
|
assertEquals(0, sheet.addMergedRegion(A1_E1));
|
||||||
sheet.addMergedRegion(A2_C2);
|
assertEquals(1, sheet.addMergedRegion(A2_C2));
|
||||||
|
|
||||||
// A1:E1 should be moved to A2:E2
|
// A1:E1 should be moved to A2:E2
|
||||||
// A2:C2 will be removed
|
// A2:C2 will be removed
|
||||||
|
@ -480,7 +480,7 @@ public abstract class BaseTestSheetUpdateArrayFormulas {
|
|||||||
CellRange<? extends Cell> srange =
|
CellRange<? extends Cell> srange =
|
||||||
sheet.setArrayFormula("SUM(A4:A6,B4:B6)", CellRangeAddress.valueOf("B5"));
|
sheet.setArrayFormula("SUM(A4:A6,B4:B6)", CellRangeAddress.valueOf("B5"));
|
||||||
Cell scell = srange.getTopLeftCell();
|
Cell scell = srange.getTopLeftCell();
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("B5:C6"));
|
assertEquals(0, sheet.addMergedRegion(CellRangeAddress.valueOf("B5:C6")));
|
||||||
//we are still an array formula
|
//we are still an array formula
|
||||||
assertEquals(CellType.FORMULA, scell.getCellType());
|
assertEquals(CellType.FORMULA, scell.getCellType());
|
||||||
assertTrue(scell.isPartOfArrayFormulaGroup());
|
assertTrue(scell.isPartOfArrayFormulaGroup());
|
||||||
@ -595,7 +595,7 @@ public abstract class BaseTestSheetUpdateArrayFormulas {
|
|||||||
Sheet sheet = workbook.createSheet();
|
Sheet sheet = workbook.createSheet();
|
||||||
|
|
||||||
CellRangeAddress mergedRegion = CellRangeAddress.valueOf("B2:C2");
|
CellRangeAddress mergedRegion = CellRangeAddress.valueOf("B2:C2");
|
||||||
sheet.addMergedRegion(mergedRegion);
|
assertEquals(0, sheet.addMergedRegion(mergedRegion));
|
||||||
CellRangeAddress arrayFormula = CellRangeAddress.valueOf("C1:C3");
|
CellRangeAddress arrayFormula = CellRangeAddress.valueOf("C1:C3");
|
||||||
assumeTrue(mergedRegion.intersects(arrayFormula));
|
assumeTrue(mergedRegion.intersects(arrayFormula));
|
||||||
assumeTrue(arrayFormula.intersects(mergedRegion));
|
assumeTrue(arrayFormula.intersects(mergedRegion));
|
||||||
|
@ -482,8 +482,8 @@ public abstract class BaseTestWorkbook {
|
|||||||
Sheet sheet = book.createSheet("TEST");
|
Sheet sheet = book.createSheet("TEST");
|
||||||
sheet.createRow(0).createCell(0).setCellValue("Test");
|
sheet.createRow(0).createCell(0).setCellValue("Test");
|
||||||
sheet.createRow(1).createCell(0).setCellValue(36.6);
|
sheet.createRow(1).createCell(0).setCellValue(36.6);
|
||||||
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2));
|
assertEquals(0, sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)));
|
||||||
sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 2));
|
assertEquals(1, sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 2)));
|
||||||
assertTrue(sheet.isSelected());
|
assertTrue(sheet.isSelected());
|
||||||
|
|
||||||
Sheet clonedSheet = book.cloneSheet(0);
|
Sheet clonedSheet = book.cloneSheet(0);
|
||||||
@ -494,12 +494,12 @@ public abstract class BaseTestWorkbook {
|
|||||||
|
|
||||||
//cloned sheet is a deep copy, adding rows or merged regions in the original does not affect the clone
|
//cloned sheet is a deep copy, adding rows or merged regions in the original does not affect the clone
|
||||||
sheet.createRow(2).createCell(0).setCellValue(1);
|
sheet.createRow(2).createCell(0).setCellValue(1);
|
||||||
sheet.addMergedRegion(new CellRangeAddress(4, 5, 0, 2));
|
assertEquals(2, sheet.addMergedRegion(new CellRangeAddress(4, 5, 0, 2)));
|
||||||
assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
|
assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
|
||||||
assertEquals(2, clonedSheet.getNumMergedRegions());
|
assertEquals(2, clonedSheet.getNumMergedRegions());
|
||||||
|
|
||||||
clonedSheet.createRow(2).createCell(0).setCellValue(1);
|
clonedSheet.createRow(2).createCell(0).setCellValue(1);
|
||||||
clonedSheet.addMergedRegion(new CellRangeAddress(6, 7, 0, 2));
|
assertEquals(2, clonedSheet.addMergedRegion(new CellRangeAddress(6, 7, 0, 2)));
|
||||||
assertEquals(3, clonedSheet.getPhysicalNumberOfRows());
|
assertEquals(3, clonedSheet.getPhysicalNumberOfRows());
|
||||||
assertEquals(3, clonedSheet.getNumMergedRegions());
|
assertEquals(3, clonedSheet.getNumMergedRegions());
|
||||||
book.close();
|
book.close();
|
||||||
|
@ -17,22 +17,26 @@
|
|||||||
|
|
||||||
package org.apache.poi.ss.util;
|
package org.apache.poi.ss.util;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests SheetUtil.
|
* Tests SheetUtil.
|
||||||
*
|
*
|
||||||
* @see org.apache.poi.ss.util.SheetUtil
|
* @see org.apache.poi.ss.util.SheetUtil
|
||||||
*/
|
*/
|
||||||
public final class TestSheetUtil extends TestCase {
|
public final class TestSheetUtil {
|
||||||
|
@Test
|
||||||
public void testCellWithMerges() throws Exception {
|
public void testCellWithMerges() throws Exception {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet s = wb.createSheet();
|
Sheet s = wb.createSheet();
|
||||||
@ -44,39 +48,41 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
Row r3 = s.createRow(2);
|
Row r3 = s.createRow(2);
|
||||||
r3.createCell(0).setCellValue(20);
|
r3.createCell(0).setCellValue(20);
|
||||||
r3.createCell(1).setCellValue(21);
|
r3.createCell(1).setCellValue(21);
|
||||||
|
|
||||||
s.addMergedRegion(new CellRangeAddress(2, 3, 0, 0));
|
assertEquals(0, s.addMergedRegion(new CellRangeAddress(2, 3, 0, 0)));
|
||||||
s.addMergedRegion(new CellRangeAddress(2, 2, 1, 4));
|
assertEquals(1, s.addMergedRegion(new CellRangeAddress(2, 2, 1, 4)));
|
||||||
|
|
||||||
// With a cell that isn't defined, we'll get null
|
// With a cell that isn't defined, we'll get null
|
||||||
assertEquals(null, SheetUtil.getCellWithMerges(s, 0, 0));
|
assertNull(SheetUtil.getCellWithMerges(s, 0, 0));
|
||||||
|
|
||||||
// With a cell that's not in a merged region, we'll get that
|
// With a cell that's not in a merged region, we'll get that
|
||||||
assertEquals(10.0, SheetUtil.getCellWithMerges(s, 1, 0).getNumericCellValue());
|
assertEquals(10.0, SheetUtil.getCellWithMerges(s, 1, 0).getNumericCellValue(), 0.01);
|
||||||
assertEquals(11.0, SheetUtil.getCellWithMerges(s, 1, 1).getNumericCellValue());
|
assertEquals(11.0, SheetUtil.getCellWithMerges(s, 1, 1).getNumericCellValue(), 0.01);
|
||||||
|
|
||||||
// With a cell that's the primary one of a merged region, we get that cell
|
// With a cell that's the primary one of a merged region, we get that cell
|
||||||
assertEquals(20.0, SheetUtil.getCellWithMerges(s, 2, 0).getNumericCellValue());
|
assertEquals(20.0, SheetUtil.getCellWithMerges(s, 2, 0).getNumericCellValue(), 0.01);
|
||||||
assertEquals(21., SheetUtil.getCellWithMerges(s, 2, 1).getNumericCellValue());
|
assertEquals(21., SheetUtil.getCellWithMerges(s, 2, 1).getNumericCellValue(), 0.01);
|
||||||
|
|
||||||
// With a cell elsewhere in the merged region, get top-left
|
// With a cell elsewhere in the merged region, get top-left
|
||||||
assertEquals(20.0, SheetUtil.getCellWithMerges(s, 3, 0).getNumericCellValue());
|
assertEquals(20.0, SheetUtil.getCellWithMerges(s, 3, 0).getNumericCellValue(), 0.01);
|
||||||
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 2).getNumericCellValue());
|
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 2).getNumericCellValue(), 0.01);
|
||||||
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 3).getNumericCellValue());
|
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 3).getNumericCellValue(), 0.01);
|
||||||
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 4).getNumericCellValue());
|
assertEquals(21.0, SheetUtil.getCellWithMerges(s, 2, 4).getNumericCellValue(), 0.01);
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testCanComputeWidthHSSF() throws IOException {
|
public void testCanComputeWidthHSSF() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
|
|
||||||
// cannot check on result because on some machines we get back false here!
|
// cannot check on result because on some machines we get back false here!
|
||||||
SheetUtil.canComputeColumnWidth(wb.getFontAt((short)0));
|
SheetUtil.canComputeColumnWidth(wb.getFontAt(0));
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetCellWidthEmpty() throws IOException {
|
public void testGetCellWidthEmpty() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet sheet = wb.createSheet("sheet");
|
Sheet sheet = wb.createSheet("sheet");
|
||||||
@ -85,11 +91,12 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
|
|
||||||
// no contents: cell.setCellValue("sometext");
|
// no contents: cell.setCellValue("sometext");
|
||||||
|
|
||||||
assertEquals(-1.0, SheetUtil.getCellWidth(cell, 1, null, true));
|
assertEquals(-1.0, SheetUtil.getCellWidth(cell, 1, null, true), 0.01);
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetCellWidthString() throws IOException {
|
public void testGetCellWidthString() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet sheet = wb.createSheet("sheet");
|
Sheet sheet = wb.createSheet("sheet");
|
||||||
@ -103,6 +110,7 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetCellWidthNumber() throws IOException {
|
public void testGetCellWidthNumber() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet sheet = wb.createSheet("sheet");
|
Sheet sheet = wb.createSheet("sheet");
|
||||||
@ -116,6 +124,7 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetCellWidthBoolean() throws IOException {
|
public void testGetCellWidthBoolean() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet sheet = wb.createSheet("sheet");
|
Sheet sheet = wb.createSheet("sheet");
|
||||||
@ -129,6 +138,7 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
public void testGetColumnWidthString() throws IOException {
|
public void testGetColumnWidthString() throws IOException {
|
||||||
Workbook wb = new HSSFWorkbook();
|
Workbook wb = new HSSFWorkbook();
|
||||||
Sheet sheet = wb.createSheet("sheet");
|
Sheet sheet = wb.createSheet("sheet");
|
||||||
@ -142,7 +152,7 @@ public final class TestSheetUtil extends TestCase {
|
|||||||
assertTrue("Having some width for rows with actual cells",
|
assertTrue("Having some width for rows with actual cells",
|
||||||
SheetUtil.getColumnWidth(sheet, 0, true) > 0);
|
SheetUtil.getColumnWidth(sheet, 0, true) > 0);
|
||||||
assertEquals("Not having any widht for rows with all empty cells",
|
assertEquals("Not having any widht for rows with all empty cells",
|
||||||
-1.0, SheetUtil.getColumnWidth(sheet, 0, true, 1, 2));
|
-1.0, SheetUtil.getColumnWidth(sheet, 0, true, 1, 2), 0.01);
|
||||||
|
|
||||||
wb.close();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user