두 가지 다른 Excel 헤더 형식 처리안녕하세요 여러분,
JMP에서 BOM(자재 명세서) Excel 파일 가져오기를 자동화하는 JSL 스크립트를 개발하고 있습니다. 이 파일들은 서로 다른 출처에서 왔고, 안타깝게도 일관된 형식을 따르지 않습니다.
저는 두 가지 특정 형식을 다루고 있습니다.
- 형식 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: 두 가지 다른 Excel 헤더 형식 처리두 가지 서로 다른 형식의 파일 샘플을 제공해 주시겠습니까? 그러면 어떤 접근 방식을 취해야 할지 결정하는 데 큰 도움이 될 것입니다. 기본적으로 제가 일반적으로 하는 일은 처음 7개 행을 하나의 열로 읽는 것입니다. 표를 분석하여 형식을 확인한 다음, 결정된 형식을 사용하여 전체 표를 읽습니다.
Re: 두 가지 다른 Excel 헤더 형식 처리답변해 주셔서 감사합니다.
각 형식에 맞게 두 개의 샘플을 첨부했습니다.
제안하신 내용을 구현하여 첫 번째 7개 행을 단일 열로 성공적으로 읽을 수 있는지 확인한 다음, 표를 구문 분석하여 형식을 확인하고 결정된 형식을 사용하여 전체 표를 읽는 방법을 살펴보겠습니다.
귀하의 도움에 진심으로 감사드립니다!
Re: 두 가지 다른 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: 두 가지 다른 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( "-" )
)
);
);