Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使用VBA访问导入的XML中的特定值_Excel_Xml_Vba_Xfdf - Fatal编程技术网

Excel 如何使用VBA访问导入的XML中的特定值

Excel 如何使用VBA访问导入的XML中的特定值,excel,xml,vba,xfdf,Excel,Xml,Vba,Xfdf,我有一个完整的.pdf表单XFDF,XML,我正在导入excel。目标是从XML中获取该字段的字段名和值 目前,我可以通过使用以下简单命令获得下图中的值Blue accent: list(4).text 我正在努力学习如何存储字段名。在下图中,它是以黄色突出显示的表达式/值 我已经尝试了以下的变化,但无法让它工作 List(4).Attributes(1).value 有关于如何访问嵌套值的提示吗 列表->项目4->属性->项目1->值 XFDF原始: <?xml v

我有一个完整的.pdf表单XFDF,XML,我正在导入excel。目标是从XML中获取该字段的字段名和值

目前,我可以通过使用以下简单命令获得下图中的值Blue accent:

 list(4).text        
我正在努力学习如何存储字段名。在下图中,它是以黄色突出显示的表达式/值

我已经尝试了以下的变化,但无法让它工作

List(4).Attributes(1).value
有关于如何访问嵌套值的提示吗

列表->项目4->属性->项目1->值

XFDF原始:

