我们有一个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] 删除。
我来说两句