项目布局脚本我有一个生成 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()] 快捷方式来运行命令,但生成的布局将包含您打开的脚本窗口,因此通常更容易从外部进行)。