]> source.dussan.org Git - poi.git/commitdiff
Fix inconsistent indents/whitespace
authorNick Burch <nick@apache.org>
Sat, 19 Jul 2014 19:23:13 +0000 (19:23 +0000)
committerNick Burch <nick@apache.org>
Sat, 19 Jul 2014 19:23:13 +0000 (19:23 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1611949 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java
src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java
src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java

index 6b8c30dc3980fc9c3faf160d94c73a885b6fa995..199f7ca3c30f510209f4557b0d7ab898aa0e5fef 100644 (file)
@@ -46,33 +46,33 @@ import org.apache.poi.util.POILogger;
  * Internal POI use only
  */
 public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, EvaluationWorkbook, FormulaParsingWorkbook {
-       private static POILogger logger = POILogFactory.getLogger(HSSFEvaluationWorkbook.class);
-       private final HSSFWorkbook _uBook;
-       private final InternalWorkbook _iBook;
-
-       public static HSSFEvaluationWorkbook create(HSSFWorkbook book) {
-               if (book == null) {
-                       return null;
-               }
-               return new HSSFEvaluationWorkbook(book);
-       }
-
-       private HSSFEvaluationWorkbook(HSSFWorkbook book) {
-               _uBook = book;
-               _iBook = book.getWorkbook();
-       }
-
-       public int getExternalSheetIndex(String sheetName) {
-               int sheetIndex = _uBook.getSheetIndex(sheetName);
-               return _iBook.checkExternSheet(sheetIndex);
-       }
-       public int getExternalSheetIndex(String workbookName, String sheetName) {
-               return _iBook.getExternalSheetIndex(workbookName, sheetName);
-       }
-       
-       public Ptg get3DReferencePtg(CellReference cr, SheetIdentifier sheet) {
+    private static POILogger logger = POILogFactory.getLogger(HSSFEvaluationWorkbook.class);
+    private final HSSFWorkbook _uBook;
+    private final InternalWorkbook _iBook;
+
+    public static HSSFEvaluationWorkbook create(HSSFWorkbook book) {
+        if (book == null) {
+            return null;
+        }
+        return new HSSFEvaluationWorkbook(book);
+    }
+
+    private HSSFEvaluationWorkbook(HSSFWorkbook book) {
+        _uBook = book;
+        _iBook = book.getWorkbook();
+    }
+
+    public int getExternalSheetIndex(String sheetName) {
+        int sheetIndex = _uBook.getSheetIndex(sheetName);
+        return _iBook.checkExternSheet(sheetIndex);
+    }
+    public int getExternalSheetIndex(String workbookName, String sheetName) {
+        return _iBook.getExternalSheetIndex(workbookName, sheetName);
+    }
+
+    public Ptg get3DReferencePtg(CellReference cr, SheetIdentifier sheet) {
         int extIx = getSheetExtIx(sheet);
-           return new Ref3DPtg(cr, extIx);
+        return new Ref3DPtg(cr, extIx);
     }
     public Ptg get3DReferencePtg(AreaReference areaRef, SheetIdentifier sheet) {
         int extIx = getSheetExtIx(sheet);
@@ -81,138 +81,137 @@ public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E
     public NameXPtg getNameXPtg(String name, SheetIdentifier sheet) {
         int sheetRefIndex = getSheetExtIx(sheet);
         return _iBook.getNameXPtg(name, sheetRefIndex, _uBook.getUDFFinder());
-       }
-
-       /**
-        * Lookup a named range by its name.
-        *
-        * @param name the name to search
-        * @param sheetIndex  the 0-based index of the sheet this formula belongs to.
-        * The sheet index is required to resolve sheet-level names. <code>-1</code> means workbook-global names
-         */
-       public EvaluationName getName(String name, int sheetIndex) {
-               for(int i=0; i < _iBook.getNumNames(); i++) {
-                       NameRecord nr = _iBook.getNameRecord(i);
-                       if (nr.getSheetNumber() == sheetIndex+1 && name.equalsIgnoreCase(nr.getNameText())) {
-                               return new Name(nr, i);
-                       }
-               }
-               return sheetIndex == -1 ? null : getName(name, -1);
-       }
-
-       public int getSheetIndex(EvaluationSheet evalSheet) {
-               HSSFSheet sheet = ((HSSFEvaluationSheet)evalSheet).getHSSFSheet();
-               return _uBook.getSheetIndex(sheet);
-       }
-       public int getSheetIndex(String sheetName) {
-               return _uBook.getSheetIndex(sheetName);
-       }
-
-       public String getSheetName(int sheetIndex) {
-               return _uBook.getSheetName(sheetIndex);
-       }
-
-       public EvaluationSheet getSheet(int sheetIndex) {
-               return new HSSFEvaluationSheet(_uBook.getSheetAt(sheetIndex));
-       }
-       public int convertFromExternSheetIndex(int externSheetIndex) {
-               return _iBook.getSheetIndexFromExternSheetIndex(externSheetIndex);
-       }
-
-       public ExternalSheet getExternalSheet(int externSheetIndex) {
-           ExternalSheet sheet = _iBook.getExternalSheet(externSheetIndex);
-           if (sheet == null) {
-               // Try to treat it as a local sheet
-               int localSheetIndex = convertFromExternSheetIndex(externSheetIndex);
+    }
+
+    /**
+     * Lookup a named range by its name.
+     *
+     * @param name the name to search
+     * @param sheetIndex  the 0-based index of the sheet this formula belongs to.
+     * The sheet index is required to resolve sheet-level names. <code>-1</code> means workbook-global names
+     */
+    public EvaluationName getName(String name, int sheetIndex) {
+        for(int i=0; i < _iBook.getNumNames(); i++) {
+            NameRecord nr = _iBook.getNameRecord(i);
+            if (nr.getSheetNumber() == sheetIndex+1 && name.equalsIgnoreCase(nr.getNameText())) {
+                return new Name(nr, i);
+            }
+        }
+        return sheetIndex == -1 ? null : getName(name, -1);
+    }
+
+    public int getSheetIndex(EvaluationSheet evalSheet) {
+        HSSFSheet sheet = ((HSSFEvaluationSheet)evalSheet).getHSSFSheet();
+        return _uBook.getSheetIndex(sheet);
+    }
+    public int getSheetIndex(String sheetName) {
+        return _uBook.getSheetIndex(sheetName);
+    }
+
+    public String getSheetName(int sheetIndex) {
+        return _uBook.getSheetName(sheetIndex);
+    }
+
+    public EvaluationSheet getSheet(int sheetIndex) {
+        return new HSSFEvaluationSheet(_uBook.getSheetAt(sheetIndex));
+    }
+    public int convertFromExternSheetIndex(int externSheetIndex) {
+        return _iBook.getSheetIndexFromExternSheetIndex(externSheetIndex);
+    }
+
+    public ExternalSheet getExternalSheet(int externSheetIndex) {
+        ExternalSheet sheet = _iBook.getExternalSheet(externSheetIndex);
+        if (sheet == null) {
+            // Try to treat it as a local sheet
+            int localSheetIndex = convertFromExternSheetIndex(externSheetIndex);
             if (localSheetIndex == -1) {
                 // The sheet referenced can't be found, sorry
                 return null;
             }
-               if (localSheetIndex == -2) {
-                   // Not actually sheet based at all - is workbook scoped
-                   return null;
-               }
-               // Look up the local sheet
-               String sheetName = getSheetName(localSheetIndex);
-               sheet = new ExternalSheet(null, sheetName);
-           }
-           return sheet;
-       }
-       public ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber) {
-           throw new IllegalStateException("XSSF-style external references are not supported for HSSF");
+            if (localSheetIndex == -2) {
+                // Not actually sheet based at all - is workbook scoped
+                return null;
+            }
+            // Look up the local sheet
+            String sheetName = getSheetName(localSheetIndex);
+            sheet = new ExternalSheet(null, sheetName);
+        }
+        return sheet;
+    }
+    public ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber) {
+        throw new IllegalStateException("XSSF-style external references are not supported for HSSF");
     }
 
     public ExternalName getExternalName(int externSheetIndex, int externNameIndex) {
-               return _iBook.getExternalName(externSheetIndex, externNameIndex);
-       }
-
-       public String resolveNameXText(NameXPtg n) {
-               return _iBook.resolveNameXText(n.getSheetRefIndex(), n.getNameIndex());
-       }
-
-       public String getSheetNameByExternSheet(int externSheetIndex) {
-               return _iBook.findSheetNameFromExternSheet(externSheetIndex);
-       }
-       public String getNameText(NamePtg namePtg) {
-               return _iBook.getNameRecord(namePtg.getIndex()).getNameText();
-       }
-       public EvaluationName getName(NamePtg namePtg) {
-               int ix = namePtg.getIndex();
-               return new Name(_iBook.getNameRecord(ix), ix);
-       }
-       
-       @SuppressWarnings("unused")
+        return _iBook.getExternalName(externSheetIndex, externNameIndex);
+    }
+
+    public String resolveNameXText(NameXPtg n) {
+        return _iBook.resolveNameXText(n.getSheetRefIndex(), n.getNameIndex());
+    }
+
+    public String getSheetNameByExternSheet(int externSheetIndex) {
+        return _iBook.findSheetNameFromExternSheet(externSheetIndex);
+    }
+    public String getNameText(NamePtg namePtg) {
+        return _iBook.getNameRecord(namePtg.getIndex()).getNameText();
+    }
+    public EvaluationName getName(NamePtg namePtg) {
+        int ix = namePtg.getIndex();
+        return new Name(_iBook.getNameRecord(ix), ix);
+    }
+
+    @SuppressWarnings("unused")
     public Ptg[] getFormulaTokens(EvaluationCell evalCell) {
-               HSSFCell cell = ((HSSFEvaluationCell)evalCell).getHSSFCell();
-               if (false) {
-                       // re-parsing the formula text also works, but is a waste of time
-                       // It is useful from time to time to run all unit tests with this code
-                       // to make sure that all formulas POI can evaluate can also be parsed.
-                       try {
-                               return HSSFFormulaParser.parse(cell.getCellFormula(), _uBook, FormulaType.CELL, _uBook.getSheetIndex(cell.getSheet()));
-                       } catch (FormulaParseException e) {
-                               // Note - as of Bugzilla 48036 (svn r828244, r828247) POI is capable of evaluating
-                               // IntesectionPtg.  However it is still not capable of parsing it.
-                               // So FormulaEvalTestData.xls now contains a few formulas that produce errors here.
-                               logger.log( POILogger.ERROR, e.getMessage());
-                       }
-               }
-               FormulaRecordAggregate fra = (FormulaRecordAggregate) cell.getCellValueRecord();
-               return fra.getFormulaTokens();
-       }
-       
+        HSSFCell cell = ((HSSFEvaluationCell)evalCell).getHSSFCell();
+        if (false) {
+            // re-parsing the formula text also works, but is a waste of time
+            // It is useful from time to time to run all unit tests with this code
+            // to make sure that all formulas POI can evaluate can also be parsed.
+            try {
+                return HSSFFormulaParser.parse(cell.getCellFormula(), _uBook, FormulaType.CELL, _uBook.getSheetIndex(cell.getSheet()));
+            } catch (FormulaParseException e) {
+                // Note - as of Bugzilla 48036 (svn r828244, r828247) POI is capable of evaluating
+                // IntesectionPtg.  However it is still not capable of parsing it.
+                // So FormulaEvalTestData.xls now contains a few formulas that produce errors here.
+                logger.log( POILogger.ERROR, e.getMessage());
+            }
+        }
+        FormulaRecordAggregate fra = (FormulaRecordAggregate) cell.getCellValueRecord();
+        return fra.getFormulaTokens();
+    }
+
     public UDFFinder getUDFFinder(){
         return _uBook.getUDFFinder();
     }
 
