public final class Calculator extends java.lang.Object implements CalculatorProvider, java.io.Serializable, java.lang.Cloneable
| 限定符和类型 | 类和说明 |
|---|---|
protected static class |
Calculator.NameSpaceChain |
| 限定符和类型 | 字段和说明 |
|---|---|
static CalculatorKey |
SHEET_NUMBER_KEY |
CONTEXT_PATH, ENV_HOME, FORMLET_NAME, FR_HOME, PROJECTNAME, REMOTE_SERVLET_URL, REPORT_NAME, SERVER_NAME, SERVER_PORT, SERVER_SCHEMA, SERVER_URL, SERVLET_URL, SESSION_HEART_BEAT, SESSION_ID| 限定符和类型 | 方法和说明 |
|---|---|
static void |
clearThreadSavedParameter()
清楚所有的保存的线程信息
|
static Calculator |
createCalculator()
alex:返回当前线程正在用的Calculator
一个线程只用一个Calculator,至少线程内的环境在这个Calculator里面共享
不知道会不会有问题,会不会有可能只需要局部的Calculator
|
java.lang.Object |
eval(FormulaProvider obj)
计算给定的公式的值
计算一个公式得到结果:
Calculator ca = Calculator.createCalculator();
System.out.println(ca.eval(new Formula("1 + 2 * 3")));
|
java.lang.Object |
eval(Node obj)
计算给定的函数节点的值
|
java.lang.Object |
eval(java.lang.String obj)
根据obj的类型判断计算方式
如果是单元格,默认计算出来就是单元格,不会取值
|
java.lang.Object |
evalAuth() |
java.lang.Object |
evalValue(FormulaProvider obj)
计算给定公式的结果并使用转换器转换结算结果
|
java.lang.Object |
evalValue(Node obj)
计算给定的函数节点并使用转换器转换结算结果
|
java.lang.Object |
evalValue(java.lang.String obj)
计算给定表达式的结果并使用转换器转换结算结果
|
java.lang.String |
exStatement(ColumnRow currentColumnRow,
java.lang.String statement)
解析表达式
|
<T> T |
getAttribute(CalculatorKey key)
根据指定的属性名获取保存在算子中的属性值
|
<T> T |
getAttribute(java.lang.Class clazz) |
java.sql.Connection |
getConnection(java.lang.String name) |
ColumnRow |
getCurrentColumnRow()
获取在计算中正在使用的格子
|
ColumnRow |
getCurrentFromColumnRow()
已过时。
|
CalculateLocator |
getLocator()
获取计算坐标系
|
java.util.LinkedList |
getNameSpaceList() |
static NameSpace |
getSavedSessionNameSpace() |
static java.util.Map<java.lang.String,java.lang.Object> |
getSavedVariables() |
java.lang.String |
onAddDeleteColumnOrRow(java.lang.String statement,
int rowIndex,
int rowChanged,
int columnIndex,
int colChanged)
alex: 当行列添加时
|
Expression |
parse(java.lang.Object o)
将一个对象解析成函数表达式
|
Expression |
parse(java.lang.String statement)
将字符串解析成函数表达式
|
static ParameterProvider[] |
processParameters(CalculatorProvider calculator,
ParameterProvider[] parameters)
处理参数,将参数值中的公式使用算子做解析得出结果
|
void |
pushNameSpace(NameSpace ns)
将一个名字空间添加到全局名字空间链的头部
添加名字空间(参数名字空间),并根据他计算出结果的例子,计算结果是5:
Calculator ca = Calculator.createCalculator();
Map map = new HashMap();
map.put("p1", 2);
ParameterMapNameSpace space = ParameterMapNameSpace.create(map);
ca.pushNameSpace(space);
System.out.println(ca.eval(new Formula("$p1 + 3")));
|
void |
putConnection(java.lang.String name,
java.sql.Connection conn)
添加连接
|
static void |
putThreadSavedNameSpace(NameSpace ns)
添加线程NameSpace
|
static ColumnRowRange[] |
relatedColumnRowRangeArray(java.lang.String statement)
解析表达式中相关的扩展格子
下面的返回结果是A1行列和C1行列:
Calculator.createCalculator().relatedColumnRowRangeArray("left(A1,2) + 'B1' + C1");
|
static java.lang.String[] |
relatedParameters(java.lang.String statement)
解析给定的表达式中相关的参数
下面的返回结果是"$C1"这个参数名:
Calculator.createCalculator().relatedParameters("left(A1,2) + 'B1' + $C1");
|
void |
remove(java.lang.String name)
在全局名字空间中移除一个值
|
void |
removeAttribute(CalculatorKey key)
移除指定的属性
|
void |
removeConnection(java.lang.String name)
移除连接
|
boolean |
removeNameSpace(NameSpace ns)
从全局名字空间链上移除一个指定的名字空间
|
Function |
resolveMethod(java.lang.Object var)
将表达式转化为一个函数并返回
|
java.lang.Object |
resolveRelateCellElements(ColumnRow cr)
获取指定单元格的关联格子
|
java.lang.Object |
resolveVariable(java.lang.Object var)
将给定的表达式计算出结果
|
java.lang.Object |
resolveVariableInCE(java.lang.Object var)
在单元格范畴内计算表达式的值
|
void |
set(java.lang.String name,
java.lang.Object value)
在全局名字空间中添加一个键值对
|
void |
setAttribute(CalculatorKey key,
java.lang.Object attribute)
添加一个键值对到算子的属性表中
属性不用于计算,添加属性的例子:
StableFactory.registerDefaultNameSpace(DefaultNameSpace.getInstance());
Calculator ca = Calculator.createCalculator();
ca.setAttribute("p1", 2);
ca.getAttribute("p1"); //结果是2
ca.eval(new Formula("$p1 + 3")); //结果是3
|
void |
setAttribute(java.lang.Class clazz,
java.lang.Object attribute)
已过时。
|
void |
setCurrentColumnRow(ColumnRow columnRow)
已过时。
|
void |
setCurrentFromColumnRow(ColumnRow cr)
已过时。
|
static void |
setThreadSavedParameter(java.lang.String name,
java.lang.Object ob)
保存环境变量于ThreadContext
|
public static final CalculatorKey SHEET_NUMBER_KEY
public static Calculator createCalculator()
public static void putThreadSavedNameSpace(NameSpace ns)
ns - 添加的NameSpacepublic static void setThreadSavedParameter(java.lang.String name,
java.lang.Object ob)
name - 环境变量名称ob - 环境变量对象public static void clearThreadSavedParameter()
public static java.util.Map<java.lang.String,java.lang.Object> getSavedVariables()
public static NameSpace getSavedSessionNameSpace()
public static ParameterProvider[] processParameters(CalculatorProvider calculator, ParameterProvider[] parameters)
calculator - 算子parameters - 原始参数public void setAttribute(CalculatorKey key, java.lang.Object attribute)
属性不用于计算,添加属性的例子: StableFactory.registerDefaultNameSpace(DefaultNameSpace.getInstance()); Calculator ca = Calculator.createCalculator(); ca.setAttribute("p1", 2); ca.getAttribute("p1"); //结果是2 ca.eval(new Formula("$p1 + 3")); //结果是3
setAttribute 在接口中 CalculatorProviderkey - 属性名attribute - 属性值@Deprecated
public void setAttribute(java.lang.Class clazz,
java.lang.Object attribute)
setAttribute 在接口中 CalculatorProviderpublic <T> T getAttribute(java.lang.Class clazz)
getAttribute 在接口中 CalculatorProviderpublic <T> T getAttribute(CalculatorKey key)
getAttribute 在接口中 Contextkey - 属性名public void removeAttribute(CalculatorKey key)
removeAttribute 在接口中 CalculatorProviderkey - 要移除的属性对应的属性名public void set(java.lang.String name,
java.lang.Object value)
set 在接口中 CalculatorProvidername - 名字value - 值public void remove(java.lang.String name)
remove 在接口中 CalculatorProvidername - 要移除的值的名字public void pushNameSpace(NameSpace ns)
添加名字空间(参数名字空间),并根据他计算出结果的例子,计算结果是5:
Calculator ca = Calculator.createCalculator(); Map map = new HashMap(); map.put("p1", 2); ParameterMapNameSpace space = ParameterMapNameSpace.create(map); ca.pushNameSpace(space); System.out.println(ca.eval(new Formula("$p1 + 3")));
pushNameSpace 在接口中 CalculatorProviderns - 名字空间public boolean removeNameSpace(NameSpace ns)
removeNameSpace 在接口中 CalculatorProviderns - 要移除的名字空间public java.lang.Object resolveVariable(java.lang.Object var)
resolveVariable 在接口中 CalculatorProvidervar - 要计算的表达式public java.lang.Object resolveVariableInCE(java.lang.Object var)
resolveVariableInCE 在接口中 CalculatorProvidervar - 表达式public Function resolveMethod(java.lang.Object var)
resolveMethod 在接口中 CalculatorProvidervar - 表达式@Deprecated public void setCurrentFromColumnRow(ColumnRow cr)
CalculatorProvidersetCurrentFromColumnRow 在接口中 CalculatorProvider@Deprecated public ColumnRow getCurrentFromColumnRow()
getCurrentFromColumnRow 在接口中 CalculatorProviderpublic java.lang.Object resolveRelateCellElements(ColumnRow cr)
resolveRelateCellElements 在接口中 CalculatorProvidercr - 表示单元格的行列对象public Expression parse(java.lang.Object o) throws com.fr.third.antlr.ANTLRException
parse 在接口中 CalculatorProvidero - 一般对象com.fr.third.antlr.ANTLRException - 如果给定的对象无法正确的解析成函数表达式则抛出此异常public Expression parse(java.lang.String statement) throws com.fr.third.antlr.ANTLRException
parse 在接口中 CalculatorProviderstatement - 待解析的字符串com.fr.third.antlr.ANTLRException - 如果给定的字符串无法正确的解析成函数表达式则抛出此异常public java.lang.Object evalValue(java.lang.String obj)
throws UtilEvalError
evalValue 在接口中 CalculatorProviderobj - 表达式UtilEvalError - 如果表达式无法解析则抛出此异常public java.lang.Object evalValue(FormulaProvider obj) throws UtilEvalError
evalValue 在接口中 CalculatorProviderobj - 公式UtilEvalError - 如果公式无法正确解析则抛出此异常public java.lang.Object evalValue(Node obj) throws UtilEvalError
evalValue 在接口中 CalculatorProviderobj - 函数节点UtilEvalError - 如果无法正确解析该函数节点则抛出此异常public java.lang.Object eval(java.lang.String obj)
throws UtilEvalError
eval 在接口中 CalculatorProviderobj - 待计算的字符串UtilEvalErrorpublic java.lang.Object evalAuth()
public java.lang.Object eval(FormulaProvider obj) throws UtilEvalError
计算一个公式得到结果:
Calculator ca = Calculator.createCalculator(); System.out.println(ca.eval(new Formula("1 + 2 * 3")));
eval 在接口中 CalculatorProviderobj - 公式UtilEvalErrorpublic java.lang.Object eval(Node obj) throws UtilEvalError
eval 在接口中 CalculatorProviderobj - 函数节点UtilEvalErrorpublic static ColumnRowRange[] relatedColumnRowRangeArray(java.lang.String statement) throws com.fr.third.antlr.ANTLRException
下面的返回结果是A1行列和C1行列:
Calculator.createCalculator().relatedColumnRowRangeArray("left(A1,2) + 'B1' + C1");
statement - 给定的表达式com.fr.third.antlr.ANTLRExceptionpublic static java.lang.String[] relatedParameters(java.lang.String statement)
throws com.fr.third.antlr.ANTLRException
下面的返回结果是"$C1"这个参数名:
Calculator.createCalculator().relatedParameters("left(A1,2) + 'B1' + $C1");
statement - 需要解析的表达式com.fr.third.antlr.ANTLRExceptionpublic void putConnection(java.lang.String name,
java.sql.Connection conn)
name - 连接名称conn - 连接public java.sql.Connection getConnection(java.lang.String name)
public void removeConnection(java.lang.String name)
name - 连接名public java.lang.String exStatement(ColumnRow currentColumnRow, java.lang.String statement)
exStatement 在接口中 CalculatorProvidercurrentColumnRow - 当前行列statement - 要执行的语句public CalculateLocator getLocator()
CalculatorProvidergetLocator 在接口中 CalculatorProviderpublic ColumnRow getCurrentColumnRow()
CalculatorProvidergetCurrentColumnRow 在接口中 CalculatorProvider@Deprecated public void setCurrentColumnRow(ColumnRow columnRow)
setCurrentColumnRow 在接口中 CalculatorProviderpublic java.lang.String onAddDeleteColumnOrRow(java.lang.String statement,
int rowIndex,
int rowChanged,
int columnIndex,
int colChanged)
statement - 表达式rowIndex - 行序号rowChanged - 行改变columnIndex - 列序号colChanged - 列改变public java.util.LinkedList getNameSpaceList()