특정 Excel 셀에서 Excel 데이터 가져오기JMP에서 분석해야 할 데이터가 엑셀 파일에 다소 무질서하게 저장되어 있는 상황입니다.다행스럽게도 데이터가 있는 Excel 셀 목록을 쉽게 얻을 수 있고 JSL로 해당 값을 가져오는 자동화를 원합니다.이를 효과적이고 효율적으로 수행하는 방법에 대한 아이디어를 찾고 있습니다.
예를 들어 JMP의 단일 열에 필요한 데이터가 이러한 Excel 셀에 저장되어 있다고 가정해 보겠습니다.
E284,E400,E507,D615,E727,D852,E1003,E1114,D1220,D1339,E1493
Open()을 사용하고 워크시트 지정, 행 시작, 행 종료, 시작 열, 종료 열을 지정하여 단일 행/열이 있는 JMP 파일의 각 값을 가져왔습니다.
Open(
"C:\temp\worksheet.xlsx",
Worksheets( "sheet1" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 284 ), // get data on row 284
Data Starts on Column( 5 ), // get data on column "E" (the fifth column)
Data Ends on Row( 284 ), // get data on row 284
Data Ends on Column( 5 ), // get data on column "E" (the fifth column)
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( "-" )
)
)
그런 다음 특정 셀에서 검색하려는 각 값에 대한 별도의 데이터 파일을 가져온 다음 별도의 JMP 파일에 있는 값을 모두 함께 하나의 열에 있는 하나의 데이터 테이블에 수집합니다.
내가 직면하고 있는 한 가지 문제는 Excel 파일을 열 때 Excel 워크시트 맨 위에 있는 모든 빈 행이 무시되는 것 같다는 것입니다.따라서 행 1에 데이터가 없는 한 행 1은 실제로 행 1이 아닙니다. 사실인가요?
다른 아이디어가 도움이 될 것입니다.
스크립팅Re: 특정 Excel 셀에서 Excel 데이터 가져오기Excel에서 더 쉬운 해결 방법을 찾았습니다.Excel에는 특정 셀에서 결과를 가져오는 데 사용하는 INDIRECT(cellref) 함수가 있습니다.그래서 새로운 엑셀 시트를 만들고 데이터가 있는 시트와 셀을 나타내는 열을 만들고 INDIRECT 함수를 사용하여 분석에 필요한 결과 테이블을 얻을 수 있었습니다.
하지만 이 문제는 JMP에서 Excel 가져오기에 필요한 몇 가지 개선 사항을 강조한다고 생각합니다.
Re: 특정 Excel 셀에서 Excel 데이터 가져오기다음은 예입니다(아마도 XML을 구문 분석하는 더 나은 방법이지만 패턴 일치 함수가 제 역할을 합니다.
/*----------------------------------------------------------------------
Method: getWorksheets
----------------------------------------------------------------------*/
getWorksheets = method({username=1},
// this technique (including the overhead of creating the class,
// is >300 x faster than getExcelWorksheets on Mac
// and >100 x faster on Windows
workbook = "xl/workbook.xml";
za = open(_excelFilePath,zip);
contents = za<<READ>>sheet + "\!""
+ " sheetId=\!"" + PatRepeat(PatNotAny("\!"")) + "\!""
+ (" r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"" | " state=\!"hidden\!"" + " r:id=\!"" + PatRepeat(PatNotAny("\!"")) + "\!"")>>x;
ismatch = 1;
lstWorksheets = {};
while(ismatch,
ismatch = patmatch(contents,pat,"");
if (!contains(x,"hidden"),
substituteinto(sheet,"&","&");
if (!contains(lstWorksheets,sheet),
insertinto(lstWorksheets,sheet)
)
)
);
return(lstWorksheets);
),</READ>Re: 특정 Excel 셀에서 Excel 데이터 가져오기흥미로운 생각입니다.나는 그것이 XLSX 파일의 "내부"인 줄 몰랐습니다.
Re: 특정 Excel 셀에서 Excel 데이터 가져오기PPTX 및 DOC 파일을 만드는 데 유사한 기술을 사용하지만 이것은 약간 극단적인 해킹입니다.
XLSX는 XML 파일이 포함된 zip 파일입니다.XML을 사용하여 셀 좌표를 참조할 수 있습니다.

ZipArchive를 사용하여 XML 파일에 액세스할 수 있습니다.
Re: 특정 Excel 셀에서 Excel 데이터 가져오기시트 상단에 빈 셀이 있는 Excel 워크시트의 경우 해당 행이 무시된다는 사실을 기억했습니다.보다 https://www.jmp.com/support/notes/60/026.html
그리고 Excel 가져오기 개선 사항: 가져오기 미리 보기에서 행 번호 및 열 레이블 표시
Re: 특정 Excel 셀에서 Excel 데이터 가져오기간단한 대답은 "아니오"입니다.데이터 위치를 참조할 수 있는 다른 방법이 있다면 귀하의 접근 방식을 시도하겠지만 이 경우 Excel 셀 참조가 데이터를 찾는 기본 방법입니다.
Re: 특정 Excel 셀에서 Excel 데이터 가져오기Excel 셀 참조 이외의 셀을 식별하는 데 사용할 수 있는 정보가 있습니까?예를 들어 필드 레이블?나는 보통 최소한의 처리로 Excel에서 JMP로 데이터를 로드한 다음 주요 정보를 찾기 위해 행과 열을 반복합니다.일반적으로 첫 번째 스캔은 관심 있는 필드 레이블이 포함된 열을 식별하고 두 번째 스캔은 필드 값을 로드합니다.이런 식으로 테이블을 만들 수 있는 데이터 목록이나 테이블 변수로 설정할 수 있는 헤더 정보를 만들 수 있습니다.
예를 들어 - 특정 필드 레이블을 포함하는 열을 찾기 위해 스캔
identifier = "Description";
cols = dt<<GETCOLUMNNAMES> </GETCOLUMNNAMES>
그런 다음 필드를 스캔합니다.
fields = [=>];
fields["Description"] = 0;
fields["USL"] = 0;
fields["LSL"] = 0;
fields["Nominal"] = 0;
keys = fields << getKeys;
for (i=1,i<=nitems(keys),i++,
field = keys[i];
success = 0;
for (r=1,r<=nrow(dt),r++,
cell = column(dt,lblCol)[r];
if (contains(cell,field),
success = 1;
fields[field] = r;
break()
)
)
);