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