本文整理汇总了C#中NPOI.SS.Formula.ParseNode.GetToken方法的典型用法代码示例。如果您正苦于以下问题:C# ParseNode.GetToken方法的具体用法?C# ParseNode.GetToken怎么用?C# ParseNode.GetToken使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NPOI.SS.Formula.ParseNode
的用法示例。
在下文中一共展示了ParseNode.GetToken方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: IsValidRangeOperand
/**
* @return false if sub-expression represented the specified ParseNode definitely
* cannot appear on either side of the range (':') operator
*/
private bool IsValidRangeOperand(ParseNode a)
{
Ptg tkn = a.GetToken();
// Note - order is important for these instance-of checks
if (tkn is OperandPtg)
{
// notably cell refs and area refs
return true;
}
// next 2 are special cases of OperationPtg
if (tkn is AbstractFunctionPtg)
{
AbstractFunctionPtg afp = (AbstractFunctionPtg)tkn;
byte returnClass = afp.DefaultOperandClass;
return Ptg.CLASS_REF == returnClass;
}
if (tkn is ValueOperatorPtg)
{
return false;
}
if (tkn is OperationPtg)
{
return true;
}
// one special case of ControlPtg
if (tkn is ParenthesisPtg)
{
// parenthesis Ptg should have only one child
return IsValidRangeOperand(a.GetChildren()[0]);
}
// one special case of ScalarConstantPtg
if (tkn == ErrPtg.REF_INVALID)
{
return true;
}
// All other ControlPtgs and ScalarConstantPtgs cannot be used with ':'
return false;
}
示例2: TransformNode
/**
* @param callerForceArrayFlag <c>true</c> if one of the current node's parents is a
* function Ptg which Has been Changed from default 'V' To 'A' type (due To requirements on
* the function return value).
*/
private void TransformNode(ParseNode node, byte desiredOperandClass,
bool callerForceArrayFlag)
{
Ptg token = node.GetToken();
ParseNode[] children = node.GetChildren();
bool IsSimpleValueFunc = IsSimpleValueFunction(token);
if (IsSimpleValueFunc)
{
bool localForceArray = desiredOperandClass == Ptg.CLASS_ARRAY;
for (int i = 0; i < children.Length; i++)
{
TransformNode(children[i], desiredOperandClass, localForceArray);
}
SetSimpleValueFuncClass((AbstractFunctionPtg)token, desiredOperandClass, callerForceArrayFlag);
return;
}
if (token is ValueOperatorPtg || token is ControlPtg
|| token is MemFuncPtg
|| token is MemAreaPtg
|| token is UnionPtg)
{
// Value Operator Ptgs and Control are base Tokens, so Token will be unchanged
// but any child nodes are processed according To desiredOperandClass and callerForceArrayFlag
// As per OOO documentation Sec 3.2.4 "Token Class Transformation", "Step 1"
// All direct operands of value operators that are initially 'R' type will
// be converted To 'V' type.
byte localDesiredOperandClass = desiredOperandClass == Ptg.CLASS_REF ? Ptg.CLASS_VALUE : desiredOperandClass;
for (int i = 0; i < children.Length; i++)
{
TransformNode(children[i], localDesiredOperandClass, callerForceArrayFlag);
}
return;
}
if (token is AbstractFunctionPtg)
{
TransformFunctionNode((AbstractFunctionPtg)token, children, desiredOperandClass, callerForceArrayFlag);
return;
}
if (children.Length > 0)
{
//if (token == RangePtg.instance)
if(token is OperationPtg)
{
// TODO is any Token transformation required under the various ref operators?
return;
}
throw new InvalidOperationException("Node should not have any children");
}
if (token.IsBaseToken)
{
// nothing To do
return;
}
token.PtgClass = (TransformClass(token.PtgClass, desiredOperandClass, callerForceArrayFlag));
}
示例3: NeedsMemFunc
/**
* From OOO doc: "Whenever one operand of the reference subexpression is a function,
* a defined name, a 3D reference, or an external reference (and no error occurs),
* a tMemFunc token is used"
*
*/
private static bool NeedsMemFunc(ParseNode root)
{
Ptg token = root.GetToken();
if (token is AbstractFunctionPtg)
{
return true;
}
if (token is IExternSheetReferenceToken)
{ // 3D refs
return true;
}
if (token is NamePtg || token is NameXPtg)
{ // 3D refs
return true;
}
if (token is OperationPtg || token is ParenthesisPtg)
{
// expect RangePtg, but perhaps also UnionPtg, IntersectionPtg etc
foreach (ParseNode child in root.GetChildren())
{
if (NeedsMemFunc(child))
{
return true;
}
}
return false;
}
if (token is OperandPtg)
{
return false;
}
if (token is OperationPtg)
{
return true;
}
return false;
}