【问题标题】:create xml using data from excel using macro使用宏使用excel中的数据创建xml
【发布时间】:2014-09-23 19:22:07
【问题描述】:

这是我的要求 - 1)我有一个xml和对应的xsd文档 2) 这是一个复杂的 xml,具有多个元素及其层次结构。但是只有某些元素/字段是重要的 3)我想用这些字段创建一个excel,用户可以在其中输入多行数据 4)当用户点击创建xml时,应该为每一行创建单独的xml 5) 创建的 xml 应包含所有元素(用户输入 + 原始 xml 中的更多元素)

这只是一个示例-

<A>
   <A1/>
   <A2/>
</A>
<B>
   <B1>*User entered value*</B1>
   <B2>*User entered value*</B2>
</B>
<C>
   <C1/>
   <C2/>
</C>

我在 MSXML2.DOMDocument60 上找到了一些参考资料,其中可以使用此 API 创建 xml,还可以通过 excel 宏针对架构进行验证。但就我而言,有 1000 个标签。以下是我想到的一些选项-

  1. 使用DOMDocument60 API,使用宏逐行构造xml。由于有 1000 多个标签,这种方法会占用 1000 多行代码,这会使维护工作变得繁琐!
  2. 由于我有示例 xml,我可以清空现有值,然后使用用户输入的值(从 excel 单元格数据中获取)通过宏更新 xml。这似乎更有效,因为它可以节省 1000 行代码,但这可能吗?由于需要更新的元素分布在 xml 中,我是否能够搜索一个元素并仅更新该元素而不影响 xml 中的任何其他数据/标签?
  3. 可以用 xsd 做什么吗?我没有想到我的要求
  4. 还有其他选择吗?

感谢您对此的任何帮助。谢谢!

【问题讨论】:

    标签: xml excel


    【解决方案1】:

    如果你有一个基础,你可以使用类似的东西:

    Open "e:\0\xml.xml" For Input As #1
    Open "e:\0\xml1.xml" For Output As #2
    
    i = 1
    While Not EOF(1)
        Line Input #1, aa
    
        If InStr(1, aa, "<B1>", vbTextCompare) > 0 Then
            aa = Left(aa, 3 + InStr(1, aa, "<B1>", vbTextCompare)) & Cells(i, 1).Value & Right(aa, Len(aa) - InStr(1, aa, "</B1>", vbTextCompare) + 1)
            i = i + 1
        End If
    
        Print #2, aa
    Wend
    
    Close #1
    Close #2
    

    代码复制原始文件,将标记 B1 内的文本更改为 A 列中的值。
    如果你有更多的“碎片”,你可以合并不同的文件......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多