Сохранить и перезаписать CustomXMLParts - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть методы, которые читают и записывают сериализованный объект в CustomXMLPart документа PowerPoint. В настоящее время, если я внесу изменения в объект и запишу его обратно в 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);
}

1 Ответ

1 голос
/ 26 февраля 2020

Просто удалите существующую перед добавлением новой, не знаю, как на самом деле перезаписать ее, вот как я это делаю.

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();
...