C# 正在检索没有名称空间的Office.customeXMLparts
我正在尝试使用它的CustomXMLParts组件将一些数据存储在Excel文件中。 我也很努力地失败了 我有以下代码:C# 正在检索没有名称空间的Office.customeXMLparts,c#,xml,vb.net,excel,xpath,C#,Xml,Vb.net,Excel,Xpath,我正在尝试使用它的CustomXMLParts组件将一些数据存储在Excel文件中。 我也很努力地失败了 我有以下代码: Public Shared Sub AddSettingsXMLToDocument() Dim xmlPart As XElement = <SoftwareName xmlns="myNamespace"> <Settings>
Public Shared Sub AddSettingsXMLToDocument()
Dim xmlPart As XElement =
<SoftwareName xmlns="myNamespace">
<Settings>
<FormVersion></FormVersion>
<FormPassword>"Password"</FormPassword>
<DatabaseRequiresAdminMode></DatabaseRequiresAdminMode>
</Settings>
</SoftwareName>
Dim aWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
aWorkbook.CustomXMLParts.Add(xmlPart.ToString(), System.Type.Missing)
End Sub
Public Shared Function GetSettingsXMLFromDocument() As String
Dim aWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
'GET THE ENTIRE THING
Dim retrievedXMLParts As Office.CustomXMLParts = aWorkbook.CustomXMLParts.SelectByNamespace("myNamespace")
Dim customXMLPart As Office.CustomXMLPart = retrievedXMLParts2.Cast(Of Office.CustomXMLPart)().FirstOrDefault()
'TRYING TO GET A SPECIFIC FIELD
Dim formField As Office.CustomXMLNode = customXMLPart2.SelectSingleNode("XpathExpression")
If (Not IsNothing(formField)) Then _
MsgBox("FINALLY GOT MY NODE! " & vbNewLine & d1.XML)
If (IsNothing(formField)) Then _
MsgBox("ARG")
Return FormField.XML
End Function
公共共享子添加设置xmltodocument()
Dim xmlPart作为XElement=
“密码”
将工作簿设置为Excel.Workbook=Globals.ThisAddIn.Application.ActiveWorkbook
aWorkbook.CustomXMLParts.Add(xmlPart.ToString(),System.Type.Missing)
端接头
公共共享函数GetSettingsXMLFromDocument()作为字符串
将工作簿设置为Excel.Workbook=Globals.ThisAddIn.Application.ActiveWorkbook
“把一切都弄清楚
Dim retrievedXMLParts作为Office.CustomXMLParts=aWorkbook.CustomXMLParts.SelectByNamespace(“myNamespace”)
Dim customXMLPart As Office.customXMLPart=retrievedXMLParts2.Cast(Of Office.customXMLPart)(.FirstOrDefault)()
'尝试获取特定字段
将表单字段设置为Office.CustomXMLNode=customXMLPart2。选择SingleNode(“XpathExpression”)
如果(notisnothing(formField))那么_
MsgBox(“终于找到我的节点了!”&vbNewLine&d1.XML)
如果(IsNothing(formField))那么_
MsgBox(“ARG”)
返回FormField.XML
端函数
我感兴趣的是:
将表单字段设置为Office.CustomXMLNode=customXMLPart2。选择SingleNode(“XpathExpression”)
我已经尝试了Xpath表达式的每一个方面,除了“*/”之外,我收到了一个空值
我还读了一篇关于名称空间的文章,但它不能作为Office与VSTO一起使用。CustomXMLParts不允许您使用NamespaceManager参数重载函数。
如何在Office.CustomXMLParts之外构建数据?
如何更新工作簿.CustomXMLParts?
非常感谢
编辑:我要离开几天。我非常感谢你的意见!不幸的是,在我返回之前,我无法确认任何解决方案。如果您真的找不到注册名称空间前缀并在XPath中使用它的方法,那么您可以通过忽略名称空间并按其本地名称筛选节点。例如(为了可读性而格式化):
谢谢它就像一个符咒!我找不到关于这种语法的任何信息,所以我必须在这件事上做功课。
//*[local-name()='SoftwareName']
/*[local-name()='Settings']
/*[local-name()='FormPassword']