開いているファイルへの書き込みの試みをトラップするにはどうすればよいですか?こんにちは - 分析によって生成されたばかりの JMP グラフィックスの選択を、PowerPoint プレゼンテーションに直接保存するようにユーザーに促す JSL スクリプトがあります。ユーザーは結果のスライドをすぐに調べたいと思う可能性が高いので、PowerPoint ファイルを自動的に閉じたくありませんが、ユーザーが追加しようとするともっとスクリプトを 2 回実行してグラフィックスを追加すると、別のプログラムで開かれている可能性のあるファイルを上書きしようとしていることを知らせる JMP アラートが表示されます (もちろん、それはそうです)。
Try() 関数で失敗する可能性のある試行をトラップしようとしましたが、これはうまくいかないようです。とにかくエラーが発生します - JMP アラートはユーザーに問題が何であるかを正しく伝えますが、私はしませんプログラムの流れを中断するエラーメッセージが本当に必要です。「Is File Writable()」関数を使って事前にチェックしておけば対応できると思ったのですが、それもうまくいかないようです: PowerPoint ファイルは開いていても、書き込み可能と見なされます。
現時点では、画面にメッセージを表示しています-ファイルが既に存在する場合(明らかに私はできるcheck for) - 事前にユーザーに警告するもしも開いている場合は、先に進む前に閉じる必要がありますが、これは少し洗練されておらず、問題を実際に解決するものではありません。自動的に (a) まだ開いていないことを確認し、(b) 必要に応じて閉じる方法はありますか?
グラフィックスクリプティングRe: 開いているファイルへの書き込みをトラップするにはどうすればよいですか?ジムとクレイジに感謝します - 私は今、あなたの両方の推奨事項の融合である実用的なソリューションを手に入れました.JMP アラートがログに送信されていなかったため、「Batch Interactive」コマンドを使用する必要がありましたが、logcapture() コマンドを機能させることができませんでしたが、<< get log() は必要なことを実行しました。
毎回ログをクリアする必要があることに注意してください。そうしないと、後続の実行ごとに同じエラー メッセージが表示されます。念のため、最終スクリプトの簡略版を以下に示します。(2 番目の "Batch Interactive(bi) term" は、インタラクティブな JMP Alert を再び有効にすると推測していますが、そうですか?)
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)
)
);Re: 開いているファイルへの書き込みをトラップするにはどうすればよいですか?txt = logcapture(...jsl that might make log messages...)
も同じアプローチに役立つ可能性があります。
編集:必要かもしれませんデータベース接続エラーの作成また、BatchInteractive() を使用してダイアログを抑制し、ログ メッセージを取得する方法も示しています。 ...とバッチインタラクティブの詳細.
Re: 開いているファイルへの書き込みをトラップするにはどうすればよいですか?使用できます
mylist = get log();
次に、mylist を解析して、警告が発生したかどうかを確認し、発生した場合は、必要なアクションを実行します。