【发布时间】:2010-04-13 17:01:06
【问题描述】:
将 XML 中的 112K 行转换为 Excel 视图的最快(最省力,而不是超级性能)方法是什么。
【问题讨论】:
将 XML 中的 112K 行转换为 Excel 视图的最快(最省力,而不是超级性能)方法是什么。
【问题讨论】:
为什么这么复杂?只需使用 File->Open 打开文件 选择xml并加载它。看看会发生什么。
【讨论】:
如果您使用 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>
【讨论】:
如果您有 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
【讨论】:
可能只是用某种高级语言(JAVA、C# 等都有这样的工具)读取 XML,将文件写成 .csv 文件,然后使用 Data->Import 功能将其导入 excel。
可能有更好的方法,不过这是一种简单的方法。
【讨论】:
rsdmx 包,以便 R 轻松读取 R 中的 SDMX 数据集,将其转换为表格 R 对象 (@987654323 @),然后将其导出到 csv 或 excel。请参阅github.com/opensdmx/rsdmx/wiki 了解如何读取 SDMX 数据并转换为data.frame 的示例,然后使用write.csv 或write.table 导出数据。
【讨论】: