将Excel电子表格导出为XML,并在导出过程中或导出后按字母顺序对数组进行排序?

约翰·薄荷

我们有一个excel文档,其中有数百个字段映射到XML,还有一个宏,该宏通过十几个选项卡将数据导出到XML,用于构成通信。一切工作正常,但现在他们希望某些数据按字母顺序排序。

他们希望避免让宏对映射到数组元素的表进行排序。因此,我们想知道是否可以在导出期间/之后对数据进行排序,而无需使用另一个应用程序来运行XSLT。这可以作为excel导出的一部分吗?

以下是一些示例数据:

数据如何导出

<Grid>
   <Funds>
      <Name>Company C 2010</Name>
      <Symbol>TCON10</Symbol>
      <Replacement>New C 2010</Replacement>
      <ReplacementSymbol>CPN10</ReplacementSymbol>
   </Fund>
   <Funds>
      <Name>Company B 2020</Name>
      <Symbol>TCON20</Symbol>
      <Replacement>New B 2020</Replacement>
      <ReplacementSymbol>CPN20</ReplacementSymbol>
   </Fund>
   <Funds>
      <Name>Company A 2030</Name>
      <Symbol>TCON30</Symbol>
      <Replacement>New A 2030</Replacement>
      <ReplacementSymbol>CPN30</ReplacementSymbol>
   </Fund>
</Grid>

他们希望数据如何显示(在字段上按字母顺序排序)

<Grid>
   <Funds>
      <Name>Company A 2030</Name>
      <Symbol>TCON30</Symbol>
      <Replacement>New A 2030</Replacement>
      <ReplacementSymbol>CPN30</ReplacementSymbol>
   </Fund>
   <Funds>
     <Name>Company B 2020</Name>
     <Symbol>TCON20</Symbol>
     <Replacement>New B 2020</Replacement>
     <ReplacementSymbol>CPN20</ReplacementSymbol>
   </Fund>
   <Funds>
     <Name>Company C 2010</Name>
     <Symbol>TCON10</Symbol>
     <Replacement>New C 2010</Replacement>
     <ReplacementSymbol>CPN10</ReplacementSymbol>
   </Fund>
</Grid>

谢谢

完美的

当然可以。使用MSXML对象,可以在VBA中运行XSLT转换。您可以使用LoadXML()将XSLT嵌入为VBA字符串(如果不包含URL),也可以将其嵌入为单独的文件Load()

以下是单独的文件路径:

XSLT(另存为外部.xsl)

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" />

  <!-- IdentityTransform -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Grid">
    <xsl:copy>      
      <xsl:apply-templates select="Funds">
        <xsl:sort select="Name"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:transform>

VBA巨集

Dim xmldoc As Object, xsldoc As Object, newdoc As Object

Set xmldoc = CreateObject("MSXML2.DOMDocument")
Set xsldoc = CreateObject("MSXML2.DOMDocument")
Set newdoc = CreateObject("MSXML2.DOMDocument")

' LOAD XML
xmldoc.async = False
xmldoc.Load ActiveWorkbook.Path & "\Original.xml"  

' LOAD XSL
xsldoc.async = False
xsldoc.Load ActiveWorkbook.Path & "\XSLT_File.xsl"

' TRANSFORM
xmldoc.transformNodeToObject xsldoc, newdoc
newdoc.Save ActiveWorkbook.Path & "\Output.xml"

输出

<?xml version="1.0" encoding="UTF-8"?>
<Grid>
    <Funds>
        <Name>Company A 2030</Name>
        <Symbol>TCON30</Symbol>
        <Replacement>New A 2030</Replacement>
        <ReplacementSymbol>CPN30</ReplacementSymbol>
    </Funds>
    <Funds>
        <Name>Company B 2020</Name>
        <Symbol>TCON20</Symbol>
        <Replacement>New B 2020</Replacement>
        <ReplacementSymbol>CPN20</ReplacementSymbol>
    </Funds>
    <Funds>
        <Name>Company C 2010</Name>
        <Symbol>TCON10</Symbol>
        <Replacement>New C 2010</Replacement>
        <ReplacementSymbol>CPN10</ReplacementSymbol>
    </Funds>
</Grid>

注意:您的标签随<Funds>打开和<Fund>关闭关闭。检查这是否只是SO上的错字,还是您的原始代码正在呈现格式不正确的XML。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将变量导出到Excel电子表格

使用Google Apps脚本将Google电子表格导出为JSON(或XML)格式

使用XSLT将电子表格导出为XML时处理重复行

将电子表格中的HTMLtable导出为CSV

在Delphi XE3中使用OLE将Excel电子表格导出为PDF

使用用户表单或电子表格将 WebBrowser 导出为 PDF

将OpenXML创建的Excel电子表格导出到客户端

将Excel电子表格导出到固定宽度的文本文件?

将数据从用户窗体输出导出到Excel电子表格

将SQL查询结果导出到多选项卡Excel电子表格中

您可以根据 Laravel 中的选择导出 Excel 电子表格吗?

对谷歌电子表格中的字母进行排序

Access VBA将表格的一行导出到excel电子表格,而不是整个表格

powershell passwordlastset导出到电子表格

将过滤后的数据从表格小部件 Google AppMaker 导出到电子表格

如何从HTML表格导出到Excel电子表格?

按列数对Excel电子表格中的所有行进行排序

如何在不评估公式的情况下将电子表格导出为CSV

如何在Mac上从Excel 2016将电子表格导出到UTF-8 .csv?

打开Office电子表格,以PDF格式导出为单个大页面?

XSLT v1.0变换与多个值组合在一起,可以将Filemaker Pro XML导出到Excel电子表格

Google Script 导出电子表格到 XML 文件

无法理解从HTML导出Excel电子表格的代码

Excel VBA复选框-需要将值导出到电子表格

将Phabricator任务导出到电子表格/ CSV

C#-如何更快地将列表导出到电子表格?

将电子表格的每一行导出到单独的.txt文件

将每个电子表格导出到单独的工作簿(VBA 除外)

在Google表格电子表格中按名称对表格进行排序的脚本