【问题标题】:Exporting labels to Excel from a project将标签从项目导出到 Excel
【发布时间】:2015-11-04 14:24:03
【问题描述】:

我有一个小问题 - 我必须列出几个大型共享项目的所有标签,以便更新缺少翻译的标签。

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

这个可以实现吗,求指点? :)

【问题讨论】:

  • 在大型共享项目中是什么意思?您是指在项目内部的任何元素属性上使用的所有标签,以及在该项目的一侧使用标签的代码中的任何地方吗?或者您感兴趣的项目中是否存储了实际的标签文件?您知道您可以右键单击并导出标签文件而且它只是纯文本吗?你是想用代码来解决这个问题,还是你真的只是想找到丢失的翻译,还是有这么多标签文件本身?如果它缺少翻译,你可能只是打开并抽查。
  • “您的意思是项目内部任何元素属性上使用的所有标签,以及项目内部使用标签的代码中的任何位置吗?”这。这些项目有几十个或一百多个不同的对象。手动检查所有内容并将它们复制到 Excel 中需要大量的时间和理智。这不是为了好玩,无论如何:)
  • 我想知道您是否可以将项目导出到 xpo 文件并简单地 grep 从中取出相关数据。
  • 这将需要有人手动从标签文件/标签编辑器中提取翻译并将所有内容放入 Excel。这是我想要实现的目标:imgur.com/2Xn8e0k

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


【解决方案1】:

这扩展了 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。结果将类似于

【讨论】:

  • 不错!谢谢,我想这会做到的:)
【解决方案2】:

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

在 AX 2009 中,标签存储在应用程序文件夹中,并像 axSYSen-us.ald 一样命名,包含以下部分:

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

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

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

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

【讨论】:

  • 是的,但这不会只给我某些项目中使用的标签。
  • 然后导出项目并使用 XPO 文件中的输出。在使用之前需要对输入进行更多的清理,但是 XPO 的标签部分是 XML 格式的;它应该很容易转换为制表符分隔或类似的格式。
  • 另外,您可以使用 SysLabel API 访问标签:msdn.microsoft.com/en-us/library/gg952024.aspx。再次扫描 XPO 输出将是每个项目标签列表的最快方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2023-04-04
  • 2018-01-19
相关资源
最近更新 更多