項目佈局腳本我有一個生成 5 個窗口的腳本,想要使用該腳本將輸出組織成項目格式,並安排佈局。
我想要右邊的窗口列表。 在左邊,我想要兩行:
最上面一行,我想要兩個並排的圖表。
底行,我希望在選項卡中顯示三個表。
我想出了下面的腳本,但它沒有達到我想要的效果。目前,所有 5 個選項卡顯示在五個不同選項卡上的一行中,窗口列表位於右側。
有人能指出我正確的方向嗎?
Project = new project();
Move to Project( destination( Project ), windows( {"Table1" ,"Table2" , "Table3", "Graph1", "Graph2"} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>回复:項目佈局腳本創建項目、創建數據表並將該表保存到項目內容的最簡單的示例:
new Project(
Run Script(
dt = New Table( "My Table",
Add Rows( 3 ),
New Column( "Column 1",
Set Values( [1, 2, 3] )
)
);
dt << Save As("$PROJECT/my table.jmp");
);
);
路徑變量 $PROJECT 映射到當前項目的項目內容(因此只能在項目內部使用)。 在項目外部創建表然後將它們移入項目是完全可以的,但如果由於某些外部原因不需要這樣做,那麼第一次直接在項目中創建所有內容通常會更有效。
回复:項目佈局腳本腳本的主體生成 3 個數據文件並將它們鏈接在一起。現在的編寫方式是將文件保存到C盤Temp文件夾中,然後移動到項目中。我想添加一個內容部分,並使用腳本將這三個文件添加到其中。我想然後我會更新為打開項目中的文件並製作過程能力圖而完成的分析。
回复:項目佈局腳本項目佈局代碼應該(或多或少)與以前相同。 JMP 16 的不同之處在於,當您保存內容時,您可以選擇將其保存在項目文件中。 如果您願意,您可以從腳本自動執行此操作,但我需要更多地了解您的項目才能推薦特定方法。
回复:項目佈局腳本JMP 16對項目平台進行了改進,將文件合併到項目文件中進行保存和傳輸。 這是一個很好的改進。 我用於將文件從報告移動到項目文件的 JMP 15 腳本在 16 中仍然有效,但我想更新以使用 JMP16 的新功能。 我不確定這種情況下新的腳本結構會是什麼樣子。 有什麼建議麼? 附件是我的腳本現在的樣子(無法運行,因為所有文件都基於我的電腦,並且數據整理是由腳本的早期部分完成的。
回复:項目佈局腳本您可以使用常規 TabBox API 將特定 TabBox 設置為具有特定的當前選項卡。 (交互式 JMP 腳本索引是學習這些內容的良好資源)。 這是我們使用的示例中的一種方法:
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
我們只需在創建選項卡框時將其保存在變量中,然後使用該變量稍後將選項卡設置為當前選項卡。
回复:項目佈局腳本嗨亞倫,
終於成功了,非常感謝!
我試圖在創建表格和圖表時設置窗口 ID,但我認為這不起作用。 所以現在佈局正確了。
另一個相關問題:如何讓它顯示特定選項卡? 有什麼辦法可以訂購嗎? 默認情況下它總是顯示相同的表,但這不是我想要顯示的表。
回复:項目佈局腳本抱歉,它仍然無法正常工作。這是第一種方法的示例,(主要)使用您的腳本和一些示例數據表:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
這是一種無需設置 ID 的方法:
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
graph1 = table1 << Run Script("Bivariate");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
最後,這是一個通過從一開始就打開項目中的窗口來避免 Move to Project() 的版本:
Project = new project();
Project << Run Script(
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
);
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
希望其中之一可以修改為適用於您的腳本。
回复:項目佈局腳本嗨亞倫,
我嘗試了你的建議,但仍然沒有運氣,同樣的錯誤消息。
我不明白的是:我創建了一個新窗口,然後使用“設置窗口 ID”給它一個 ID,但該 ID 似乎無法被 Tab Box() 識別。
回复:項目佈局腳本我想是我的錯。 Get Window() 需要知道在哪裡查看(因為項目中的窗口可以與項目外部的窗口具有相同的標題)。 所以而不是
Get Window("Table1")
(其中正在尋找一個名為“Table1”的窗口,而不是在項目中),我們需要使用
Get Window(Project(Project), "Table1")
其中內部的“Project”是您在腳本頂部為項目變量選擇的名稱:
Project = new project();
總而言之,這樣的事情應該有效:
Tab Page Box(
Window ID( Get Window(Project(project), "Table1") << Get Window ID())
)
是的,這絕對是我們希望在未來的 JMP 版本中變得更容易的事情。 
回复:項目佈局腳本感謝您的幫助。 仍然遇到困難,抱歉我是 JSL 的初學者......
當我使用第二個選項時,我收到一條有關可編寫腳本的對象的錯誤消息:
Send 在訪問或評估 'Send' 時期望可編寫腳本的對象,Get Window( "Table1" ) << /*###*/
獲取窗口ID() /*###*/
我假設我需要使這些對象可編寫腳本,但又不確定如何做到這一點?
我也嘗試了我認為可行的第一個選項。 我設法為每個報告創建新窗口,並使用設置窗口 ID 命令給它們一個 ID,但它仍然不起作用。
回复:項目佈局腳本你是對的——那些 GUID 每次都會不同。 我不會向您詳細解釋為什麼我們不只是讓它使用窗口標題,但使用 ID 有很好的(儘管很複雜)原因。 像這樣手動編寫項目腳本時最好的做法是在腳本中較早地使用設置窗口 ID
mywindow << Set Window ID("window1");
或者直接在佈局中使用 Get Window ID() :
Tab Page Box(
Title( "Table1" ),
Window ID( Get Window("Table1") << Get Window ID())
)
請注意,如果無法找到具有給定 ID 的窗口,則 Title() 僅用於打印友好消息,並使內容更易於閱讀。 它不會執行任何功能,因此如果這能讓您的生活更輕鬆,您可以繼續將其保留。
回复:項目佈局腳本嗨亞倫,
謝謝你。 我不知道如何獲得腳本佈局,所以這太棒了!
所以我已經這樣做了,我遇到的問題是在日誌中,每個選項卡看起來都有點像這樣:
Tab Page Box(
Title( "Table1" ),
Window ID( "e516a5e8-d5c2-954e-90a6-ba6b719dae98" )
我刪除了所有窗口 ID 位,但它仍然不起作用,所以我認為它需要窗口 ID 位。 然而,這些窗口 ID 號看起來像是隨機字母和數字的組合,每次腳本運行時它們都會不同,因此我無法提前指定它們。 有沒有辦法找到打開的窗口的窗口ID? 我已經尋找如何做到這一點,但不知道如何做到這一點。
回复:項目佈局腳本在 JSL 中編寫項目佈局的最佳方法之一是打開項目,使用拖放界面設置所需的排列,然後使用 JSL 保存佈局。 為此,創建一個新的 JSL 腳本(在項目外部),然後運行
Get Project("Untitled") << Get Layout();
或者
Get Project(1) << Get Layout();
使用您想要獲取其佈局的項目的標題或索引。 這會將引用的項目的佈局轉儲到日誌中,然後您可以調整該日誌以與項目創建腳本一起使用。
(您可以在項目內部執行相同的操作,甚至可以使用 [this project()] 快捷方式來運行命令,但生成的佈局將包含您打開的腳本窗口來執行此操作,因此通常更容易從外部進行) 。