将标签从项目导出到 Excel

Exporting labels to Excel from a project

我有一个小问题 - 我必须列出几个大型共享项目的所有标签,因此缺少翻译的标签会被识别更新。

现在我正在寻找的是类似于 Palle Agermark 的标签导出作业 (http://www.agermark.com/2011/10/export-and-import-labels-for.html),但它会经历一个或多个项目并提取所有标签 ID(无论标签系列如何)和值Excel.

三种语言

这个可以做吗,有指点吗? :)

最简单的解决方案是直接转到标签源。

在 AX 2009 中,标签存储在应用程序文件夹中,名称类似于 axSYSen-us.ald,包含以下部分:

  1. ax - 文件前缀
  2. SYS - 标签名称,@SYS123 标签存储在那里
  3. en-us - 语言说明符
  4. ald - 标签文件扩展名

文件为文本格式,可以轻松导入 Excel 或使用文本编辑器进行编辑。

您可以导入到 Excel,每个标签文件一个 sheet,然后使用 Excel 将输出合并到单独的 sheet(在同一工作簿中)公式。

在 AX 2012 中,标签存储在模型数据库中,.ald 文件在启动时创建。

这扩展了 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>

然后可以使用 XML 的 Excel 开发人员工具将生成的 XML 导入 Excel。结果看起来像