134 lines
5.2 KiB
Java
134 lines
5.2 KiB
Java
/* ====================================================================
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==================================================================== */
|
|
|
|
package org.apache.poi.xssf.usermodel;
|
|
|
|
import org.apache.poi.xssf.XSSFTestDataSamples;
|
|
import org.junit.Test;
|
|
import org.apache.poi.xssf.XSSFITestDataProvider;
|
|
|
|
import static org.junit.Assert.*;
|
|
|
|
import org.apache.poi.ss.usermodel.BaseTestNamedRange;
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
|
/**
|
|
* @author Yegor Kozlov
|
|
*/
|
|
public final class TestXSSFName extends BaseTestNamedRange {
|
|
|
|
public TestXSSFName() {
|
|
super(XSSFITestDataProvider.instance);
|
|
}
|
|
|
|
//TODO combine testRepeatingRowsAndColums() for HSSF and XSSF
|
|
@Test
|
|
public void testRepeatingRowsAndColums() throws Exception {
|
|
// First test that setting RR&C for same sheet more than once only creates a
|
|
// single Print_Titles built-in record
|
|
XSSFWorkbook wb = new XSSFWorkbook();
|
|
XSSFSheet sheet1 = wb.createSheet("First Sheet");
|
|
|
|
sheet1.setRepeatingRows(null);
|
|
sheet1.setRepeatingColumns(null);
|
|
|
|
// set repeating rows and columns twice for the first sheet
|
|
for (int i = 0; i < 2; i++) {
|
|
sheet1.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
|
|
sheet1.setRepeatingColumns(CellRangeAddress.valueOf("A:A"));
|
|
//sheet.createFreezePane(0, 3);
|
|
}
|
|
assertEquals(1, wb.getNumberOfNames());
|
|
XSSFName nr1 = wb.getName(XSSFName.BUILTIN_PRINT_TITLE);
|
|
|
|
assertEquals("'First Sheet'!$A:$A,'First Sheet'!$1:$4", nr1.getRefersToFormula());
|
|
|
|
//remove the columns part
|
|
sheet1.setRepeatingColumns(null);
|
|
assertEquals("'First Sheet'!$1:$4", nr1.getRefersToFormula());
|
|
|
|
//revert
|
|
sheet1.setRepeatingColumns(CellRangeAddress.valueOf("A:A"));
|
|
|
|
//remove the rows part
|
|
sheet1.setRepeatingRows(null);
|
|
assertEquals("'First Sheet'!$A:$A", nr1.getRefersToFormula());
|
|
|
|
//revert
|
|
sheet1.setRepeatingRows(CellRangeAddress.valueOf("1:4"));
|
|
|
|
// Save and re-open
|
|
XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
|
|
wb.close();
|
|
|
|
assertEquals(1, nwb.getNumberOfNames());
|
|
nr1 = nwb.getName(XSSFName.BUILTIN_PRINT_TITLE);
|
|
|
|
assertEquals("'First Sheet'!$A:$A,'First Sheet'!$1:$4", nr1.getRefersToFormula());
|
|
|
|
// check that setting RR&C on a second sheet causes a new Print_Titles built-in
|
|
// name to be created
|
|
XSSFSheet sheet2 = nwb.createSheet("SecondSheet");
|
|
sheet2.setRepeatingRows(CellRangeAddress.valueOf("1:1"));
|
|
sheet2.setRepeatingColumns(CellRangeAddress.valueOf("B:C"));
|
|
|
|
assertEquals(2, nwb.getNumberOfNames());
|
|
XSSFName nr2 = nwb.getNames(XSSFName.BUILTIN_PRINT_TITLE).get(1);
|
|
|
|
assertEquals(XSSFName.BUILTIN_PRINT_TITLE, nr2.getNameName());
|
|
assertEquals("SecondSheet!$B:$C,SecondSheet!$1:$1", nr2.getRefersToFormula());
|
|
|
|
sheet2.setRepeatingRows(null);
|
|
sheet2.setRepeatingColumns(null);
|
|
nwb.close();
|
|
}
|
|
|
|
@Test
|
|
public void testSetNameName() throws Exception {
|
|
// Test that renaming named ranges doesn't break our new named range map
|
|
XSSFWorkbook wb = new XSSFWorkbook();
|
|
wb.createSheet("First Sheet");
|
|
|
|
// Two named ranges called "name1", one scoped to sheet1 and one globally
|
|
XSSFName nameSheet1 = wb.createName();
|
|
nameSheet1.setNameName("name1");
|
|
nameSheet1.setRefersToFormula("'First Sheet'!$A$1");
|
|
nameSheet1.setSheetIndex(0);
|
|
|
|
XSSFName nameGlobal = wb.createName();
|
|
nameGlobal.setNameName("name1");
|
|
nameGlobal.setRefersToFormula("'First Sheet'!$B$1");
|
|
|
|
// Rename sheet-scoped name to "name2", check everything is updated properly
|
|
// and that the other name is unaffected
|
|
nameSheet1.setNameName("name2");
|
|
assertEquals(1, wb.getNames("name1").size());
|
|
assertEquals(1, wb.getNames("name2").size());
|
|
assertEquals(nameGlobal, wb.getName("name1"));
|
|
assertEquals(nameSheet1, wb.getName("name2"));
|
|
|
|
// Rename the other name to "name" and check everything again
|
|
nameGlobal.setNameName("name2");
|
|
assertEquals(0, wb.getNames("name1").size());
|
|
assertEquals(2, wb.getNames("name2").size());
|
|
assertTrue(wb.getNames("name2").contains(nameGlobal));
|
|
assertTrue(wb.getNames("name2").contains(nameSheet1));
|
|
|
|
wb.close();
|
|
}
|
|
}
|