绕过脚本中的 Excel 导入向导当按下应用程序窗口的“确定”按钮时,我尝试从 JMP 应用程序中打开 .xslx 文件。 我的问题是我发现很难绕过 Excel 向导窗口并直接打开。
我希望使用我在 Open() 语句中指定的 Excel 选项在 JMP 中打开文件。 为了使我的 Open() 语句选项正确,我手动打开文件并从表的源脚本中复制 Open() 语句,所以我认为所有这些选项都是正确的。 这是一个多工作表 Excel 文件,我只需要 JMP 中的一个工作表,因此我的 Open() 状态如下所示:
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
奇怪的是,当我在独立脚本中执行此 open 语句时,一切都按照我的意愿发生:文件直接打开,而没有弹出 Excel 向导窗格。
但是,当我将相同的 Open() 语句作为我正在构建的 JMP 应用程序的脚本的一部分包含时,我似乎无法阻止向导窗格的打开。 (当我单击应用程序的用户输入窗口的“确定”按钮时,将调用 Open() 语句。)
有什么想法为什么会发生这种情况以及如何阻止它吗?
回复:绕过脚本中的 Excel 导入向导@mjoner - 是的,至少在 JMP 16.0 中仍然需要此解决方法。
回复:绕过脚本中的 Excel 导入向导@danschikore此处引用的过程仍然是实现此目的的唯一方法吗? 是否有任何想法消除在这个杂乱中编写以获得所需的脚本行为的需要?
回复:绕过脚本中的 Excel 导入向导担,
感谢您的跟进。 我最终尝试了其他所有方法并最终使用@多发性硬化症将 open 语句嵌入 Include() 文件中的解决方案。 这解释了发生了什么,并提供了不同的解决方法。
约翰回复:绕过脚本中的 Excel 导入向导事实证明,Windows 和 Mac 上的行为有所不同,可能是由于读取 Excel 文件的支持库存在差异。在 Mac 上,直接调用的 Open() 脚本将按预期打开文件,但通过单击按钮调用的 Open() 调用将打开 Excel 向导。
解决方法是@多发性硬化症提供强制 JMP 进入“批处理”模式,这会将逻辑更改为直接运行脚本而不是通过按钮运行。另一种不需要中间文件的方法是将脚本嵌入到 ScriptBox 中并在该框中调用 <
// One way to force JMP into batch mode is to embed the script in a ScriptBox
// and invoke <<RUN on="" the="" script="" box.="" new="" window=""></RUN>
回复:绕过脚本中的 Excel 导入向导丹,感谢您的回复。 我会尝试一下,然后将导致我的问题的应用程序单独发送给您。 给我一点。 约翰回复:绕过脚本中的 Excel 导入向导我尝试使用随附的 JMP 应用程序通过 JMP 13/14/15 重现此问题。按钮按下脚本如下所示,它可以在我迄今为止尝试过的所有版本中正确打开表格。这个例子对你有用吗?这与您正在开发的应用程序有何不同?您使用的是哪个版本的 JMP?
Button1Press = Function( {this},
// This function is called when the button is pressed
Open(
"$SAMPLE_IMPORT_DATA\VA Lung Cancer.xls",
Worksheets( "VA Lung Cancer" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
);
回复:绕过脚本中的 Excel 导入向导谢谢,女士。这对将来会有帮助。 与此同时,我已经针对我的情况找到了一种不同的解决方法,但下次将其放入工具箱中是件好事。
《脚本指南》(第 333 页)中有一节讨论了 Open() 函数的上下文敏感性并将其与 Excel 向导联系起来,但我发现它不是很清楚。 我不禁认为这里讨论的行为要么是 Open() 实现中的一个缺点(?bug),要么需要更多文档。
例如,最好的一件事是 Open() 中可以明确选择是否不使用向导,而不是关闭首选项。 只是我的两分钱。
回复:绕过脚本中的 Excel 导入向导我也经历过这种情况并找到了一种解决方法。 保存打开()命令作为单独的脚本并使用包括()运行代码。
// Create a jsl file with the Open() command
f = Save Text File(
"~/Desktop/test.jsl",
Char(
Name Expr(
Open(
"~/Desktop/test.xlsx",
Worksheets( "Data" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 2 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
)
)
)
);
// Invoke Open() via user input
nw = New Window( "open test", Button Box( "OK", Include( f ) ) );回复:在脚本中绕过 Excel 导入向导如果有人对此感到困惑,这里有一个替代方法:1. 获取并存储用户对 Excel 打开方法的偏好设置;2. 将其更改为您需要的设置;3. 打开文件;4. 将设置改回原来的设置
例如
originalPref = 获取首选项(Excel 打开方法);
设置首选项(Excel 打开方法(“打开所有工作表”));
myPath = 选择文件(... 等
dt = 打开(myPath……)
eval(原始前缀)
回复:在脚本中绕过 Excel 导入向导我的 Mac 上的 JMP 17.2 仍然出现这个问题,并且我打开 Excel 表的代码中有需要用户输入值的变量。