2つの異なるExcelヘッダー形式の処理やあみんな、
JMPでJSLスクリプトを作成し、BOM(部品表)Excelファイルのインポートを自動化しています。これらのファイルは異なるソースから取得されており、残念ながら一貫した形式ではありません。
私は 2 つの特定の形式を扱っています。
- 形式 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 テクニック。
自動化とスクリプトデータのブレンドとクリーンアップ品質およびプロセスエンジニアリングウィンドウズRe: 2つの異なるExcelヘッダー形式の処理2つの異なる形式のファイルのサンプルをそれぞれ提供していただけますか?そうすれば、どのようなアプローチを取るべきか判断するのに非常に役立ちます。基本的に私が普段行っているのは、最初の7行を1つの列として読み込むことです。まずテーブルを解析して形式を判断し、それから決定した形式でテーブル全体を読み込みます。
Re: 2つの異なるExcelヘッダー形式の処理ご返信ありがとうございます。
各形式ごとに 1 つずつ、 2 つのサンプルを添付します。
提案されたことを実装する方法を調べて、最初の 7 行を 1 つの列として正常に読み取ることができるかどうかを確認し、次にテーブルを解析してその形式を決定し、決定された形式を使用してテーブル全体を読み取るようにします。
本当に助かります!
Re: 2つの異なる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);Re: 2つの異なる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( "-" )
)
);
);