열린 파일에 대한 쓰기 시도를 어떻게 트랩할 수 있습니까?안녕하세요. 방금 분석에 의해 생성된 JMP 그래픽 선택을 PowerPoint 프레젠테이션에 직접 저장하라는 메시지를 표시하는 JSL 스크립트가 있습니다.사용자는 결과 슬라이드를 즉시 검사하기를 원할 것이므로 PowerPoint 파일을 자동으로 닫고 싶지 않습니다. 그러나 사용자가 다음 슬라이드를 추가하려고 하면 더 스크립트를 두 번째 실행하여 그래픽에 추가하면 다른 프로그램(물론 해당)에서 열려 있는 파일을 덮어쓰려고 한다는 JMP 경고가 표시됩니다.
Try() 함수로 실패할 수 있는 시도를 트래핑하려고 시도했지만 작동하지 않는 것 같습니다. 어쨌든 오류가 발생합니다. 그리고 JMP 경고가 사용자에게 문제가 무엇인지 올바르게 알려주지만 실제로 프로그램의 흐름을 방해하는 오류 메시지를 원합니다."Is File Writable()" 기능을 사용하여 미리 확인하면 해결될 거라고 생각했는데 그것도 안되는 것 같습니다. PowerPoint 파일 ~이다 열려 있어도 쓰기 가능한 것으로 간주됩니다.
현재 화면에 메시지를 표시하고 있습니다. 파일이 이미 존재하는 경우(분명히 ~ 할 수있다 확인) - 사전에 사용자에게 경고 만약 열려 있고 계속 진행하기 전에 닫아야 합니다. 그러나 이것은 다소 부자연스럽고 실제로 문제를 해결하지 못합니다.자동으로 (a) 이미 열려 있지 않은지 확인하고 (b) 필요한 경우 닫는 방법이 있습니까?
제도법스크립팅Re: 열린 파일에 대한 쓰기 시도를 어떻게 트랩할 수 있습니까?당신이 사용할 수있는
mylist = get log();
그런 다음 mylist를 구문 분석하여 경고가 발생했는지 확인하고 발생한 경우 취하려는 조치를 취하십시오.
Re: 열린 파일에 대한 쓰기 시도를 어떻게 트랩할 수 있습니까?txt = logcapture(...jsl that might make log messages...)
동일한 접근 방식으로 도움이 될 수도 있습니다.
편집: 필요할 수도 있습니다 데이터베이스 연결 생성 오류 또한 BatchInteractive()를 사용하여 대화 상자를 표시하지 않고 로그 메시지만 가져오는 방법을 보여줍니다. ...그리고 일괄 대화식에 대한 추가 정보 .
Re: 열린 파일에 대한 쓰기 시도를 어떻게 트랩할 수 있습니까?Jim과 Craige에게 감사드립니다. 이제 두 권장 사항을 결합한 작업 솔루션이 생겼습니다.JMP 경고가 로그로 전송되지 않았기 때문에 "Batch Interactive" 명령을 사용해야 했지만 logcapture() 명령이 작동하도록 할 수 없었지만 << get log()는 필요한 작업을 수행했습니다.
매번 로그를 지워야 합니다. 그렇지 않으면 모든 후속 실행에서 동일한 오류 메시지가 표시됩니다.기록을 위해 아래에 최종 스크립트의 제거된 버전을 포함했습니다.(두 번째 "Batch Interactive(bi) 용어가 대화형 JMP 경고를 다시 켜는 것 같습니다. 맞습니까?"
OutputFileName = "$DESKTOP\My Slides.pptx";
if(not(file exists(OutputFileName)),
// No possible problem here;
Text Box("New File - First Page") << save presentation(OutputFileName);
caption("You've just started a new presentation - here it is..."); wait(2); caption(remove);
open(OutputFileName)
,
// The file exists but it might be open - so be wary;
bi = Batch Interactive( 1 );
// If I don't clear the log first, it will tell me there's an error even when there isn't;
clear log();
Text Box("Existing File - Next Page") << save presentation(OutputFileName, append);
Error_List = get log();
if(contains(concat items(Error_List), "Unable to overwrite"),
beep();
caption("You can't write to the file\!rbecause it's open right now.\!rPlease close it, then try again.");
wait(3);
caption(remove);
Batch Interactive(bi)
,
caption("Here's the updated presentation with your latest slide"); wait(2); caption(remove);
open(OutputFileName)
)
);