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"} );