Powerpoint Interop:如何检测演示文稿完全加载

问题描述:

我目前遇到了无法解决的问题。当我们在pptx中有一个工作表时,保存时会得到COM-Exceptions。根据我们的测试,这是因为当我们尝试执行SaveAs()SaveCopyAs()时,演示文稿尚未完全加载。Powerpoint Interop:如何检测演示文稿完全加载

但是我们注意到Presentation-ObjectApplication-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); 
    } 
} 

COM异常可能是由于PPTX文件无法从先前的打开状态正确关闭引起的。你可以在保存pptx文件后尝试Marshal.ReleaseCOMObject(object)方法,如果抛出错误,请重试。您的代码会是这样的,

Marshal.ReleaseComObject(powerPointApp); 

参考请参阅 Marshal.releaseCOMObject

注意:您可能还必须确保在你的任务管理器不PPTX实例正在运行,如果他们强行“结束”他们通过选择他们并点击“结束任务”。

希望这有助于!谢谢!

+0

错误在SaveAs()上抛出。该文件必须始终保持打开状态。所以我不能真正发布任何COMObjects。还有一个Powerpoint.exe - 进程正在运行。 – User999999