<?xml version="1.0" encoding="utf-16"?>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">
  <fields>
    <field name="3C_AQS_1">
      <value>2</value>
    </field>
    <field name="3C_AQS_2">
      <value>3</value>
    </field>
    <field name="3C_AQS_3">
      <value>1</value>
    </field>
    <field name="3C_AYS_1">
      <value>D:23440101</value>
    </field>
    <field name="3C_AYS_2">
      <value>D:13240101</value>
    </field>
    <field name="3C_AYS_3">
      <value>D:12340101</value>
    </field>
    <field name="3C_EEL_1">
      <value>2</value>
    </field>
    <field name="3C_EEL_2">
      <value>5</value>
    </field>
    <field name="3C_EEL_3">
      <value>2</value>
    </field>
    <field name="3C_JobProfile_1">
      <value>1235</value>
    </field>
    <field name="3C_JobProfile_2">
      <value>547</value>
    </field>
    <field name="3C_JobProfile_3">
      <value>1234 fd</value>
    </field>
    <field name="4_PME_DBT">
      <value>yuktyu</value>
    </field>
    <field name="4_PME_Launch">
      <value>ew4tw</value>
    </field>
    <field name="4_PME_Scope">
      <value>serg</value>
    </field>
    <field name="4_PPT_End">
      <value>D:19930714</value>
    </field>
    <field name="4_PPT_Start">
      <value>D:19001201</value>
    </field>
    <field name="Capital_LifeAmount">
      <value>5352</value>
    </field>
    <field name="Capital_Yr">
      <value>1</value>
    </field>
    <field name="Capital_YrAmount">
      <value>123124</value>
    </field>
    <field name="Capital_YrAmountP">
      <value>234</value>
    </field>
    <field name="CostConfidence">
      <value>Med</value>
    </field>
    <field name="Devliverables_1">
      <value>Delev 1</value>
    </field>
    <field name="Devliverables_2">
      <value>Delev 2</value>
    </field>
    <field name="Devliverables_3">
      <value>Delev 3</value>
    </field>
    <field name="Devliverables_4">
      <value>Delev 4</value>
    </field>
    <field name="Devliverables_5">
      <value>Delev 5</value>
    </field>
    <field name="HR Initiative">
      <value>HrInit</value>
    </field>
    <field name="InScope_1">
      <value>InScope 1</value>
    </field>
    <field name="InScope_2">
      <value>InScope 2</value>
    </field>
    <field name="InScope_3">
      <value>InScope 3</value>
    </field>
    <field name="InScope_4">
      <value>InScope 4</value>
    </field>
    <field name="InScope_5">
      <value>InScope 5</value>
    </field>
    <field name="In_HR_Area_1">
      <value>University Relations</value>
    </field>
    <field name="In_HR_Area_2">
      <value>Talent Development</value>
    </field>
    <field name="In_HR_Area_3">
      <value>Change Management</value>
    </field>
    <field name="In_HR_Area_4">
      <value>Global Compensation </value>
    </field>
    <field name="In_HR_Area_5">
      <value>Career Framework</value>
    </field>
    <field name="In_HR_NumEmp_1">
      <value>1</value>
    </field>
    <field name="In_HR_NumEmp_2">
      <value>42345</value>
    </field>
    <field name="In_HR_NumEmp_3">
      <value>12</value>
    </field>
    <field name="In_HR_NumEmp_4">
      <value>12</value>
    </field>
    <field name="In_HR_NumEmp_5">
      <value>11</value>
    </field>
    <field name="In_HR_NumMonth_1">
      <value>1</value>
    </field>
    <field name="In_HR_NumMonth_2">
      <value>3</value>
    </field>
    <field name="In_HR_NumMonth_3">
      <value>4</value>
    </field>
    <field name="In_HR_NumMonth_4">
      <value>5</value>
    </field>
    <field name="In_HR_NumMonth_5">
      <value>1</value>
    </field>
    <field name="In_HR_PerTime_1">
      <value>2</value>
    </field>
    <field name="In_HR_PerTime_2">
      <value>5</value>
    </field>
    <field name="In_HR_PerTime_3">
      <value>2</value>
    </field>
    <field name="In_HR_PerTime_4">
      <value>11</value>
    </field>
    <field name="In_HR_PerTime_5">
      <value>03</value>
    </field>
    <field name="Opex_LifeAmount">
      <value>23424</value>
    </field>
    <field name="Opex_Yr">
      <value>12</value>
    </field>
    <field name="Opex_YrAmount">
      <value>123123</value>
    </field>
    <field name="Opex_YrAmountP">
      <value>345235</value>
    </field>
    <field name="OutScope_1">
      <value>outScope 1</value>
    </field>
    <field name="OutScope_2">
      <value>outScope 2</value>
    </field>
    <field name="OutScope_3">
      <value>outScope 3</value>
    </field>
    <field name="OutScope_4">
      <value>outScope 4</value>
    </field>
    <field name="OutScope_5">
      <value>outScope 5</value>
    </field>
    <field name="Out_HR_Area_1">
      <value>sdfsg</value>
    </field>
    <field name="Out_HR_Area_2">
      <value>dffnjgmkgm,k</value>
    </field>
    <field name="Out_HR_Area_3">
      <value>3453wygh</value>
    </field>
    <field name="Out_HR_Area_4">
      <value>235hc bn</value>
    </field>
    <field name="Out_HR_Area_5">
      <value>234dfg435</value>
    </field>
    <field name="Out_HR_NumEmp_1">
      <value>1</value>
    </field>
    <field name="Out_HR_NumEmp_2">
      <value>6</value>
    </field>
    <field name="Out_HR_NumEmp_3">
      <value>34</value>
    </field>
    <field name="Out_HR_NumEmp_4">
      <value>2</value>
    </field>
    <field name="Out_HR_NumEmp_5">
      <value>78</value>
    </field>
    <field name="Out_HR_NumMonth_1">
      <value>23</value>
    </field>
    <field name="Out_HR_NumMonth_2">
      <value>23</value>
    </field>
    <field name="Out_HR_NumMonth_3">
      <value>1</value>
    </field>
    <field name="Out_HR_NumMonth_4">
      <value>235</value>
    </field>
    <field name="Out_HR_NumMonth_5">
      <value>52</value>
    </field>
    <field name="Out_HR_PerTime_1">
      <value>3</value>
    </field>
    <field name="Out_HR_PerTime_2">
      <value>1</value>
    </field>
    <field name="Out_HR_PerTime_3">
      <value>11</value>
    </field>
    <field name="Out_HR_PerTime_4">
      <value>1</value>
    </field>
    <field name="Out_HR_PerTime_5">
      <value>1</value>
    </field>
    <field name="Problem Statement">
      <value>Prob Statemewnt dghdheh</value>
    </field>
    <field name="ProjSponName_First">
      <value>ProjSponFirst</value>
    </field>
    <field name="ProjSponName_Last">
      <value>ProjSponLast</value>
    </field>
    <field name="Project Description">
      <value>Project Desc</value>
    </field>
    <field name="Project Name">
      <value>ProjName</value>
    </field>
    <field name="ProposedMeasure_1">
      <value>Prop meas 1 </value>
    </field>
    <field name="ProposedMeasure_2">
      <value>prop meas 2</value>
    </field>
    <field name="ProposedMeasure_3">
      <value>prop meas 3 </value>
    </field>
    <field name="ProposedMeasure_4">
      <value>prop meas 4</value>
    </field>
    <field name="ProposedMeasure_5">
      <value>prop meas 5</value>
    </field>
    <field name="Savings_Yr">
      <value>2</value>
    </field>
    <field name="Savings_YrAmount">
      <value>12313</value>
    </field>
    <field name="Savings_YrAmountP">
      <value>234254</value>
    </field>
    <field name="Submit" />
    <field name="SubmitByName_First">
      <value>SubNameFirst</value>
    </field>
    <field name="SubmitByName_Last">
      <value>SubNameLast</value>
    </field>
    <field name="TempHeadCount">
      <value>2</value>
    </field>
    <field name="TempMonths">
      <value>4</value>
    </field>
  </fields>
  <ids original="FA098893AF1E1140A46335ED9EEEA5CE" modified="A3D8A6418EFE9E439F3CADCF3350958D" />
