【问题标题】:Parse Multilevel XML input using Excel VBA使用 Excel VBA 解析多级 XML 输入
【发布时间】:2014-12-16 16:43:08
【问题描述】:

通常,需要使用 Excel VBA 从 XML 解析匹配某些过滤条件的输入。复杂之处在于多级 XML 属性及其配对结果,必须在 Excel 中按顺序填充。

XML 内容如下:

<Flow index="1" item="1" itemName="BB_150" ID="XXX">
      <Attribute name="FUNCTIONAL_X" dataType="Double" unit="" multiplier="" tag="YY">1</Attribute>
      <Attribute name="X_LOC" dataType="String" unit="" multiplier="" tag="YY">2</Attribute>
</Flow>
<Flow index="2" item="2" itemName="CC_200" ID="WWW">
      <Attribute name="FUNCTIONAL_X" dataType="Double" unit="" multiplier="" tag="YY">15</Attribute>
      <Attribute name="X_LOC" dataType="String" unit="" multiplier="" tag="YY">3</Attribute>
</Flow>
<Flow index="3" item="3" itemName="DD_200" ID="UUU">
      <Attribute name="FUNCTIONAL_X" dataType="Double" unit="" multiplier="" tag="YY">20</Attribute>
      <Attribute name="X_LOC" dataType="String" unit="" multiplier="" tag="YY">1</Attribute>
</Flow>
<Flow index="4" item="4" itemName="EE_115" ID="SSS">
      <Attribute name="FUNCTIONAL_X" dataType="Double" unit="" multiplier="" tag="YY">33</Attribute>
      <Attribute name="X_LOC" dataType="String" unit="" multiplier="" tag="YY">2</Attribute>
</Flow>
  1. 如何只读取 XML 中以 Attribute 开头的那些节点?
  2. 一旦所有节点都选择了属性,Excel VBA 中的进一步解析就会开始。首先,查找 name=X_LOC 并获取值。
  3. 然后,查找 name = FUNCTIONAL_X 并检索值。
  4. 现在,需要将所有这些值放入工作表“结果”的 Excel 列中。输出到 Excel 的格式如下:

列(从A列开始..然后继续到下一列..等)标题名称= X_LOC(按升序排序和显示) 行结果(以 row1..然后 row2..etc 开始)= FUNCTIONAL_X(每个配对 X_LOC)

填充到 Excel 中的结果应如下所示:

A  B  C  D (Excel column)

1  2  3  4 (X_LOC value)

A1 B1 C1 D1 (Excel Row)

1  15 20 33 (FUNCTIONAL_X value)

注意:如果 X_LOC 重复相同的值,则什么也不做。保留现有的 X_LOC 及其 FUNCTIONAL_X 值。无需覆盖。

【问题讨论】:

    标签: xml excel vba parsing multidimensional-array


    【解决方案1】:

    在 Excel 中处理 XML 数据非常麻烦。我会坚持使用VBA。创建一个如下所示的 XML 文档,编辑它(使用 XPath 访问所需的节点/元素),然后保存它。

    Set xmlInventory = CreateObject("Msxml2.DOMDocument.6.0")
    

    文档: http://msdn.microsoft.com/en-us/library/ms756987%28v=VS.85%29.aspx

    XPath 教程: http://www.w3schools.com/xpath/default.asp

    【讨论】:

    • 谢谢,Jean..会读的。创建excel宏是分配的要求,这是功能的一部分。到目前为止,我已经设法加载 XML(在论坛好撒玛利亚人的帮助下)并从我需要的那些属性中过滤掉值。但是,将它们存储到我试图锚定 X_LOC 的多维数组中仍然出现错误。
    • 声明:Dim xmldoc As DOMDocument Dim node As IXMLDOMNodeList Dim n As IXMLDOMNode Set xmldoc = New DOMDocument I've created Set node = xmldoc.SelectNodes("//Attribute") - 查找所有包含'属性'。如果我想从该节点列表调用节点中检索其中一个节点,例如 name = X_LOC,有人可以帮我展示过滤条件的格式。
    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多