이전 블로그 포스팅에서 JMP와 Excel - 끝없는 이야기? - 1 부 계층적 헤더와 병합된 셀이 포함된 스프레드시트를 가져오는 예제로 마무리했습니다. 이번에는 여러 워크시트가 포함된 스프레드시트 파일을 가져오는 것과 특정 폴더에 있는 여러 스프레드시트를 JMP로 읽는 방법에 중점을 둡니다. 너무 복잡하게 만들고 싶지 않기 때문에 스프레드시트와 다른 워크시트의 구조와 매개변수 이름이 동일하다고 가정합니다!
(참고: 동일하지 않은 경우 각 통합 문서에 대한 설정을 지정하고 이를 별도의 테이블로 가져와야 합니다. 나중에 결합/연결 기능이나 JMP 데이터 테이블용 JMP 쿼리 빌더를 사용하여 결합할 수 있습니다. 이러한 종류의 단계를 자동화하려면 일반적으로 읽으려는 모든 변수, 워크시트 및/또는 파일의 역할을 확인하기 위한 추가 스크립팅이 필요합니다.
여러 워크시트 - 가져오기 및 자동화
먼저 Excel의 데이터를 살펴보겠습니다.

모두 동일한 모양과 사소하지 않은 구조를 가진 다양한 통합 문서를 볼 수 있습니다. 빨간색 밑줄이 그어진 부분은 각 통합 문서의 서로 다른 배치 번호를 볼 수 있습니다. 데이터를 읽고 싶지만 별도의 테이블에서는 읽고 싶지 않습니다. 오히려 하나의 테이블을 갖고 싶습니다. JMP의 Excel 가져오기 마법사를 사용하면 매우 쉽게 달성할 수 있습니다.
- Excel 시트를 JMP 창으로 드래그하면 Excel 가져오기 마법사가 열립니다.

- 헤더 및 데이터 필드의 설정을 적절하게 변경합니다. 데이터에 포함하고 싶지 않은 헤더가 있는데 실제 헤더는 4번째 줄에서 시작하여 3개 행에 걸쳐 있습니다. 그런 다음 빈 필드가 있는 행이 있습니다. 따라서 데이터를 한 줄 나중에(7 대신 8) 시작합니다. 첫 번째 열에는 분석을 위한 데이터가 없으므로 건너뜁니다.

- "다음" 버튼을 클릭하면 마지막 행 설정을 활용하여 타임스탬프 정보를 포함하지 않겠다고 알릴 수 있습니다. 데이터가 끝나는 행을 선택하고 더하기(+) 기호를 누르면 어떤 행 번호가 올바른지 신경 쓸 필요가 없습니다.

- 남은 것은 모든 워크시트 내에서 동일한 구조를 활용하는 것입니다. "모든 워크시트에 사용"과 "워크시트 연결 및 열 일치 시도" 표시를 확인할 수 있습니다. 그러면 미리보기가 30/30행에서 90/90행으로 변경됩니다. 세 개의 워크시트 각각이 30개의 행을 제공한다는 점을 고려하면 예상대로 작동하는 것 같습니다. 연결할 때 "연결 시 워크시트 이름으로 열 생성" 플래그도 확인하는 것이 좋습니다. 그렇지 않으면 나중에 데이터의 출처를 반영하기 어려울 것입니다.
- 마지막 단계는 가져오는 것이며 가져온 데이터를 항상 확인하는 것입니다.
이 동작을 보고 싶다면 이것을 추천할 수 있습니다 짧은 영상 (JMP 12 사용). 가져오기 마법사를 사용하기 시작한 경우 참고 사항: 마지막 설정이 저장되므로 새롭지만 다른 데이터를 가져올 때 데이터에 대한 놀라운 보기가 나타날 수 있습니다. "기본 설정 복원" 버튼을 사용하면 마법사에서 설정을 재설정할 수 있습니다.
가져온 각 데이터 테이블에는 이전에 선택한 설정으로 가져오기를 다시 실행하기 위한 소스 스크립트가 있습니다. 이를 통해 스프레드시트에 새 배치 데이터가 있는 경우 업데이트된 데이터 테이블을 읽을 수 있습니다. 글쎄요, 데이터를 자주 수집할 때는 아마도 스프레드시트보다는 데이터베이스 사용을 고려할 것입니다. 그러나 그것은 다른 이야기입니다.
여러 스프레드시트 가져오기 자동화 - 다양한 과제
이제 동일한 구조를 가진 여러 워크시트가 포함된 하나의 스프레드시트를 JMP로 읽는 방법을 알게 되었습니다. 하지만 "동일한 구조를 가진 여러 스프레드시트를 각 파일에 대해 수동으로 수행하지 않고 JMP에서 어떻게 읽을 수 있습니까? 자동으로 수행하려면 어떻게 해야 합니까?"라는 문제에 직면했을 수도 있습니다. JMP 스크립팅 언어를 사용한 짧은 대답입니다. 소스 스크립트를 기본으로 사용하면 각 스프레드시트에 대해 이 스크립트를 다시 실행하거나 폴더의 모든 파일을 반복하는 for 루프를 사용할 수 있습니다. 파일 교환 커뮤니티에 공유된 스크립트가 있는데, 이를 정확하게 수행하는 스크립트는 다음과 같습니다. 다중 txt 또는 csv 파일 결합
간단히 말해서 다음 단계를 수행합니다(표시된 스크립트의 일부만).
- 디렉터리를 선택하고 Excel 파일인 파일을 필터링합니다.
prefilepath = munger(Pick Directory( "Browse to the Directory of the Target Excel Files " ),1,"/","");
filepath = Convert File Path( prefilepath, Windows );
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//filter out any non-Excel files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "xls" | Item( 2, prefilelist[i2], "." ) == "xlsx",
Insert Into( filelist,file),
//show(file)
)
);
- 파일을 반복하여 가져옵니다. 메모리를 절약하려면 두 개만 열고 처음 가져온 테이블을 새 테이블로 업데이트하고 후자를 닫고 다음 테이블을 엽니다. 그렇지 않으면 사용된 창 핸들 수와 사용된 메모리(스프레드시트가 많거나 매우 큰 경우)로 인해 Windows에 문제가 발생할 수 있습니다.
n=nitems(filelist); //number of items in the working list
cctable= New Table( "Combined data table");//make an empty table
ExcelSheetName = "Sheet1"; // change this if you have a special sheet name you want to read the data from
//Iterate through building the SQL string to query the Excel files
For( i = 1, i < n+1, i++,
filenow = ( filelist[i] );
fileopen=(filepath||filenow);
dt=open(fileopen, Worksheets( ExcelSheetName ) );
dt << New Column( "File Name", formula( filenow ) );
cctable << Concatenate( Data Table( dt ), Append to first table );
Close( dt, NoSave );
);//end of for loop
지금까지 JMP에서 Excel 가져오기 마법사를 사용하여 계층적 및/또는 병합된 데이터 세트를 처리하는 방법과 간단한 구조화된 데이터를 가져오는 여러 가지 방법에 대해 읽어보았습니다. 마지막으로 여러 워크시트를 한 번에 가져오는 방법과 JSL 스크립트를 사용하여 여러 Excel 시트를 자동으로 읽는 방법을 보여주었습니다. 다음 게시물에서는 데이터 형식과 기타 사항에 따른 잠재적인 문제에 대해 이야기하겠습니다.
여러분의 의견과 경험 공유를 기대합니다.