JMP 18 新的更新表脚本覆盖表将 Excel 表导入 JMP 18 时,我得到两个脚本“源”和“更新表”脚本,唯一的区别似乎是“更新表 (1)”命令。
第二个脚本从 Excel 文件执行更新,并覆盖导入后创建的任何列。有没有办法让它在更新时保留新列?在脚本索引中没有找到任何内容。
自动化和脚本内容组织视窗回复:JMP 18 新的更新表脚本覆盖表嗨@Ake ,目前更新的想法是:用输入文件中的新数据替换现有数据。
正如您所描述的 - 这是非常具有破坏性的。
其背后的想法可能是这样的:
无法保证附加列中的现有值与新导入的数据相匹配 - 因此最好删除它们。嗯,对于带有公式的列,我看不出有什么理由删除这些列。
比更新脚本好多了:
dt = Current Data Table();
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
它仍会删除手动添加的值,但会保留公式列:)
缺点:它依赖于源脚本 - 这也非常脆弱: 更新和连接:源脚本冲突。
或者,您可以看看Join、Concat 和 Update 。
回复:JMP 18 新的更新表脚本覆盖表谢谢!如果我将源脚本复制到你的脚本中,它就不会那么脆弱了。
我一直在使用更复杂的方法,先添加所需的行数,然后进行更新。您的脚本更简洁。
// Compare and add number of rows if needed
nrows1 = N Rows( dt1 );
nrows2 = N Rows( dt2 );
If( nrows2 < nrows1,
dt2 << Add Rows( nrows1 - nrows2 )
);
// Update dt2
Data Table( dt2 ) << Update( With( Data Table( dt1 ) ) );
Close( dt1 );
dt2 << save();
回复:JMP 18 新增的更新表脚本会覆盖表这个脚本的危险之处在于:它是通过 concatenate 语句继承的:
用户 A:导入 Excel 文件
用户 B:合并 2 个文件
用户 C:对缺失数据感到疑惑,并尝试“更新表”
从禁用“更新表”脚本中?
请在此投票: 禁用创建“更新表”脚本的选项
回复:JMP 18 新增的更新表脚本会覆盖表您好,我很喜欢这个修复方案,不过有个问题——当我用这个脚本更新表格时,它会自动添加一个通用的“更新表格”脚本,这可能会导致公式列出错。有没有办法禁用自动生成添加到 jmp 表格中的这个新的“更新表格”脚本?
回复:JMP 18 新增的更新表脚本会覆盖表您可以通过删除或覆盖脚本中的“更新表”脚本来避免这种情况。以下是一种方法,假设您的自定义“更新表”脚本名为“更新表”。
dt = Current Data Table();
update_script = dt << Get Script( "Update Table" );
dt << Delete Scripts( {"Update Table"} );
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
Eval(
Substitute(
Expr(
dt << Set Property( "Update Table", __update_script__ )
),
Expr( __update_script__ ), Name Expr( update_script )
)
);
或者你可以将脚本命名为其他名称(“更新”),然后在更新后添加一行代码来删除“更新表”。
dt = Current Data Table();
dtnew = dt << Run Script( "Source" );
dt << Select All Rows << Delete Rows;
dt << Concatenate( dtnew, Append to first table );
Close( dtnew, NoSave );
dt << Delete Scripts( {"Update Table"} );