</xfdf>
EXCEL VBA原始文件:

子AddFormData Dim FName作为字符串,FD作为文件对话框 Dim WApp作为对象,WDoc作为对象,WDR作为对象 暗ExR As范围 设置FD=Application.FileDialogmsoFileDialogOpen FD.Filters.Add PDF表单数据,*.xfdf,1 FD.Show 如果FD.SelectedItems.Count为0,则 对于yi=1到FD.SelectedItems.Count FName=FD.SelectedItemsyi ' 设置oXMLFile=CreateObjectMSXML2.DOMDocument“Microsoft.XMLDOM” XMLFileName=FName 加载XMLFileName Set List=oXMLFile.SelectNodes//fields/ ' 下一个易建联 如果结束 端接头
考虑XPath,它是一种比遍历.Item、.ChildNodes、.Attributes和其他元素集合更具表现力的解析工具。此外,在XML文档中还有一个默认名称空间xmlns=。若要解决此问题,请将冒号分隔前缀(如pdf)指定给默认命名空间,以访问其作用域中的所有节点。下面是一个通用版本,用于遍历树的嵌套级别:

设置oXMLFile=CreateObjectMSXML2.DOMDocument“Microsoft.XMLDOM” XMLFileName=FName 加载XMLFileName '临时为默认命名空间定义前缀 oXMLFile.setProperty SelectionNamespaces,xmlns:pdf=http://ns.adobe.com/xfdf/' '打印所有第三嵌套级别节点值 设置myList=oXMLFile.SelectNodes/*/*/* 对于myList中的每个变量 调试.打印变量文本 下一个变量 ' 2 ' 3 ' 1 D:23440101 D:13240101 'D:12340101 '打印所有第三层嵌套属性值 作为变量的Dim-var ... 设置myList=oXMLFile.SelectNodes/*/*/*/@* 对于myList中的每个变量 调试.打印变量文本 下一个变量 '3 C_AQS_1 '3 C_AQS_2 '3 C_AQS_3 '3 C_AYS_1 '3 C_AYS_2 '3 C_AYS_3 如果需要访问索引值,仍然可以使用XPath作为节点或属性值

'打印索引节点和属性 设置myList=oXMLFile.SelectNodes/*/*/*'移动到第二个嵌套级别 调试。打印myList0。选择SingleNode*.Text 调试。打印myList0。选择SingleNode@*.Text ' 2 '3 C_AQS_1 调试。打印myList1。选择SingleNode*.Text 调试。打印myList1。选择SingleNode@*.Text ' 3 '3 C_AQS_2 调试。打印myList2。选择SingleNode*.Text 调试。打印myList2。选择SingleNode@*.Text ' 1 '3 C_AQS_3 和在循环中

作为变量的Dim-var ... 对于myList中的每个变量 如果不是var.SelectSingleNode*则为Nothing Debug.Print var.SelectSingleNode*.Text Debug.Print var.SelectSingleNode@*.Text 如果结束 下一个变量
你能单独添加代码吗?这将提供剪切和粘贴的功能,然后提供帮助。“谢谢。”内森·萨夫补充道,谢谢!这是一个更大的程序的一部分,由于限制,我不能直接调用字段名,它会更改,并且是任意的。我需要能够通过索引/“向下走”的方法访问字段。然后删除属性条件并使用//pdf:field和循环节点列表,或者使用如myList0、myList1、myList2所示的索引。我的初始帖子已经完成了所有这一切-我需要知道如何访问嵌套属性以读取其值。我只是在寻找通过嵌套导航的正确语法。是否可以以如下格式访问它:myListn.attributes1.nodeValue n的值将发生变化,我有一个循环将在该嵌套位置查找该值。请参阅highlight查看更新的解决方案,该解决方案具有按循环或索引遍历嵌套元素的通用版本。您仍然可以使用XPath检索节点和属性值。我现在理解了,但不知道。SelectSingleNode或@、*XPath运算符。非常感谢。这种方法很有魅力。