我正在寻找一个系统,将带有几百行数据的电子表格(或CSV文件)转换为单独的XML文件。电子表格中的一列是必需的文件名,其他列将包含基于模板插入XML中特定节点的数据。
亲切的问候, 丹
修改1 如果它可以在Excel中完全处理,则为每一行创建一个新的XML,并将相关的列数据插入到XML模板的正确位置,这将是最佳结果。
答案 0 :(得分:0)
我会去xslt2路径。将文件另存为csv
,然后您可以使用xslt模板,例如:http://andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html将其转换为xml。
编辑模板,以便在需要新文件时创建新的xsl:result-document。基本上你应该编辑包含
的行<row>
<xsl:variable name="lineItems" select="fn:getTokens(.)" as="xs:string+" />
创建新的<row>
元素,并用以下内容替换它们:
<xsl:variable name="lineItems" select="fn:getTokens(.)" as="xs:string+" />
<xsl:result-document href="$lineItems[1]">
同时将</row>
替换为</xsl:result-document>
当然您应该将模板更改为输出需求,并将<xsl:param name="pathToCSV" select="'file:///c:/csv.csv'" />
更改为对您的文件的引用。
上面的代码未经测试,但我相信它应该可行。
xslt2
绑定存在于许多编程语言中,并且还有独立版本。您还可以将过程拆分为两个:将xml版本保存在excel中,并将生成的xml转换为多个xml文件。
答案 1 :(得分:0)
使用VBA和MSXML2.DOMDocument可以实现如下:
假设你有一个这样的Excel表格:
然后像这样的VBA应该为每一行创建一个XML文件:
Sub testXLStoXML()
sTemplateXML = _
"<?xml version='1.0'?>" + vbNewLine + _
"<data>" + vbNewLine + _
" <name>" + vbNewLine + _
" </name>" + vbNewLine + _
" <birthdate>" + vbNewLine + _
" </birthdate>" + vbNewLine + _
" <amount>" + vbNewLine + _
" </amount>" + vbNewLine + _
"</data>" + vbNewLine
Set doc = CreateObject("MSXML2.DOMDocument")
doc.async = False
doc.validateOnParse = False
doc.resolveExternals = False
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 2 To lLastRow
sFile = .Cells(lRow, 1).Value
sName = .Cells(lRow, 2).Value
sBirthdate = Format(.Cells(lRow, 3).Value, "YYYY-MM-DD")
sAmount = Format(.Cells(lRow, 4).Value, "Currency")
doc.LoadXML sTemplateXML
doc.getElementsByTagName("name")(0).appendChild doc.createTextNode(sName)
doc.getElementsByTagName("birthdate")(0).appendChild doc.createTextNode(sBirthdate)
doc.getElementsByTagName("amount")(0).appendChild doc.createTextNode(sAmount)
doc.Save sFile
Next
End With
End Sub
答案 2 :(得分:0)
感谢这个伟大的榜样。转换超过25行的超大型Excel电子表格时,我建议如下:
select *
from MyTable
where CHARINDEX('73', MyString) = 6
再次感谢这个很好的例子,它将非常大的电子表格转换成适合从导入到其他系统的XML文件。