處理兩種不同的 Excel 標題格式大家好,
我正在 JMP 中編寫 JSL 腳本來自動匯入 BOM(物料清單)Excel 檔案。這些文件來自不同的來源,不幸的是,它們不遵循一致的格式。
我正在處理兩種特定格式:
- 格式 1:標題位於第 5 行,資料從第 6 行開始
- 格式 2:標題位於第 6 行,資料從第 7 行開始
現在,我的腳本被硬編碼為使用格式 1(標題從行 (5) 開始),但每當我收到格式 2 的檔案時,我都需要手動調整它。
目標:我想讓腳本足夠智能,能夠自動偵測正確的格式並應用適當的匯入設定(標題從行開始,資料從行開始),而無需人工幹預。
以下是目前腳本的片段:
For( i = 1, i <= N Items (namefiles), i++,
//Transformation du fichier en table de données
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
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( 5 ),
Data Starts on Row( 6 ),
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( "-" )
)
);<BR />...<BR />...<BR />...
有沒有人遇過類似的問題?我在找:
- 檢查 Excel 檔案前幾行(可能使用臨時匯入)以推斷標題實際開始位置的方法。例如,透過檢查已知的列名。
- 或者任何 JSL 技術可以更靈活地處理這種可變性。
自動化和腳本資料混合與清理品質與工藝工程視窗回覆:處理兩種不同的 Excel 標題格式您能否提供這兩種不同格式檔案的樣本?這確實有助於確定要採取的方法。基本上,我通常會做的是將前 7 行作為一列來讀。透過解析表格來決定其格式,然後使用確定的格式讀取完整的表格。
回覆:處理兩種不同的 Excel 標題格式非常感謝您的回覆。
我附上了兩個樣本,每個格式一個。
我將研究如何實現您的建議,看看是否可以成功地將前 7 行讀取為單一列,然後解析表格以確定其格式並使用確定的格式讀取完整的表格。
我非常感謝您的幫助!
回覆:處理兩種不同的 Excel 標題格式Jim 的建議很棒,另一個選擇是提取更多數據,然後在 JMP 中進行清理
Names Default To Here(1);
path = "$DOWNLOADS/BOM_191910000_Sample_Row5.xlsx";
//path = "$DOWNLOADS/BOM_212100000-A2_Sample_Row6.xlsx";
dt = Open(
path,
Worksheets("BOM"),
Use for all sheets(1),
Concatenate Worksheets(0),
Create Concatenation Column(0),
Worksheet Settings(
1,
Has Column Headers(0),
Data Starts on Row(5),
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("-")
)
);
header_row = Contains(dt[0, 1], "PART NUMBER");
If(header_row > 1,
dt << Delete Rows(1::header_row-1);
);
dt << Move up;
//empty_rows = dt << Get Rows Where(IsMissing(AsColumn(dt, 1)));
//dt << delete rows(empty_rows);回覆:處理兩種不同的 Excel 標題格式在您的電子表格中,如果使用長度為 6 的標題讀入的第一列的名稱包含有效數字,則資料起始行是 6,否則為 6。
這是一個你可以開始的例子
For( i = 1, i <= N Items( namefiles ), i++,
//Transformation du fichier en table de données
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 6 ),
Headers Start on Row( 1 ),
Data Starts on Row( 7 ),
Data Starts on Column( 1 ),
Data Ends on Row( 7 ),
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( "-" )
)
);
If( Is Missing( Num( Word( -1, Column( 1 )[1] ) ) ) == 0,
whatStartRow = 7;
whatHeaderStartRow = 6;
,
whatStartRow = 6;
whatHeaderStartRow = 5;
);
Close( dt, nosave );
dt = Open(
namefiles[i],
Worksheets( "BOM" ),
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( whatHeaderStartRow ),
Data Starts on Row( whatStartRow ),
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( "-" )
)
);
);