这扩展了 Jan B. Kjeldsen 最后评论的想法,以从项目 xpo 文件中获取标签。标签以以下 XML 结构保存在 xpo 文件中:
<Table:Record name="TmpSysLabel" xmlns:Table='urn:www.microsoft.com/Formats/Table'>
<Table:Field name="Language">de</Table:Field>
<Table:Field name="Label">Geplante Produktionsaufträge</Table:Field>
<Table:Field name="Description"></Table:Field>
<Table:Field name="LabelId">@SYS119128</Table:Field>
<Table:Field name="SysLabelApplModule">0</Table:Field>
<Table:Field name="recVersion">0</Table:Field>
<Table:Field name="Partition">5637144576</Table:Field>
</Table:Record>
我的第一个想法是将此 XML 导入 Excel,但 Excel 不能很好地处理属性中的列名。因此,我编写了一个 xsl,将 XML 转换为如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<labels>
<record>
<Language>de</Language>
<Label>Geplante Produktionsaufträge</Label>
<Description />
<LabelId>@SYS119128</LabelId>
<SysLabelApplModule>0</SysLabelApplModule>
<recVersion>0</recVersion>
<Partition>5637144576</Partition>
</record>
</labels>
要进行此转换,必须对原始 XML 进行一些清理,将所有出现的 Table:Record 替换为 record,并将所有出现的 Table:Field 替换为 field。同时添加一个根 XML 节点 labels。它应该看起来像
<labels>
<record>
<field name="Language">de</field>
<field name="Label">Geplante Produktionsaufträge</field>
<field name="Description"></field>
<field name="LabelId">@SYS119128</field>
<field name="SysLabelApplModule">0</field>
<field name="recVersion">0</field>
<field name="Partition">5637144576</field>
</record>
</labels>
现在是有趣的部分(至少对我来说,因为我没有太多关于 xsl 语法的先验知识),xsl 转换文件。我最终得到了以下内容,它将使用 http://www.freeformatter.com/xsl-transformer.html 生成所需的 XML:
<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="no" />
<xsl:template match="/">
<labels>
<xsl:for-each select="Labels/*">
<record>
<xsl:for-each select="*">
<xsl:element name="{@name}">
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</record>
</xsl:for-each>
</labels>
</xsl:template>
</xsl:stylesheet>
然后可以使用 Excel 开发人员工具 XML 将生成的 XML 导入 Excel。结果将类似于