问题:如何处理由父PPT流程创建的子Excel窗口?
如果Excel窗口中的某些数据发生更改,则以下是用于更新PPT Chart的代码。
protected void UpdateSlide()
{
using (PresentationWrapper presentation = ParentSlide.Parent)
using (DocumentWindowWrapper window = presentation.Windows[0]) // !!! here is the place where Com oject is maintained but needs to be released
{
window.Activate();
}
}
这是不释放Com对象的包装器。
public class DocumentWindowWrapper : ComWrapper<ppt.DocumentWindow>, IWindow
{
DocumentWindowWrapper wrapper;
public static DocumentWindowWrapper CreateWrapper(ppt.DocumentWindow wrappedObject)
wrapper = new DocumentWindowWrapper(wrappedObject);
return wrapper;
}
public override void Dispose()
{
Marshal.ReleaseComObject(...); // !!! what should I put here to release this window?
base.Dispose();
}
}
这是我正在谈论的窗口。
答案 0 :(得分:0)
应使用ReleaseComObject方法释放底层COM对象( wrappedObject )。
答案 1 :(得分:0)
代码应如下所示:
开始使用工作表:
Worksheets sheets = excelApp.Worksheets;
Worksheet sheet = sheets.Open(...);
然后发布(它们总是以创建的相反顺序发布):
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(sheets);