将电子表格行转换为单独的XML文件

时间:2014-11-24 06:22:44

标签: xml excel

我正在寻找一个系统,将带有几百行数据的电子表格(或CSV文件)转换为单独的XML文件。电子表格中的一列是必需的文件名,其他列将包含基于模板插入XML中特定节点的数据。

亲切的问候, 丹

修改1 如果它可以在Excel中完全处理,则为每一行创建一个新的XML,并将相关的列数据插入到XML模板的正确位置,这将是最佳结果。

3 个答案:

答案 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'" />更改为对您的文件的引用。

上面的代码未经测试,但我相信它应该可行。

编辑1:

xslt2绑定存在于许多编程语言中,并且还有独立版本。您还可以将过程拆分为两个:将xml版本保存在excel中,并将生成的xml转换为多个xml文件。

答案 1 :(得分:0)

使用VBA和MSXML2.DOMDocument可以实现如下:

假设你有一个这样的Excel表格: enter image description here

然后像这样的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文件。