通过 AppleScript 添加 InDesign XMLElements 时如何提高性能?

Posted

技术标签:

【中文标题】通过 AppleScript 添加 InDesign XMLElements 时如何提高性能?【英文标题】:How can I improve performance when adding InDesign XMLElements via AppleScript? 【发布时间】:2010-09-05 21:50:35 【问题描述】:

我有一个 AppleScript 程序,它在 Adob​​e InDesign 文档中创建 XML 标记和元素。数据在表格中,标记每个单元格需要 0.5 秒。整个脚本需要几个小时才能完成。

我可以发布内部循环代码,但我不确定 SO 应该是通用的还是特定的。我会让暴徒决定。

[编辑] 该代码构建了一个列表(在此循环之前),其中包含表中每行一个项目。还有一个列表,其中包含表中每一列的一个字符串。对于每个单元格,程序通过连接两个列表的 [row]/[column] 位置中的项目来创建一个 XML 元素和一个 XML 标记。它还将该单元格中的文本与新创建的元素相关联。

我对 AppleScript 完全陌生,因此其中一些代码是从 Adob​​e 的示例中粗略修改的。如果代码很糟糕,我不会生气。

代码如下:

repeat with columnNumber from COL_START to COL_END

    select text of cell ((columnNumber as string) & ":" & (rowNumber as string)) of ThisTable

    tell activeDocument

        set thisXmlTag to make XML tag with properties name:item rowNumber of symbolList & "_" & item columnNumber of my histLabelList

        tell rootXmlElement

            set thisXmlElement to make XML element with properties markup tag:thisXmlTag

        end tell

        set contents of thisXmlElement to (selection as string)

    end tell

end repeat

编辑:我已经改写了问题以更好地反映正确答案。

【问题讨论】:

【参考方案1】:

问题几乎可以肯定是选择。无论如何,您可以一次提取所有文本然后迭代内部变量吗?

【讨论】:

【参考方案2】:

我想出了这个。

文档包含一堆数据表。总共有大约 7,000 个数据点需要导出。我正在创建一个包含 7,000 个子元素的根元素。

不要那样做。将每个子元素添加到根元素变得越来越慢,直到大约 5,000 个子元素 AppleScript 超时并且程序中止。

解决方案是通过创建大约 480 个子节点来使我的代码更脆弱,每个子节点有大约 16 个孙子节点。相同数量的节点,但代码现在运行得足够快。 (处理文档仍然需要大约 40 分钟,但这比 infinity 的时间要少得多。)

顺便说一句,最初的 7000 名儿童计划并不像看起来那样愚蠢或懒惰。新的解决方案迫使我使用我无法控制的表中的数据将两个表链接在一起。如果有这么多不应该有的空间,程序现在就会中断。 (但它有效。)

【讨论】:

【参考方案3】:

我可以发布内部循环代码,但我不确定 SO 应该是通用的还是特定的。我会让暴徒决定。

您作为示例发布的代码可以是您(或您的老板)所熟悉的具体代码 - 通常情况下,更具体的细节更容易帮助您。

【讨论】:

【参考方案4】:

如果内部循环代码的长度合理,我看不出有什么理由不能发布它。我认为 Stack Overflow 旨在涵盖一般问题和特定问题。

【讨论】:

【参考方案5】:

您使用的是 InDesign 还是 InDesign Server?您的文档有多少页(或者您可以告诉我们有关您的文档/ID 设置的其他信息)?

我做了很多 InDesign Server 开发。由于一些不一定与代码相关的原因,您可能会看到速度变慢。

现在,我在大约 100 秒内几乎完全从 script/xml 生成了 100-300 页文档(您可能正在做更大的事情)。

【讨论】:

以上是关于通过 AppleScript 添加 InDesign XMLElements 时如何提高性能?的主要内容,如果未能解决你的问题,请参考以下文章

在 Dock 上使用 AppleScript 为应用程序添加自定义菜单项

通过 AppleScript 从 iMessage 发送 GIF

通过 AppleScript 构建并运行一个 xcode 项目

AppleScript 使用文本文件作为源将 iTunes 中的多个曲目添加到播放列表中

通过applescript设置鼠标跟踪速度

通过 AppleScript 设置屏幕共享密码