You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2014/07/19 21:23:14 UTC

svn commit: r1611949 - in /poi/trunk/src/java/org/apache/poi: hssf/usermodel/HSSFEvaluationWorkbook.java ss/formula/EvaluationWorkbook.java ss/formula/WorkbookEvaluator.java

Author: nick
Date: Sat Jul 19 19:23:13 2014
New Revision: 1611949

URL: http://svn.apache.org/r1611949
Log:
Fix inconsistent indents/whitespace

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

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java?rev=1611949&r1=1611948&r2=1611949&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java Sat Jul 19 19:23:13 2014
@@ -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 HSSFEvaluationWorkboo
     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);
+    }
 
-	/**
-	 * 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);
+    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);
-	}
+        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);
+    }
 
-	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")
+    @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 HSSFEvaluationWorkboo
         }
         return extIx;
     }
-    
-	public SpreadsheetVersion getSpreadsheetVersion(){
-		return SpreadsheetVersion.EXCEL97;
-	}
+
+    public SpreadsheetVersion getSpreadsheetVersion(){
+        return SpreadsheetVersion.EXCEL97;
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java?rev=1611949&r1=1611948&r2=1611949&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java Sat Jul 19 19:23:13 2014
@@ -30,75 +30,75 @@ import org.apache.poi.ss.formula.udf.UDF
  * @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);
-
-	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
+    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);
+
+    /**
+     * 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
      * <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(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;
-
-		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;
-		}
-	}
+    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 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;
+        }
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java?rev=1611949&r1=1611948&r2=1611949&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java Sat Jul 19 19:23:13 2014
@@ -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");
-		}
+   /**
+    * 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() + ")");
-	}
+       throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")");
+    }
 	
     private ValueEval getEvalForNameRecord(EvaluationName nameRecord, OperationEvaluationContext ec) {
         if (nameRecord.isFunctionName()) {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org