안녕,
두 가지 문제가 있습니다. Excel 통합 문서 만들기 JMP 스크립트를 호출하고 여기 누군가가 나에게 통찰력을 줄 수 있기를 바랍니다.
나는 뛰고있어 JMP Pro 15.2.1 의 위에 윈도우 10 .비 모달 UI 창을 통해 사용자가 업데이트하는 보이지 않는 테이블 쌍 (아래 :: dt_wj 및 :: dt_ma)을 유지 관리하는 스크립트가 있습니다.이 창의 버튼 중 하나는 아래 코드를 통해 사용자의 TEMP 폴더에 새 Excel 통합 문서를 생성하도록되어 있습니다.
::excelpath = Trim(<BR /> Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) )<BR />);<BR />temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path(temppath||filename,Absolute,Windows);
Try(
Create Excel Workbook(
filepath,
{::dt_wj,::dt_ma},
{"WJ","MA"}
);
,//else
Write("Failed to create workbook!\!N");
//Return(Empty());
);
If( !Is File( filepath||".xslx" ),
Write("File does not exist!\!N");
//Return(Empty());<BR />);
Write( "Opening with Excel..." );
Try(<BR /> Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) )<BR />,//else<BR /> Write( "Failed!!!\!N" );<BR /> //Return(filepath);<BR />);
Write( "Done.\!N" );<BR />//Return(filepath);이상한 행동 1 : 위에서 작성한 코드를 실행할 때 ( 내 코드의 함수에 싸여 있으므로 Return 문을 주석 처리했습니다. ), 첫 번째 Try 블록 ( 그것이 부르는 곳 Excel 통합 문서 만들기 ) catch 절을 실행하지 않고 다음 코드 줄 ( 테스트 파일 )는 0을 반환합니다.임시 폴더를 확인하면 임시 파일이 생성되었지만 파일 이름에는 확장자 앞에 '-'가 추가되어 있습니다. 예 : ' MAWJ259022-.xlsx '.그러나 여전히 더 이상합니다. 파일 설명 할 수없는 하이픈을 포함하도록 테스트합니다.
If( !Is File( filepath||"-.xslx" ),<BR /> Write(Eval Insert("File ^filepath||\!"-.xslx\!"^ does not exist!\!N"));<BR /> Return( Empty() );<BR />);로그 출력을 통해 확인 된 정확한 파일 경로가있는 5KB 엑셀 통합 문서를 내 눈으로 볼 수 있지만 여전히 실패합니다.
이상한 행동 2 : 내 JMP 테이블 중 하나의 두 열에 큰 ID 번호 ( 각각 12 자리 및 16 자리 숫자 ) JMP ( 실제로 숫자가 아니라 식별자이기 때문에 ).내가 ( 지금은 수동으로 ) 임시 폴더에서 엑셀 파일을 열면이 열은 내가 저장하는 JMP 테이블의 열이 확실히 문자 / 명목 임에도 불구하고 숫자 또는 일반으로 Excel로 읽혀집니다.이것은 Excel에서 16 자리 숫자를 처리 할 수없고 마지막 2 자리를 자르고 12 자리 숫자를 과학적 표기법으로 변환하여 두 식별자를 모두 쓸모 없게 만들기 때문에 문제가됩니다.JMP가 엑셀 파일 자체를 생성하는 경우 프로세스에서 가장 가까운 JMP- 아날로그 데이터 유형과 일치하도록 Excel 열의 데이터 유형을 설정할 수 있어야합니다.
각 데이터 테이블에 대해 임시 CSV 파일을 생성 한 다음이를 통해 JMP로 다시 가져 와서이 문제를 회피하려고했습니다. 텍스트 파일로드 , 다양한 조합을 읽을 수 있도록 열 조정 평가 삽입 ( "= TEXT (^ regexresult [1] ^, \!"############ \! ")" ) 또는 평가 삽입 ( "= '^ regexresult [1] ^") 또는 열 데이터에서 세 배의 큰 따옴표를 시도하는 것과 같은 Excel의 CSV 처리에 대해 발견 한 이상한 것들도 있습니다.이 중 어느 것도 내 데이터를 자동으로 분류하고 망칠 수있는 능력을 발휘하지 못하는 것 같기 때문에 JMP가 올바른 방식으로이 작업을 수행하도록하는 방법이 정말로 있기를 바랍니다.
세 번째 행동이 있습니다 실행 프로그램으로 시작된 엑셀 인스턴스가 종료 될 때까지 JMP가 응답하지 않는 것을 회피하고 싶지만, 이것이 해결해야 할 더 큰 문제이며 해결이 여기에서 내 주요 목표에 부차적이라고 생각합니다.
시도해 볼 일에 대한 통찰력이나 의견 / 제안은 대단히 감사하겠습니다. 감사합니다!
스크립트 태그는 try & if 문의 주석 스타일로 인해 해당 코드의 일부를 엉망으로 만들었으며 작동 코드를 제공하기 위해 주석없이 아래에 다시 게시되었습니다.
::excelpath = Trim( Run Program( Executable( "C:\Windows\System32\where.exe" ), Options( {"/R", "C:\", "excel.exe"} ), Read Function( "text" ) ) );
temppath = Convert File Path( "$TEMP", Absolute, Windows );
timestamp = Round( Tick Seconds() );
filename = "MAWJ" || Char( timestamp );
filepath = Convert File Path( temppath || filename, Absolute, Windows );
Try(
Create Excel Workbook( filepath, {::dt_wj, ::dt_ma}, {"WJ", "MA"} ),
Write( "Failed to create workbook!\!N" );
);
If( !Is File( filepath || ".xslx" ),
Write( "File does not exist!\!N" )
);
Write( "Opening with Excel..." );
Try( Run Program( Executable( ::excelpath ), Options( Eval List( {"/e", filepath} ) ) ), Write( "Failed!!!\!N" ) );
Write( "Done.\!N" );