从项目中将标签导出到Excel

时间:2015-11-04 14:24:03

标签: axapta x++ dynamics-ax-2009

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

现在我正在寻找像Palle Agermark的标签导出作业(http://www.agermark.com/2011/10/export-and-import-labels-for.html),但是经过一个或多个项目并提取所有标签ID(不论标签系列)和三种语言的值到Excel。

可以这样做,任何指针? :)

2 个答案:

答案 0 :(得分:4)

这扩展了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。结果看起来像XML Labels in Excel

答案 1 :(得分:2)

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

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

  1. ax - 文件前缀
  2. SYS - 标签名称,@ SYS123标签存储在那里
  3. en-us - 语言说明符
  4. ald - 标签文件扩展名
  5. 文件采用文本格式,可以轻松导入Excel或使用文本编辑器进行编辑。

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

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