/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache POI" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache POI", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
*
* Addresses Bug #9632 */ public void testNamedRead() throws IOException { FileInputStream fis = null; POIFSFileSystem fs = null; HSSFWorkbook wb = null; String filename = System.getProperty("HSSF.testdata.path"); filename = filename + "/namedinput.xls"; fis = new FileInputStream(filename); fs = new POIFSFileSystem(fis); wb = new HSSFWorkbook(fs); //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); //Getting NAmed Range HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); String sheetName = wb.getSheetName(0); //Getting its reference String reference = namedRange1.getReference(); fis.close(); assertEquals(sheetName+"!$A$1:$D$10", reference); HSSFName namedRange2 = wb.getNameAt(1); assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getReference()); assertEquals("SecondNamedRange", namedRange2.getNameName()); } /** * Reads an excel file already containing a named range and updates it *
* Addresses Bug #16411 */ public void testNamedReadModify() throws IOException { FileInputStream fis = null; POIFSFileSystem fs = null; HSSFWorkbook wb = null; String filename = System.getProperty("HSSF.testdata.path"); filename = filename + "/namedinput.xls"; fis = new FileInputStream(filename); fs = new POIFSFileSystem(fis); wb = new HSSFWorkbook(fs); HSSFName name = wb.getNameAt(0); String sheetName = wb.getSheetName(0); assertEquals(sheetName+"!$A$1:$D$10", name.getReference()); name = wb.getNameAt(1); String newReference = sheetName +"!$A$1:$C$36"; name.setReference(newReference); assertEquals(newReference, name.getReference()); } /** * Test that multiple named ranges can be added written and read */ public void testMultipleNamedWrite() throws IOException { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("Sheet1"); String sheetName = wb.getSheetName(0); assertEquals("Sheet1", sheetName); //Creating new Named Range HSSFName newNamedRange = wb.createName(); newNamedRange.setNameName("RangeTest"); newNamedRange.setReference(sheetName + "!$D$4:$E$8"); //Creating another new Named Range HSSFName newNamedRange2 = wb.createName(); newNamedRange2.setNameName("AnotherTest"); newNamedRange2.setReference(sheetName + "!$F$1:$G$6"); HSSFName namedRange1 = wb.getNameAt(0); String referece = namedRange1.getReference(); File file = File.createTempFile("testMultiNamedRange", ".xls"); FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); assertTrue("file exists",file.exists()); FileInputStream in = new FileInputStream(file); wb = new HSSFWorkbook(in); HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); assertTrue("Reference is "+nm.getReference(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getReference())); nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); assertTrue("Reference is "+nm.getReference(),newNamedRange2.getReference().equals(nm.getReference())); } /** * Test case provided by czhang@cambian.com (Chun Zhang) *
* Addresses Bug #13775 * @throws IOException */ public void testMultiNamedRange() throws IOException { // Create a new workbook HSSFWorkbook wb = new HSSFWorkbook (); // Create a worksheet 'sheet1' in the new workbook wb.createSheet (); wb.setSheetName (0, "sheet1"); // Create another worksheet 'sheet2' in the new workbook wb.createSheet (); wb.setSheetName (1, "sheet2"); // Create a new named range for worksheet 'sheet1' HSSFName namedRange1 = wb.createName(); // Set the name for the named range for worksheet 'sheet1' namedRange1.setNameName("RangeTest1"); // Set the reference for the named range for worksheet 'sheet1' namedRange1.setReference("sheet1" + "!$A$1:$L$41"); // Create a new named range for worksheet 'sheet2' HSSFName namedRange2 = wb.createName(); // Set the name for the named range for worksheet 'sheet2' namedRange2.setNameName("RangeTest2"); // Set the reference for the named range for worksheet 'sheet2' namedRange2.setReference("sheet2" + "!$A$1:$O$21"); // Write the workbook to a file File file = File.createTempFile("testMuiltipletNamedRanges", ".xls"); FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); assertTrue("file exists",file.exists()); // Read the Excel file and verify its content FileInputStream in = new FileInputStream(file); wb = new HSSFWorkbook(in); HSSFName nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); assertTrue("Reference is "+nm1.getReference(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getReference())); HSSFName nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); assertTrue("Reference is "+nm2.getReference(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getReference())); } /** * Test to see if the print areas can be retrieved/created in memory */ public void testSinglePrintArea() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Test Print Area"); String sheetName = workbook.getSheetName(0); String reference = sheetName+"!$A$1:$B$1"; workbook.setPrintArea(0, reference); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertEquals(reference, retrievedPrintArea); } /** * For Convenience, dont force sheet names to be used */ public void testSinglePrintAreaWOSheet() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Test Print Area"); String sheetName = workbook.getSheetName(0); String reference = "$A$1:$B$1"; workbook.setPrintArea(0, reference); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertEquals(sheetName+"!"+reference, retrievedPrintArea); } /** * Test to see if the print area can be retrieved from an excel created file */ public void testPrintAreaFileRead() throws IOException { FileInputStream fis = null; POIFSFileSystem fs = null; HSSFWorkbook workbook = null; String filename = System.getProperty("HSSF.testdata.path"); filename = filename + "/SimpleWithPrintArea.xls"; try { fis = new FileInputStream(filename); fs = new POIFSFileSystem(fis); workbook = new HSSFWorkbook(fs); String sheetName = workbook.getSheetName(0); String reference = sheetName+"!$A$1:$C$5"; assertEquals(reference, workbook.getPrintArea(0)); } finally { fis.close(); } } /** * Test to see if the print area made it to the file */ public void testPrintAreaFile() throws IOException { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Test Print Area"); String sheetName = workbook.getSheetName(0); String reference = sheetName+"!$A$1:$B$1"; workbook.setPrintArea(0, reference); File file = File.createTempFile("testPrintArea",".xls"); FileOutputStream fileOut = new FileOutputStream(file); workbook.write(fileOut); fileOut.close(); assertTrue("file exists",file.exists()); FileInputStream in = new FileInputStream(file); workbook = new HSSFWorkbook(in); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertEquals("References Match", reference, retrievedPrintArea); } /** * Test to see if multiple print areas made it to the file */ public void testMultiplePrintAreaFile() throws IOException { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sheet 1"); sheet = workbook.createSheet("Sheet 2"); sheet = workbook.createSheet("Sheet 3"); String sheetName = workbook.getSheetName(0); String reference = null; reference = sheetName+"!$A$1:$B$1"; workbook.setPrintArea(0, reference); sheetName = workbook.getSheetName(1); String reference2 = sheetName+"!$B$2:$D$5"; workbook.setPrintArea(1, reference2); sheetName = workbook.getSheetName(2); String reference3 = sheetName+"!$D$2:$F$5"; workbook.setPrintArea(2, reference3); File file = File.createTempFile("testMultiPrintArea",".xls"); FileOutputStream fileOut = new FileOutputStream(file); workbook.write(fileOut); fileOut.close(); assertTrue("file exists",file.exists()); FileInputStream in = new FileInputStream(file); workbook = new HSSFWorkbook(in); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); assertEquals(reference, retrievedPrintArea); String retrievedPrintArea2 = workbook.getPrintArea(1); assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea2); assertEquals(reference2, retrievedPrintArea2); String retrievedPrintArea3 = workbook.getPrintArea(2); assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea3); assertEquals(reference3, retrievedPrintArea3); } /** * Tests the setting of print areas with coordinates (Row/Column designations) * */ public void testPrintAreaCoords(){ HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Test Print Area"); String sheetName = workbook.getSheetName(0); String reference = sheetName+"!$A$1:$B$1"; workbook.setPrintArea(0, 0, 1, 0, 0); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertEquals(reference, retrievedPrintArea); } /** * Verifies an existing print area is deleted * */ public void testPrintAreaRemove() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Test Print Area"); String sheetName = workbook.getSheetName(0); String reference = sheetName+"!$A$1:$B$1"; workbook.setPrintArea(0, 0, 1, 0, 0); String retrievedPrintArea = workbook.getPrintArea(0); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); workbook.removePrintArea(0); assertNull("PrintArea was not removed", workbook.getPrintArea(0)); } }