Powerpoint Interop:如何检测演示文稿完全加载
问题描述:
我目前遇到了无法解决的问题。当我们在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);
}
}
答
COM异常可能是由于PPTX文件无法从先前的打开状态正确关闭引起的。你可以在保存pptx文件后尝试Marshal.ReleaseCOMObject(object)方法,如果抛出错误,请重试。您的代码会是这样的,
Marshal.ReleaseComObject(powerPointApp);
参考请参阅 Marshal.releaseCOMObject
注意:您可能还必须确保在你的任务管理器不PPTX实例正在运行,如果他们强行“结束”他们通过选择他们并点击“结束任务”。
希望这有助于!谢谢!
错误在SaveAs()上抛出。该文件必须始终保持打开状态。所以我不能真正发布任何COMObjects。还有一个Powerpoint.exe - 进程正在运行。 – User999999