【问题标题】:Quick convert XML to Excel [closed]快速将 XML 转换为 Excel [关闭]
【发布时间】:2010-04-13 17:01:06
【问题描述】:

将 XML 中的 112K 行转换为 Excel 视图的最快(最省力,而不是超级性能)方法是什么。

【问题讨论】:

    标签: xml excel xslt


    【解决方案1】:

    为什么这么复杂?只需使用 File->Open 打开文件 选择xml并加载它。看看会发生什么。

    【讨论】:

    • XML 是否需要任何格式才能使用?
    【解决方案2】:

    如果您使用 Excel 2007 并希望使用 XSLT,最好的办法可能是使用 EXPath Zip Module 功能来修改现有的 Excel .xslx 文件。

    不过,我的首选方案是使用小型 Excel VBA 宏。

    我在下面包含了一个名为“加载”的 VBA 过程的示例代码 - 此示例使用 XML DOM,因此您的 XML 的所有 112K 行将首先加载到内存中,但如果性能不是问题,则更简单比 SAX 替代方案。

    您需要修改xpathToExtractRow 以适应您的XML 输入结构。还假设 XML 行元素的直接子节点包含您希望作为文本节点导入的单元格数据,如果没有,您将需要使用 SelectNode 调用来获取您需要的数据。

    Private dom As DOMDocument60

    公共子加载()

    Dim nodeList As IXMLDOMNodeList
    Dim nodeRow As IXMLDOMNode
    Dim nodeCell As IXMLDOMNode
    Dim rowCount As Integer
    Dim cellCount As Integer
    Dim rowRange As Range
    Dim cellRange As Range
    Dim sheet As Worksheet
    
    Dim xpathToExtractRow As String
    xpathToExtractRow = "/feed/row"
    
    Set dom = New DOMDocument60
    dom.load ("c:\test\source.xml")
    Set sheet = ActiveSheet
    Set nodeList = dom.SelectNodes(xpathToExtractRow)
    
    rowCount = 0
    For Each nodeRow In nodeList
        rowCount = rowCount + 1
        cellCount = 0
        For Each nodeCell In nodeRow.ChildNodes
            cellCount = cellCount + 1
            Set cellRange = sheet.Cells(rowCount, cellCount)
            cellRange.Value = nodeCell.Text
        Next nodeCell
    Next nodeRow
    

    结束子

    示例输入 XML:

    <?xml version="1.0" encoding="utf-8"?>
    <feed>
      <row>
        <firstname>joe</firstname>
        <lastname>smith</lastname>
        <country>jamaica</country>
      </row>
      <row>
        <firstname>bill</firstname>
        <lastname>coots</lastname>
        <country>uk</country>
      </row>
    </feed>
    

    【讨论】:

      【解决方案3】:

      如果您有 Windows 7+,请使用 PowerShell。它非常快速和简单。

      单线:

      ([xml](Get-Content myfile.xml)).xml.note | Export-Csv myoutput.csv
      

      要使单行器工作,您需要修改 .xml.note 代码以反映 XML 文件的结构。

      myfile.xml的如下内容为例:

      <xml>
      <note>
        <to>Tove</to>
        <from>Jani</from>
        <heading>Reminder</heading>
        <body>Don't forget me this weekend!</body>
      </note>
      <note>
        <to>Jason</to>
        <from>Alice</from>
        <heading>Help</heading>
        <body>I can't figure this out.</body>
      </note>
      </xml>
      

      您可以将 XML 分配给这样的变量:

      [xml]$data = Get-Content myfile.xml
      

      现在你可以做各种各样的事情了:

      $data.GetElementsByTagName('note')
      

      或者干脆

      $data.xml.note.from
      

      【讨论】:

      • 由于某种原因,一个班轮给我带来了一个错误,但是通过将它分配给一个变量来打破它是有效的。谢谢罗兰。
      【解决方案4】:

      可能只是用某种高级语言(JAVA、C# 等都有这样的工具)读取 XML,将文件写成 .csv 文件,然后使用 Data->Import 功能将其导入 excel。

      可能有更好的方法,不过这是一种简单的方法。

      【讨论】:

      • 在此评论的同一行中,另一个中间体可以是 R 平台和 rsdmx 包,以便 R 轻松读取 R 中的 SDMX 数据集,将其转换为表格 R 对象 (@987654323 @),然后将其导出到 csv 或 excel。请参阅github.com/opensdmx/rsdmx/wiki 了解如何读取 SDMX 数据并转换为data.frame 的示例,然后使用write.csvwrite.table 导出数据。
      【解决方案5】:
      1. 打开 XML 文件。
      2. 右键单击页面并选择“导出到 Microsoft Excel”。
      3. 点击打开的excel页面,选择导入。
      4. Excel 将通知您它将创建自己的架构。点击确定。
      5. Excel 会询问您将数据放在哪里,并且默认设置为 $A$1 单元格。点击确定。
      6. 完成:)

      【讨论】:

      • “打开 XML 文件”用什么应用程序?
      猜你喜欢
      • 2016-04-03
      • 1970-01-01
      • 2015-08-02
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      相关资源
      最近更新 更多