- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
创建 Excel 工作簿奇怪的行为
你好,
我有两个问题创建 Excel 工作簿调用 JMP 脚本,我希望这里有人能给我一些见解。
我在跑JMP 专业版 15.2.1在Windows 10 。我有一个脚本维护一对不可见的表(下面是::dt_wj 和::dt_ma),这些表由用户通过非模式 UI 窗口进行更新。该窗口上的按钮之一应该通过以下代码在用户的 TEMP 文件夹中生成一个新的 Excel 工作簿:
::excelpath = Trim( Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) ));temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path(temppath||filename,Absolute,Windows);
Try(
Create Excel Workbook(
filepath,
{::dt_wj,::dt_ma},
{"WJ","MA"}
);
,//else
Write("Failed to create workbook!\!N");
//Return(Empty());
);
If( !Is File( filepath||".xslx" ),
Write("File does not exist!\!N");
//Return(Empty()););
Write( "Opening with Excel..." );
Try( Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) ),//else Write( "Failed!!!\!N" ); //Return(filepath););
Write( "Done.\!N" );//Return(filepath);
奇怪的行为1 :当我运行上面写的代码时(它被包装在我的代码中的一个函数中,因此注释掉了 Return 语句),它传递了第一个 Try 块(它在哪里调用创建 Excel 工作簿) 而不执行 catch 子句,但是,下一行代码 (测试是文件) 返回 0。当我检查临时文件夹时,我看到创建了一个临时文件,但文件名在扩展名前附加了一个“-”:例如“ MAWJ259022-.xlsx '。然而,更奇怪的是,如果我调整是文件测试包括莫名其妙的连字符:
If( !Is File( filepath||"-.xslx" ), Write(Eval Insert("File ^filepath||\!"-.xslx\!"^ does not exist!\!N")); Return( Empty() ););
尽管我可以亲眼看到一个 5KB 的 Excel 工作簿,其中包含通过日志输出验证的精确文件路径,但它仍然失败。
奇怪的行为2 :我的 JMP 表之一中的两列包含较大的 ID 号(分别为12位和16位),它们保存在 JMP 的字符列中(因为它们并不是真正的数字而是标识符)。当我 (暂时手动)打开临时文件夹中的 Excel 文件,这些列将作为数字或常规读入 Excel,即使我要保存的 JMP 表中的列肯定是字符/名义。这是有问题的,因为 Excel 无法处理 16 位数字并截断最后 2 位数字,并将 12 位数字转换为科学计数法,从而使两个标识符都无用。在我看来,如果 JMP 本身生成 excel 文件,它应该能够设置 excel 列的数据类型以匹配流程中最接近的 JMP 模拟数据类型。
我尝试通过为每个数据表生成临时 CSV 文件然后通过将它们拉回到 JMP 来回避这个问题加载文本文件,调整列以读取各种组合评估插入( "=TEXT(^正则表达式结果[1]^,\!"############\!")" )或者评估插入( "='^regexresult[1]^") 甚至是我发现的一些有关 excel CSV 处理的奇怪内容,例如在列数据中尝试使用三重双引号。这些似乎都无法让我绕过 Excel 尝试自动分类我的数据并破坏它的情况,所以我真的希望有一种方法可以让 JMP 以正确的方式做到这一点。
还有第三种行为我想回避一下,即 JMP 不会响应,直到退出通过运行程序启动的 excel 实例,但我怀疑这是一个需要解决的更大问题,而且它的解决方案对于我的主要目标来说是次要的。
任何有关尝试的见解或评论/建议将不胜感激,谢谢!
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:创建 Excel 工作簿奇怪的行为
由于 try 和 if 语句中的注释风格, script 标记破坏了部分代码,在下面重新发布,没有注释以提供工作代码。
::excelpath = Trim( Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) ) );
temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path( temppath || filename, Absolute, Windows );
Try(
Create Excel Workbook( filepath, {::dt_wj, ::dt_ma}, {"WJ", "MA"} ),
Write( "Failed to create workbook!\!N" );
);
If( !Is File( filepath || ".xslx" ),
Write( "File does not exist!\!N" )
);
Write( "Opening with Excel..." );
Try( Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) ), Write( "Failed!!!\!N" ) );
Write( "Done.\!N" );
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).