列切換器適用於所有開啟的報告嗨,大家好,
我正在嘗試編寫一個腳本以將列切換器應用於所有打開的報告。請指導我
dt = Current data Table();
//Get all Open reports
wList = Get Window List( Type( "Reports" ) );
//Get Column to replace and column to replace with
win = New Window( "Set a Value",
<請指導如何執行此操作。 先致謝自動化和腳本編寫
回覆:列切換器適用於所有開啟的報告您希望如何使用 Col 列錶框?列切換器要求您擁有一個列,然後將其變更為其他列(基於列切換器上的列清單),並且該列在開始時的所有報表中應該相同。
回覆:列切換器適用於所有開啟的報告@jthi ,我的錯,我很抱歉..我想用2個colList框代替列切換器更容易,其中用戶選擇要在第一個中替換的列和在第二個中要替換的列..這種方法比較合適嗎
回覆:列切換器適用於所有開啟的報告我想這可能會比較容易。我沒有時間編寫正確的解決方案,但以下是我將如何解決這個問題的想法(使用列切換器來更改您在函數呼叫上創建的列+“請求寬恕,而不是許可”)。它仍然有硬編碼的東西,但我會在今天晚些時候或明天回到它並使其更加健壯,因為這是一個有趣的問題。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Probe.jmp");
dt << Clear Row States;
New Window("",
Lineup box(N Col(2),
dist = dt << Distribution(Continuous Distribution(Column(:DELL_RPNBR))),
dist2 = dt << Distribution(Continuous Distribution(Column(:DELW_M1))),
gb1 = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:Site), Y(:Lot ID)),
Elements(Points(X, Y, Legend(3)))
),
gb2 = dt << Graph Builder(
Size(523, 454),
Show Control Panel(0),
Variables(X(:DELW_M1), Y(:DELL_RPNBR)),
Elements(Points(X, Y, Legend(3)))
)
)
);
nw = New Window("",
H List Box(
Lineup Box(N Col(2),
Panel Box("Select Column to Change",
fcs1 = Filter Col Selector(dt, << Set Max Selected(1))
),
Panel Box("Select New Column",
fcs2 = Filter Col Selector(dt, << Set Max Selected(1))
)
),
Panel Box("Action",
Button Box("Change Columns"),
Button Box("Cancel"),
)
)
);
update_reports = function({dt, report_list, old_col, new_col}, {Default Local},
nw_switcher = New Window("", << Window View("Invisible"),
ref_colswitcher = dt << Column Switcher(:DELL_RPNBR, {:DELW_SICR, :DELL_RPNBR});
);
wait(0);
For Each({report}, report_list,
Try(ref_colswitcher << Link Platform(report));
);
wait(0);
nw_switcher[ListBoxBox(1)] << Set Selected(1);
nw_switcher << Close Window;
);
reports = Eval List({dist, dist2, gb1, gb2});
update_reports(dt, reports, "a", "b");
回覆:列切換器適用於所有開啟的報告似乎有一些不同的錯誤/奇怪的交互,這使得這比我想像的更困難,因為程式碼非常混亂,但它似乎在某種程度上起作用
Names Default To Here(1);
get_reports_for_datatable = function({dt}, {Default Local},
valid_reports = {};
// This might need improvements
report_windows = Get Window List(Type("Reports"));
For Each({report_window}, report_windows,
Try(
cur_analytic_layer = report_window[OutlineBox(1)] << Get Scriptable Object;
cur_dt = cur_analytic_layer << Get Data Table;
If(cur_dt == dt,
Insert Into(valid_reports, cur_analytic_layer);
);
,
show(exception_msg);
);
);
return(valid_reports);
);
// I would use function, but there seem to be some bugs
swap_report_columns = Expr(
Eval(EvalExpr(
nw_switcher = New Window("Switcher", << Window View("Invisible"),
vlb2 = V List Box(
ref_colswitcher2 = dt << Column Switcher(Expr(NameExpr(AsColumn(dt, old_col))),
{Expr(NameExpr(AsColumn(dt, old_col))), Expr(NameExpr(AsColumn(dt, new_col)))}
)
)
);
));
Batch Interactive(1);
For Each({report, idx}, report_list,
//report = report_list[2]
nw1 = New Window("", << Window View("Invisible"),
ref_colswitcher1 = dt << Column Switcher(Expr(NameExpr(AsColumn(dt, old_col))),
{Expr(NameExpr(AsColumn(dt, old_col))), Expr(NameExpr(AsColumn(dt, new_col)))}
)
);
lc = Log Capture(ref_colswitcher1 << Link Platform(report));
ref_colswitcher1 << Remove Column Switcher;
nw1 << Close Window;
If(Is Missing(lc),
Log Capture(
Try(ref_colswitcher2 << Link Platform(report));
);
);
wait(0);
);
Batch Interactive(0);
Try(vlb2[ListBoxBox(1)] << Set Selected(2));
wait(0);
ref_colswitcher2 << Remove Column Switcher;
Caption(remove);
nw_switcher << Close Window;
);
swap_columns = Expr(
nw = New Window("Swap report columns", << Type("Launcher"),
window:dt = Current Data Table(),
H List Box(
Lineup Box(N Col(2),
Panel Box("Select Column to Change",
fcs1 = Filter Col Selector(dt, << Set Max Selected(1))
),
Panel Box("Select New Column",
fcs2 = Filter Col Selector(dt, << Set Max Selected(1))
)
),
Panel Box("Action",
Button Box("Change Columns",
report_list = get_reports_for_datatable(dt);
old_col = (fcs1 << get selected)[1];
new_col = (fcs2 << get selected)[1];
Try(swap_report_columns);
),
Button Box("Cancel",
fcs1 << close window;
),
)
)
);
);
dt = Open("$SAMPLE_DATA/Probe.jmp");
dt << Clear Row States;
dist = dt << Distribution(Continuous Distribution(Column(:DELL_RPNBR)));
dist2 = dt << Distribution(Continuous Distribution(Column(:DELW_M1)));
gb1 = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:Site), Y(:Lot ID)),
Elements(Points(X, Y, Legend(3)))
);
gb2 = dt << Graph Builder(
Size(523, 454),
Show Control Panel(0),
Variables(X(:DELW_M1), Y(:DELL_RPNBR)),
Elements(Points(X, Y, Legend(3)))
);
swap_columns;
Write();