2017-06-20 2 views
0

私は現在解決できない問題を抱えています。 pptxでワークシートを取得すると、保存時にCOM-Exceptionsが取得されます。テストでは、SaveAs()またはSaveCopyAs()を実行しようとすると、プレゼンテーションがまだ完全にロードされていないためです。Powerpoint Interop:プレゼンテーションが完全に読み込まれたときを検出する方法

しかし、Presentation-ObjectまたはApplication-Objectにイベントやプロパティがないことに気付きました。これは、プレゼンテーションが完全にロードされた時期を示す可能性があります。また、AddIn-Express(私たちが使用するプラグイン)にはそれにリンクされたイベントはありません。

は、プレゼンテーション内のすべてのシェイプ/コンテンツは以下のようなamateuristicコードに頼ることなく、完全にロードされている場合、我々はテストすることができますどのような方法があります:

現在のダーティー修正:(このコードは実際に私の目を傷つける)

bool hasNotBeenSaved = true; 
while (hasNotBeenSaved) { 
    try { 
     PowerPointApp.ActivePresentation.SaveAs(filePath); 
     hasNotBeenSaved = false; 
    } catch (Exception ex) { 
     log("AddInModule - PowerpointPanel - SaveAs() Enter exception clause"); 
     Threading.Thread.Sleep(100); 
    } 
} 

答えて

0

PPTXファイルが以前のOpen状態から正常に終了しなかったため、COM例外が発生した可能性があります。 pptxファイルを保存した後にMarshal.ReleaseCOMObject(オブジェクト)メソッドを試してみて、投げエラー?を再試行できますか?あなたのコードは、参考のために

Marshal.ReleaseComObject(powerPointApp); 

Marshal.releaseCOMObject

ノートを参照してください、のようになります。彼らは強制的にされている場合にも、あなたのタスクマネージャで何PPTXインスタンスが実行されていないことを確認する必要がある場合があります「終了」それらを選択して「タスクの終了」をクリックしてください。

希望の方はこちら!ありがとう!

+0

エラーは、SaveAs()にスローされます。ファイルは常に開いたままでなければなりません。だから私は本当にCOMObjectsを解放することはできません。また、Powerpoint.exeプロセスは1つしか実行されていません。 – User999999

関連する問題