我有大量 Excel 文件,我將這些文件中的資料傳輸到 JMP 中進行分析。直到最近,我一直以非常中世紀的方式執行此操作,手動開啟 Excel 文件,並將相關資訊直接複製到 JMP 表中。雖然這是站得住腳的,但我確實相信導入功能(以及附加到現有資料表的串聯)是提高效率的更好的長期解決方案。
我的相關資訊在每個工作簿的第4頁中,並標記為「循環」。我當時需要匯入 4 到 20 個這樣的工作簿,用它們來更新我的 JMP 表。每個工作簿都有一個字串標題,通常為 8 個字元長。這是被測試物件的唯一識別碼。
我的問題是:我是否可以在導入時替換生成的表的名稱(例如,現在如果我導入 8 個文件,JMP 中生成的表為“cycle”、“cycle 2”、“cycle 3”等) . ) 成為原始Excel 工作簿的標題(在本例中變成「工作簿1」、「工作簿2」、「工作簿3」等)?
我的下一個問題是關於串聯。我是否可以編寫一個可以分析特定單元格的腳本(例如,由腳本生成的單元格,它將工作簿的標題複製到導入時的特定列中),然後使用該單元格中的值來附加將剩餘列中的資訊加入到現有JMP 表中?
為了澄清起見,讓我們假設我正在測試一個對象,在本例中標記為“A71320”。我有一個 JMP 資料表,也稱為“A71320”,它是該測試對象的所有相關資料的彙編。每個新測試都會產生一個 Excel 文件,也標記為「A71320」。我想使用您的腳本匯入此文件。如果我理解正確的話,它將複製第4 頁“循環”中的所有數據,創建一個新的JMP 表,標記為“循環”,然後在這個新表中創建一個包含1 個填充單元格“A71320”的新列。然後,我想運行一個腳本,該腳本將看到此單元格“A71320”,識別JMP 中名為“A71320”的現有表格,並附加除標題單元格之外的所有信息,從“cycle”到“A71320”。這可能嗎?
我最誠摯的感謝您花時間閱讀這個問題。
羚羊
這似乎不是一項艱鉅的任務....但是,具體細節過於模糊,無法嘗試編寫腳本來滿足您的需求。您輸入的 excel 工作簿和最終數據表的示例在嘗試指導您完成腳本開發時確實很有幫助。
你好@txnelson ,
我聽你的! 請參閱附件。 如上所述,我經常生成“新”A71322.xls 文件。 該文件的每個實例都是唯一的(我有一個用於存儲/區分它們的文件系統結構)並且每個實例對應於 .jmp 表中描述的“運行”。 我通常手動打開 excel 文件,然後復制“循環”工作表中列標題下方的所有數據,然後將它們粘貼到“循環 ID”列中最後一個條目下方的 .jmp 表中。 “總循環數”和“運行”的公式在數據表中生成正確的條目。
到目前為止,我已經能夠通過導入 excel 書籍、僅循環表,然後使用基本連接功能來重新創建上述內容。 但是,目前速度很慢,並且僅導入工作表名稱的事實(意思是說,導入 4 個工作簿會導致“循環”“循環 1”“循環 2”和“循環 3”)有時令人困惑。 正如我所做的那樣,手動繼續操作對我來說更快。
但是,我的數據集不斷增長,因此我正在尋找腳本解決方案。 我對多個電池(即 A71321、A71311 等)進行了測試,並相信我能夠適應您提供的解決方案。
還有一點需要注意,單元格的標題可以在工作表“test”中找到,如果有幫助的話,單元格 I-6(但是,這不像在我的場景中能夠導入工作簿的標題那樣靈活。 )。
再次感謝您耐心閱讀我的請求和任何即將到來的回复。 如果您需要更多信息,我將隨時為您解答。
問候,
羚羊
這是一個腳本,它可以讓您在編寫自己的腳本以完成任務方面有一個良好的開端。請確保您研究了提供的腳本,以便了解它是如何工作的。
Names Default To Here( 1 );
// Set the object in question
object = "A71322";
// Get a list of input xls files to proces
// I am using the method where all files to be processed are moved into a single directory
dir = "C:\users\xxxx\input files\";
theFiles = Files In Directory( dir );
// Create the start of the final data table
dt = New Table( "Combined",
New Column( "Run",
formula(
If(
Row() == 1, 1,
:Cycle ID == 1 & Lag( :Cycle ID ) != 1, Lag( :Run ) + 1,
Lag( :Run )
)
)
),
New Column( "Total Cycle Number", formula( Row() ) )
);
// Loop through all of the file names and select only object in question files
For( i = 1, i <= N Items( theFiles ), i++,
If( Contains( theFiles[i], object ) == 1,
dtCycle = Open(
Char( dir ) || theFiles[i],
Worksheets( "cycle" ),
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( "-" )
)
);
dt = dt << concatenate( dtCycle, Append to first table( 1 ) );
// Clean up
Close( dtCycle, nosave );
)
);