同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?こんにちは、
バックグラウンドに隠された複数のテーブルを含むグラフを出力するアドインがあります。
ウィンドウを閉じるときに、次のように「On Close」関数を使用して関連するデータ テーブルを閉じます。
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
問題は、スクリプトを 2 回実行すると、最初の実行の TableA が 2 回目のスクリプト実行中に上書きされてしまうことです。
次のように、スクリプトの起動ごとに作成される一意の ID を使用して問題を回避しようとしました。
NewWindow() << On Close(
For(i = NItems(GetWindowList() << Get Window Title()), i > 0, i--,
win = GetWindow((GetWindowList() << Get Window Title())[i]);
If(Contains(win << get window title, Eval(uniqueID)) != 0,
win << closewindow()
);
)
)
残念ながら同じ問題が残り、UniqueID が上書きされます。
ウィンドウを閉じると正しいテーブルが閉じるように、テーブルを正しく参照する方法はありますか?
よろしくお願いいたします。
自動化とスクリプト作成Re: 同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?クローズ時にテーブルを評価します
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
Re: 同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?仕組み: 元の例では、
New window() << On close(
Close(TableA, nosave);
Close(TableB, nosave);
) ;
TableA と TableB は、テーブルへのポインタを保持する変数です。複数のインスタンスがある場合、変数は割り当てられた最後のインスタンスを指します。
@jthiの例では、
Eval(EvalExpr(
New Window() << On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
));
スクリプトは Eval(EvalExpr( ... Expr(...) ) ) コードによって前処理され、変数をその値に置き換えます。これにより、close() の呼び出しで定数値 (かなり前に変数から取得された値) が使用されるため、スクリプトは変数の現在の変数に依存しなくなります。
読み方: EvalExpr(...) は、Expr(...) の引数を調べて評価し、評価結果を Expr() の代わりに残します。 EvalExpr が完了すると、OnClose(...) メソッドを実行するためにまだ評価する必要がある式が返されます。
Expr(...) マーカーを正しい場所に配置することが重要です。石に投げ込む必要がある部分は変数の値だけです。たとえば、Expr(close(tableA,nosave)) を使用すると、close() 関数の実行が早すぎます。
Re: 同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?すごいですね、ありがとうございます!
Re: 同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?クレイジさん、説明してくれてありがとう、とても役に立ちました!これを一般化して、ウィンドウを閉じると正しいテーブルが閉じられることに満足しています。
おそらく何らかの関連がある問題がまだあります。これらのウィンドウでは、ドリルダウンを可能にするためにメニュースクリプトを設定しましたが、Eval(EvalExpr(...Expr(...))) のおかげで正しい引数を呼び出すようになりました。コード。それにもかかわらず、データ操作の目的でこれらのスクリプト内に変数を定義していますが、上書きを回避する方法がわかりません。これらの変数をこのスクリプトに対してローカルとして宣言する方法はありますか?
例:
Eval(
EvalExpr(
NewWindow("Example", Outline = OutlineBox("Add-ins", Tabs = TabBox())) <<
On close(
Try(Close(Expr(TableA), nosave));
Try(Close(Expr(TableB), nosave));
)
)
);
Outline << Set Menu Script(
{"Script1", Eval(EvalExpr(Add_in_table = Expr(TableA) << Subset(Selected Rows))) ;
// some code
TableD = Add_in_table << Summary(...) ;
Eval(
EvalExpr(
NewWindow(Graph builder()) << OnClose(
Try(Close(Expr(Add_in_table), nosave));
Try(Close(Expr(TableD), nosave));
)
)
)}
);ありがとう
Re: 同じスクリプトを複数回実行するときに、「閉じる時」で正しいテーブルを閉じるにはどうすればよいですか?名前はデフォルトでここに(1); スクリプトの先頭またはウィンドウスコープ(またはボックス)を使用します。スクリプトガイドには、名前空間とスコープに関する情報が記載されています。
左側のメニューから別のページに移動できます

または右上の矢印
