jsl脚本中的公式我有一个单列表格,数据类型为数字,我想添加一列,并添加一个公式,该公式会检查第一列中的每个单元格是否与脚本中传入的变量名相符。
mycol << New Column ("belowCount", Numeric, Formula(If( col_to_check < limit_val, 1, 0 ) );
mycol 是一个单列表格,col_to_check 是引用的第一列,limit_val 是一个变量。
打开表格时,公式无法获取第一列的数据。
我还尝试过使用 Column(1)、Column(1) 以及 Expr 函数,但这些都没有用。
自动化和脚本编写数据访问回复:jsl脚本中的公式正确的语法:
Eval(
Eval Expr(
mycol << New Column( "belowCount",
Numeric,
Formula( If( Expr( Name Expr( As Column( col_to_check ) ) ) < Expr( limit_val ), 1, 0 ) )
)
)
)
回复:jsl脚本中的公式首先,你的示例公式缺少足够的右括号,因此可能会报错。其次,你的“col_to_check”前面可能需要加一个冒号(:),除非它是列的变量名,或者拼写和大小写都完全相同。
以下是我找到的可以实现你想要的功能的方法。我在新列的开头使用了 Eval 和 Eval Expr 函数来计算变量的值,从而创建列。
names default to here(1);
mycol = current data table();
limit_val = 5;
eval(eval expr(mycol << New Column ("belowCount", Numeric, Formula(If( :col_to_check < expr(limit_val), 1, 0 ) ))));
回复:jsl脚本中的公式你需要将变量转换为公式。这仍然是一个不错的参考: 使用 Eval Insert、Eval Expr、Parse 和 Substitute 将一个表达式插入到另一个表达式中(尽管它需要一些更新)。这里有一个使用 Eval(Substitute()) 的选项(对于像这样的简单情况,我会使用 Eval(EvalExpr()),hogi 已经演示过了)。
Names Default To Here(1);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
以及完整示例
Names Default To Here(1);
limit_val = 5;
mycol = New Table("Untitled",
Add Rows(10),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
