保存并覆盖 CustomXMLParts

Save and overwrite CustomXMLParts

我有一些方法可以读取序列化对象并将其写入 PowerPoint 文档的 CustomXMLPart。 目前,如果我对对象进行更改并将其写回 XMLPart,它会创建一个新的 XMLPart。有没有办法覆盖现有的 XMLPart?还是我必须删除现有的然后添加新的?

读取方法:

private void Application_AfterPresentationOpen(PowerPoint.Presentation presentation)
{
    Office.CustomXMLParts settingsXmlParts = presentation.CustomXMLParts.SelectByNamespace("Document.Settings");

    if (settingsXmlParts.Count <= 0)
    {
        return;
    }

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Settings));
    using StringReader streamReader = new StringReader(settingsXmlParts[1].XML);

    _ = (Settings)xmlSerializer.Deserialize(streamReader);
}

写入方法:

private void Application_PresentationBeforeSave(PowerPoint.Presentation presentation, ref bool cancel)
{
    if (!ResultsAreLoaded)
    {
        return;
    }

    Settings settings = new Settings();

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Settings));
    using StringWriter stringWriter = new StringWriter();
    xmlSerializer.Serialize(stringWriter, settings);

    _ = presentation.CustomXMLParts.Add(stringWriter.ToString(), missing);
}

在添加新的之前简单地删除现有的,不知道有什么方法可以真正覆盖它,我就是这样做的。

Office.CustomXMLParts settingsXmlParts = presentation.CustomXMLParts.SelectByNamespace("Document.Settings");
foreach (var settingsXmlPart in settingsXmlParts)
     settingsXmlPart.Delete();

或者

Office.CustomXMLPart settingsXmlPart = presentation.CustomXMLParts.SelectByNamespace("Document.Settings").FirstOrDefault();
if (settingsXmlPart != null)
     settingsXmlPart.Delete();