-       private static final class Name implements EvaluationName {
-
-               private final NameRecord _nameRecord;
-               private final int _index;
-
-               public Name(NameRecord nameRecord, int index) {
-                       _nameRecord = nameRecord;
-                       _index = index;
-               }
-               public Ptg[] getNameDefinition() {
-                       return _nameRecord.getNameDefinition();
-               }
-               public String getNameText() {
-                       return _nameRecord.getNameText();
-               }
-               public boolean hasFormula() {
-                       return _nameRecord.hasFormula();
-               }
-               public boolean isFunctionName() {
-                       return _nameRecord.isFunctionName();
-               }
-               public boolean isRange() {
-                       return _nameRecord.hasFormula(); // TODO - is this right?
-               }
-               public NamePtg createPtg() {
-                       return new NamePtg(_index);
-               }
-       }
+    private static final class Name implements EvaluationName {
+        private final NameRecord _nameRecord;
+        private final int _index;
+
+        public Name(NameRecord nameRecord, int index) {
+            _nameRecord = nameRecord;
+            _index = index;
+        }
+        public Ptg[] getNameDefinition() {
+            return _nameRecord.getNameDefinition();
+        }
+        public String getNameText() {
+            return _nameRecord.getNameText();
+        }
+        public boolean hasFormula() {
+            return _nameRecord.hasFormula();
+        }
+        public boolean isFunctionName() {
+            return _nameRecord.isFunctionName();
+        }
+        public boolean isRange() {
+            return _nameRecord.hasFormula(); // TODO - is this right?
+        }
+        public NamePtg createPtg() {
+            return new NamePtg(_index);
+        }
+    }
 
     private int getSheetExtIx(SheetIdentifier sheetIden) {
         int extIx;
@@ -228,8 +227,8 @@ public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E
         }
         return extIx;
     }
