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
));
