如何在Excel 2010/2013中修改自定义XML部分

本文关键字:修改 自定义 XML 部分 2013 Excel 2010 | 更新日期: 2023-09-27 18:10:02

我试图弄清楚如何修改以前保存在Excel中的自定义XML部分。到目前为止,我找到的所有web资源都解释了如何在Excel中添加自定义XML部分。这个我已经知道了。但是我想修改现有的部分。

API似乎只有Add方法。如果再次调用Add方法,它将添加额外的XML部分。

我使用以下代码来保存我的自定义XML

XNamespace NS = "http://schema.blabla.com";
var xDoc = new XDocument(
            new XDeclaration("1.0", "utf-8", "no"),
            new XComment("Custom XML Parts demo"),
            new XElement(NS + "demo",
                new XElement(NS + "config",
                    new XElement(NS + "property",
                        new XAttribute("value", "myVlaue",                  
                        new XAttribute("key", "myKey"))))));
Office.CustomXMLPart customXMLPart = workbook.CustomXMLParts.Add(xDoc.ToString(), System.Type.Missing);

我使用以下代码来检索自定义XML

var retrievedXMLParts = workbook.CustomXMLParts.SelectByNamespace(NS.NamespaceName);
//FirstOrDefault always returns first saved data, LastOrDefault needs to be called to get the latest            
//var customXMLPart = retrievedXMLParts.Cast<CustomXMLPart>().FirstOrDefault();
var customXMLPart = retrievedXMLParts.Cast<CustomXMLPart>().LastOrDefault();
var propertiesXML = customXMLPart != null ? customXMLPart.XML : String.Empty;

我想要实现的是检查自定义XML是否存在更新其内容而不是将其添加为副本

如何在Excel 2010/2013中修改自定义XML部分

我想我已经找到了一个解决方案,但它涉及遍历所有自定义XML部分,删除您想要更新的部分,然后再次添加:

IEnumerator e = workbook.CustomXMLParts.GetEnumerator();
CustomXMLPart p;
while (e.MoveNext())
{
    p = (CustomXMLPart) e.Current;
    //p.BuiltIn will be true for internal buildin excel parts 
    if (p != null && !p.BuiltIn && p.NamespaceURI == NS.NamespaceName)
        p.Delete();
}