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
+
*
+ * 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())); + + } }