如何在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是否存在更新其内容而不是将其添加为副本
我想我已经找到了一个解决方案,但它涉及遍历所有自定义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();
}