-    
-       public SpreadsheetVersion getSpreadsheetVersion(){
-               return SpreadsheetVersion.EXCEL97;
-       }
+
+    public SpreadsheetVersion getSpreadsheetVersion(){
+        return SpreadsheetVersion.EXCEL97;
+    }
 }
index ca87e313a36c7144244443ef3acb615aa3eb0dd1..f91dacf0de853fdd1a1eebe56b2e96cb54132486 100644 (file)
@@ -30,75 +30,75 @@ import org.apache.poi.ss.formula.udf.UDFFinder;
  * @author Josh Micich
  */
 public interface EvaluationWorkbook {
-       String getSheetName(int sheetIndex);
-       /**
-        * @return -1 if the specified sheet is from a different book
-        */
-       int getSheetIndex(EvaluationSheet sheet);
-       /**
-        * Finds a sheet index by case insensitive name.
-        * @return the index of the sheet matching the specified name.  -1 if not found
-        */
-       int getSheetIndex(String sheetName);
+    String getSheetName(int sheetIndex);
+    /**
+     * @return -1 if the specified sheet is from a different book
+     */
+    int getSheetIndex(EvaluationSheet sheet);
+    /**
+     * Finds a sheet index by case insensitive name.
+     * @return the index of the sheet matching the specified name.  -1 if not found
+     */
+    int getSheetIndex(String sheetName);
 
-       EvaluationSheet getSheet(int sheetIndex);
+    EvaluationSheet getSheet(int sheetIndex);
 
-       /**
-        * HSSF Only - fetch the external-style sheet details
-        * <p>Return will have no workbook set if it's actually in our own workbook</p>
-        */
-       ExternalSheet getExternalSheet(int externSheetIndex);
-       /**
-        * XSSF Only - fetch the external-style sheet details
+    /**
+     * HSSF Only - fetch the external-style sheet details
      * <p>Return will have no workbook set if it's actually in our own workbook</p>
-        */
-       ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber);
-       /**
-        * HSSF Only - convert an external sheet index to an internal sheet index,
-        *  for an external-style reference to one of this workbook's own sheets 
-        */
-       int convertFromExternSheetIndex(int externSheetIndex);
-       
-       ExternalName getExternalName(int externSheetIndex, int externNameIndex);
-       EvaluationName getName(NamePtg namePtg);
+     */
+    ExternalSheet getExternalSheet(int externSheetIndex);
+    /**
+     * XSSF Only - fetch the external-style sheet details
+     * <p>Return will have no workbook set if it's actually in our own workbook</p>
+     */
+    ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber);
+    /**
+     * HSSF Only - convert an external sheet index to an internal sheet index,
+     *  for an external-style reference to one of this workbook's own sheets 
+     */
+    int convertFromExternSheetIndex(int externSheetIndex);
+
+    ExternalName getExternalName(int externSheetIndex, int externNameIndex);
+    EvaluationName getName(NamePtg namePtg);
     EvaluationName getName(String name, int sheetIndex);
