Formule dans un script JSLJ'ai un tableau à une seule colonne de type numérique. Je souhaite ajouter une colonne et y insérer une formule qui vérifiera chaque cellule de la première colonne à l'aide d'une variable dont le nom est passé dans le script.
mycol << Nouvelle colonne ("belowCount", Numérique, Formule(Si( col_à_vérifier < limite_val, 1, 0 ) );
mycol est une table de données à une seule colonne, col_to_check fait référence à la première colonne et limit_val est une variable.
Lorsque j'ouvre le tableau, la formule ne parvient pas à prendre en compte la première colonne.
J'ai également essayé d'utiliser : Column(1), Column(1) et la fonction Expr, mais sans succès.
Automatisation et scriptageAccès aux donnéesRe: Formule dans un script JSLSyntaxe correcte :
Eval(
Eval Expr(
mycol << New Column( "belowCount",
Numeric,
Formula( If( Expr( Name Expr( As Column( col_to_check ) ) ) < Expr( limit_val ), 1, 0 ) )
)
)
)
Re: Formule dans un script JSLPremièrement, votre formule d'exemple ne comportait pas suffisamment de parenthèses fermantes, ce qui peut expliquer l'erreur. Deuxièmement, il manque peut-être un « ":" » devant « col_to_check », à moins qu'il ne s'agisse du nom d'une variable de colonne ou que l'orthographe et la casse soient parfaitement identiques.
Voici la méthode que j'ai utilisée et qui, je pense, correspond à ce que vous recherchez. J'ai utilisé les fonctions Eval et Eval Expr au début de la nouvelle ligne de colonne pour évaluer la variable et créer la colonne.
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 ) ))));
Re: Formule dans un script JSLVous devrez évaluer les variables à l'aide de formules. Cette documentation reste une bonne référence pour insérer une expression dans une autre à l'aide des fonctions EvalInsert, EvalExpr, Parse et Substitute (bien qu'elle mériterait quelques mises à jour). Voici une option utilisant Eval(Substitute()) (pour un cas simple comme celui-ci, j'utiliserais plutôt Eval(EvalExpr()), comme l'a démontré 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
));
Et un exemple complet
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
));
