diff --git a/src/java/org/apache/poi/hssf/record/NameRecord.java b/src/java/org/apache/poi/hssf/record/NameRecord.java index 20c5ba43b..96ef8bc7e 100644 --- a/src/java/org/apache/poi/hssf/record/NameRecord.java +++ b/src/java/org/apache/poi/hssf/record/NameRecord.java @@ -507,10 +507,10 @@ public class NameRecord extends Record { String result = ""; if (ptg.getClass() == Area3DPtg.class){ - result = ((Area3DPtg) ptg).getArea(); + result = ((Area3DPtg) ptg).toFormulaString(); } else if (ptg.getClass() == Ref3DPtg.class){ - result = ((Ref3DPtg) ptg).getArea(); + result = ((Ref3DPtg) ptg).toFormulaString(); } return result; diff --git a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java index 3c3aaf352..c68ab7264 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java @@ -266,12 +266,12 @@ public class Area3DPtg extends Ptg } - public String getArea(){ + /*public String getArea(){ RangeAddress ra = new RangeAddress( getFirstColumn(),getFirstRow() + 1, getLastColumn(), getLastRow() + 1); String result = ra.getAddress(); return result; - } + }*/ public void setArea(String ref){ RangeAddress ra = new RangeAddress(ref); diff --git a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java index 885267ecc..b8db3ba66 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java @@ -172,13 +172,13 @@ public class Ref3DPtg extends Ptg { field_3_column = column; } - public String getArea(){ + /* public String getArea(){ RangeAddress ra = new RangeAddress(""); String result = (ra.numTo26Sys(getColumn()) + (getRow() + 1)); return result; - } + }*/ public void setArea(String ref){ RangeAddress ra = new RangeAddress(ref); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java index c4d3fb258..1ca4acfe1 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java @@ -1,170 +1,340 @@ + /* ==================================================================== + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 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 + * . + */ + + package org.apache.poi.hssf.usermodel; + + import org.apache.poi.util.POILogFactory; + import org.apache.poi.hssf.model.Sheet; + import org.apache.poi.hssf.model.Workbook; + import org.apache.poi.hssf.record.*; + import org.apache.poi.hssf.util.Region; + import org.apache.poi.util.POILogger; + + import java.util.Iterator; + import java.util.TreeMap; + import org.apache.poi.hssf.util.RangeAddress; + + /** + * Title: High Level Represantion of Named Range

+ * REFERENCE:

+ * @author Libin Roman (Vista Portal LDT. Developer) + * @version 1.0-pre + */ + + public class HSSFName { + private Workbook book; + private NameRecord name; + + /** Creates new HSSFName - called by HSSFWorkbook to create a sheet from + * scratch. + * + * @see #org.apache.poi.hssf.usermodel.HSSFWorkbook.createName() + * @param name the Name Record + * @param book - lowlevel Workbook object associated with the sheet. + * @param book the Workbook */ + + protected HSSFName(Workbook book, NameRecord name) { + this.book = book; + this.name = name; + } + + /** private default constructor prevents bogus initializationless construction */ + + private HSSFName() { + } + + /** Get the sheets name which this named range is referenced to + * @return sheet name, which this named range refered to + */ + public String getSheetName() { + String result ; + short indexToExternSheet = name.getExternSheetNumber(); + + result = book.findSheetNameFromExternSheet(indexToExternSheet); + + return result; + } + + /** gets the name of the named range + * @return named range name + */ + public String getNameName(){ + String result = name.getNameText(); + + return result; + } + + /** sets the name of the named range + * @param nameName named range name to set + */ + public void setNameName(String nameName){ + name.setNameText(nameName); + name.setNameTextLength((byte)nameName.length()); + } + + /** gets the reference of the named range + * @return reference of the named range + */ + public String getReference() { + Workbook.currentBook.set(book); String result; + - result = getSheetName() + "." + name.getAreaReference(); - + + result = name.getAreaReference(); + + Workbook.currentBook.set(null); + return result; + } + + /** sets the sheet name which this named range referenced to + * @param sheetName the sheet name of the reference + */ - public void setSheetName(String sheetName){ + + private void setSheetName(String sheetName){ + int sheetNumber = book.getSheetIndex(sheetName); + + short externSheetNumber = book.checkExternSheet(sheetNumber); + name.setExternSheetNumber(externSheetNumber); + // name.setIndexToSheet(externSheetNumber); + } - + + + /** sets the reference of this named range + * @param ref the reference to set + */ + public void setReference(String ref){ + RangeAddress ra = new RangeAddress(ref); + + String sheetName = ra.getSheetName(); + + if (ra.hasSheetName()) { + setSheetName(sheetName); + } + + if (ra.getFromCell().equals(ra.getToCell()) == false) { + name.setAreaReference(ra.getFromCell() + ":" + ra.getToCell()); + } else { + name.setAreaReference(ra.getFromCell()); + } + + } + + + } + diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java b/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java index d75cd5100..597e267c4 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java @@ -99,6 +99,16 @@ public class TestNamedRange wb.write(fileOut); fis.close(); 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())); + + } }