-       String resolveNameXText(NameXPtg ptg);
-       Ptg[] getFormulaTokens(EvaluationCell cell);
+    String resolveNameXText(NameXPtg ptg);
+    Ptg[] getFormulaTokens(EvaluationCell cell);
     UDFFinder getUDFFinder();
 
-       class ExternalSheet {
-               private final String _workbookName;
-               private final String _sheetName;
+    class ExternalSheet {
+        private final String _workbookName;
+        private final String _sheetName;
 
-               public ExternalSheet(String workbookName, String sheetName) {
-                       _workbookName = workbookName;
-                       _sheetName = sheetName;
-               }
-               public String getWorkbookName() {
-                       return _workbookName;
-               }
-               public String getSheetName() {
-                       return _sheetName;
-               }
-       }
-       class ExternalName {
-               private final String _nameName;
-               private final int _nameNumber;
-               private final int _ix;
+        public ExternalSheet(String workbookName, String sheetName) {
+            _workbookName = workbookName;
+            _sheetName = sheetName;
+        }
+        public String getWorkbookName() {
+            return _workbookName;
+        }
+        public String getSheetName() {
+            return _sheetName;
+        }
+    }
+    class ExternalName {
+        private final String _nameName;
+        private final int _nameNumber;
+        private final int _ix;
 
-               public ExternalName(String nameName, int nameNumber, int ix) {
-                       _nameName = nameName;
-                       _nameNumber = nameNumber;
-                       _ix = ix;
-               }
-               public String getName() {
-                       return _nameName;
-               }
-               public int getNumber() {
-                       return _nameNumber;
-               }
-               public int getIx() {
-                       return _ix;
-               }
-       }
+        public ExternalName(String nameName, int nameNumber, int ix) {
+            _nameName = nameName;
+            _nameNumber = nameNumber;
+            _ix = ix;
+        }
+        public String getName() {
+            return _nameName;
+        }
+        public int getNumber() {
+            return _nameNumber;
+        }
+        public int getIx() {
+            return _ix;
+        }
+    }
 }
