]> source.dussan.org Git - poi.git/commitdiff
supporting changes for bug 58452: copy cell formulas containing unregistered function...
authorJaven O'Neal <onealj@apache.org>
Sat, 31 Oct 2015 11:39:01 +0000 (11:39 +0000)
committerJaven O'Neal <onealj@apache.org>
Sat, 31 Oct 2015 11:39:01 +0000 (11:39 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1711600 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java
src/java/org/apache/poi/ss/formula/FormulaParsingWorkbook.java
src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java
src/ooxml/java/org/apache/poi/xssf/usermodel/BaseXSSFEvaluationWorkbook.java
src/ooxml/testcases/org/apache/poi/xssf/XSSFTestDataSamples.java

index 79a59627a0836c417771f0bd5cc2de9e3a1478e9..dbf85b869bcc4a7edbef27613f7930a564891534 100644 (file)
@@ -62,6 +62,11 @@ public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E
         _uBook = book;
         _iBook = book.getWorkbook();
     }
+    
+    @Override
+    public HSSFName createName() {
+        return _uBook.createName();
+    }
 
     public int getExternalSheetIndex(String sheetName) {
         int sheetIndex = _uBook.getSheetIndex(sheetName);
@@ -79,6 +84,10 @@ public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E
         int extIx = getSheetExtIx(sheet);
         return new Area3DPtg(areaRef, extIx);
     }
+    /**
+     * Return an external name (named range, function, user-defined function) Ptg
+     */
+    @Override
     public NameXPtg getNameXPtg(String name, SheetIdentifier sheet) {
         int sheetRefIndex = getSheetExtIx(sheet);
         return _iBook.getNameXPtg(name, sheetRefIndex, _uBook.getUDFFinder());
index a2be6f8f2e0b9113c780648f0cad0f85c3d3300d..fe907fbb1dc5f31d95a540d2bbe2debaa738eaef 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.poi.ss.formula;
 
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.ss.usermodel.Name;
 import org.apache.poi.ss.util.AreaReference;
 import org.apache.poi.ss.util.CellReference;
 
@@ -34,7 +35,15 @@ public interface FormulaParsingWorkbook {
         *  named range name matching is case insensitive
         */
        EvaluationName getName(String name, int sheetIndex);
+       
+       /**
+        * Return the underlying workbook
+        */
+       Name createName();
 
+       /**
+        * Return an external name (named range, function, user-defined function) Ptg
+        */
        Ptg getNameXPtg(String name, SheetIdentifier sheet);
        
        /**
index b1ca488c788536569c4ee04193e3893287f93a03..8969ad47bf9e7a41d494e8e953eb65c3b13811bf 100644 (file)
@@ -40,6 +40,9 @@ public final class NameXPxg extends OperandPtg implements Pxg {
     public NameXPxg(String sheetName, String nameName) {
         this(-1, sheetName, nameName);
     }
+    public NameXPxg(String nameName) {
+        this(-1, null, nameName);
+    }
 
     public String toString(){
         StringBuffer sb = new StringBuffer();
index c8a7fae5265e703c266e7e23ef5f524ee89c7cf5..04b559ba1033d6f0edfe65b267c54c20d55bc26c 100644 (file)
@@ -130,6 +130,15 @@ public abstract class BaseXSSFEvaluationWorkbook implements FormulaRenderingWork
         }
     }
 
+       /**
+        * Return EvaluationName wrapper around the matching XSSFName (named range)
+        * @param name case-aware but case-insensitive named range in workbook
+        * @param sheetIndex index of sheet if named range scope is limited to one sheet
+        *               if named range scope is global to the workbook, sheetIndex is -1.
+        * @return If name is a named range in the workbook, returns
+        *  EvaluationName corresponding to that named range 
+        *  Returns null if there is no named range with the same name and scope in the workbook
+        */
        public EvaluationName getName(String name, int sheetIndex) {
                for (int i = 0; i < _uBook.getNumberOfNames(); i++) {
                        XSSFName nm = _uBook.getNameAt(i);
@@ -137,7 +146,7 @@ public abstract class BaseXSSFEvaluationWorkbook implements FormulaRenderingWork
                        int nameSheetindex = nm.getSheetIndex();
                        if (name.equalsIgnoreCase(nameText) && 
                               (nameSheetindex == -1 || nameSheetindex == sheetIndex)) {
-                               return new Name(_uBook.getNameAt(i), i, this);
+                               return new Name(nm, i, this);
                        }
                }
                return sheetIndex == -1 ? null : getName(name, -1);
@@ -179,6 +188,10 @@ public abstract class BaseXSSFEvaluationWorkbook implements FormulaRenderingWork
            
     }
 
+    /**
+     * Return an external name (named range, function, user-defined function) Pxg
+     */
+    @Override
     public NameXPxg getNameXPtg(String name, SheetIdentifier sheet) {
            // First, try to find it as a User Defined Function
         IndexedUDFFinder udfFinder = (IndexedUDFFinder)getUDFFinder();
@@ -290,6 +303,10 @@ public abstract class BaseXSSFEvaluationWorkbook implements FormulaRenderingWork
                int ix = namePtg.getIndex();
                return new Name(_uBook.getNameAt(ix), ix, this);
        }
+       @Override
+       public XSSFName createName() {
+               return _uBook.createName();
+       }
        
     public UDFFinder getUDFFinder(){
         return _uBook.getUDFFinder();
index 7906759ac9e0fe1728f1ff1411444ca1ec572088..d9dbfbfea6f5f5dcc4a3f6903e1100cf95dccb99 100644 (file)
@@ -44,6 +44,9 @@ public class XSSFTestDataSamples {
     */
    public static final String TEST_OUTPUT_DIR = "poi.test.xssf.output.dir";
 
+   public static File getSampleFile(String sampleFileName) {
+      return HSSFTestDataSamples.getSampleFile(sampleFileName);
+   }
    public static OPCPackage openSamplePackage(String sampleName) {
       try {
          return OPCPackage.open(