index 3daa8714cc0fd90bf27d1436c328485cfdf6a913..e124278f8e81817eea1475bd2ce28cd76a9fc87a 100644 (file)
@@ -621,90 +621,90 @@ public final class WorkbookEvaluator {
        }
 
 
-       /**
-        * returns an appropriate Eval impl instance for the Ptg. The Ptg must be
-        * one of: Area3DPtg, AreaPtg, ReferencePtg, Ref3DPtg, IntPtg, NumberPtg,
-        * StringPtg, BoolPtg <br/>special Note: OperationPtg subtypes cannot be
-        * passed here!
-        */
-       private ValueEval getEvalForPtg(Ptg ptg, OperationEvaluationContext ec) {
-               //  consider converting all these (ptg instanceof XxxPtg) expressions to (ptg.getClass() == XxxPtg.class)
-
-               if (ptg instanceof NamePtg) {
-                       // Named ranges, macro functions
-                       NamePtg namePtg = (NamePtg) ptg;
-                       EvaluationName nameRecord = _workbook.getName(namePtg);
-                       return getEvalForNameRecord(nameRecord, ec);
-               }
-               if (ptg instanceof NameXPtg) {
-                   // Externally defined named ranges or macro functions
-                   NameXPtg nameXPtg = (NameXPtg)ptg;
-                   ValueEval eval = ec.getNameXEval(nameXPtg);
-                   
-                   if (eval instanceof NameXEval) {
-                       // Could not be directly evaluated, so process as a name
-                       return getEvalForNameX(nameXPtg, ec);
-                   } else {
-                       // Use the evaluated version
-                       return eval;
-                   }
-               }
-
-               if (ptg instanceof IntPtg) {
-                       return new NumberEval(((IntPtg)ptg).getValue());
-               }
-               if (ptg instanceof NumberPtg) {
-                       return new NumberEval(((NumberPtg)ptg).getValue());
-               }
-               if (ptg instanceof StringPtg) {
-                       return new StringEval(((StringPtg) ptg).getValue());
-               }
-               if (ptg instanceof BoolPtg) {
-                       return BoolEval.valueOf(((BoolPtg) ptg).getValue());
-               }
-               if (ptg instanceof ErrPtg) {
-                       return ErrorEval.valueOf(((ErrPtg) ptg).getErrorCode());
-               }
-               if (ptg instanceof MissingArgPtg) {
-                       return MissingArgEval.instance;
-               }
-               if (ptg instanceof AreaErrPtg ||ptg instanceof RefErrorPtg
-                               || ptg instanceof DeletedArea3DPtg || ptg instanceof DeletedRef3DPtg) {
-                               return ErrorEval.REF_INVALID;
-               }
-               if (ptg instanceof Ref3DPtg) {
-                       return ec.getRef3DEval((Ref3DPtg)ptg);
-               }
-               if (ptg instanceof Ref3DPxg) {
-            return ec.getRef3DEval((Ref3DPxg)ptg);
-               }
-               if (ptg instanceof Area3DPtg) {
-                       Area3DPtg aptg = (Area3DPtg) ptg;
-                       return ec.getArea3DEval(aptg.getFirstRow(), aptg.getFirstColumn(), aptg.getLastRow(), aptg.getLastColumn(), aptg.getExternSheetIndex());
-               }
-               if (ptg instanceof RefPtg) {
-                       RefPtg rptg = (RefPtg) ptg;
-                       return ec.getRefEval(rptg.getRow(), rptg.getColumn());
-               }
-               if (ptg instanceof AreaPtg) {
-                       AreaPtg aptg = (AreaPtg) ptg;
-                       return ec.getAreaEval(aptg.getFirstRow(), aptg.getFirstColumn(), aptg.getLastRow(), aptg.getLastColumn());
-               }
-
-               if (ptg instanceof UnknownPtg) {
-                       // POI uses UnknownPtg when the encoded Ptg array seems to be corrupted.
-                       // This seems to occur in very rare cases (e.g. unused name formulas in bug 44774, attachment 21790)
-                       // In any case, formulas are re-parsed before execution, so UnknownPtg should not get here
-                       throw new RuntimeException("UnknownPtg not allowed");
-               }
-               if (ptg instanceof ExpPtg) {
-                       // ExpPtg is used for array formulas and shared formulas.
-                       // it is currently unsupported, and may not even get implemented here
-                       throw new RuntimeException("ExpPtg currently not supported");
-               }
-
-               throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")");
-       }
+   /**
+    * returns an appropriate Eval impl instance for the Ptg. The Ptg must be
+    * one of: Area3DPtg, AreaPtg, ReferencePtg, Ref3DPtg, IntPtg, NumberPtg,
+    * StringPtg, BoolPtg <br/>special Note: OperationPtg subtypes cannot be
+    * passed here!
+    */
+   private ValueEval getEvalForPtg(Ptg ptg, OperationEvaluationContext ec) {
+       //  consider converting all these (ptg instanceof XxxPtg) expressions to (ptg.getClass() == XxxPtg.class)
+
+       if (ptg instanceof NamePtg) {
+           // Named ranges, macro functions
+           NamePtg namePtg = (NamePtg) ptg;
+           EvaluationName nameRecord = _workbook.getName(namePtg);
+           return getEvalForNameRecord(nameRecord, ec);
+       }
+       if (ptg instanceof NameXPtg) {
+           // Externally defined named ranges or macro functions
+           NameXPtg nameXPtg = (NameXPtg)ptg;
+           ValueEval eval = ec.getNameXEval(nameXPtg);
+
+           if (eval instanceof NameXEval) {
+               // Could not be directly evaluated, so process as a name
+               return getEvalForNameX(nameXPtg, ec);
+           } else {
+               // Use the evaluated version
+               return eval;
+           }
+       }
+
+       if (ptg instanceof IntPtg) {
+           return new NumberEval(((IntPtg)ptg).getValue());
+       }
+       if (ptg instanceof NumberPtg) {
+           return new NumberEval(((NumberPtg)ptg).getValue());
+       }
+       if (ptg instanceof StringPtg) {
+           return new StringEval(((StringPtg) ptg).getValue());
+       }
+       if (ptg instanceof BoolPtg) {
+           return BoolEval.valueOf(((BoolPtg) ptg).getValue());
+       }
+       if (ptg instanceof ErrPtg) {
+           return ErrorEval.valueOf(((ErrPtg) ptg).getErrorCode());
+       }
+       if (ptg instanceof MissingArgPtg) {
+           return MissingArgEval.instance;
+       }
+       if (ptg instanceof AreaErrPtg ||ptg instanceof RefErrorPtg
+               || ptg instanceof DeletedArea3DPtg || ptg instanceof DeletedRef3DPtg) {
+           return ErrorEval.REF_INVALID;
+       }
+       if (ptg instanceof Ref3DPtg) {
+           return ec.getRef3DEval((Ref3DPtg)ptg);
+       }
+       if (ptg instanceof Ref3DPxg) {
+           return ec.getRef3DEval((Ref3DPxg)ptg);
+       }
+       if (ptg instanceof Area3DPtg) {
+           Area3DPtg aptg = (Area3DPtg) ptg;
+           return ec.getArea3DEval(aptg.getFirstRow(), aptg.getFirstColumn(), aptg.getLastRow(), aptg.getLastColumn(), aptg.getExternSheetIndex());
+       }
+       if (ptg instanceof RefPtg) {
+           RefPtg rptg = (RefPtg) ptg;
+           return ec.getRefEval(rptg.getRow(), rptg.getColumn());
+       }
+       if (ptg instanceof AreaPtg) {
+           AreaPtg aptg = (AreaPtg) ptg;
+           return ec.getAreaEval(aptg.getFirstRow(), aptg.getFirstColumn(), aptg.getLastRow(), aptg.getLastColumn());
+       }
+
+       if (ptg instanceof UnknownPtg) {
+           // POI uses UnknownPtg when the encoded Ptg array seems to be corrupted.
+           // This seems to occur in very rare cases (e.g. unused name formulas in bug 44774, attachment 21790)
+           // In any case, formulas are re-parsed before execution, so UnknownPtg should not get here
+           throw new RuntimeException("UnknownPtg not allowed");
+       }
+       if (ptg instanceof ExpPtg) {
+           // ExpPtg is used for array formulas and shared formulas.
+           // it is currently unsupported, and may not even get implemented here
+           throw new RuntimeException("ExpPtg currently not supported");
+       }
+
+       throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")");
+    }
        
     private ValueEval getEvalForNameRecord(EvaluationName nameRecord, OperationEvaluationContext ec) {
         if (nameRecord.isFunctionName()) {