7

我有一个 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

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

4

5 回答 5

1

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

于 2008-08-26T17:07:13.487 回答
1

我想出了这个。

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

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

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

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

于 2008-10-23T15:33:52.443 回答
0

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

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

于 2008-08-14T19:34:54.040 回答
0

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

于 2008-08-14T19:34:54.197 回答
0

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

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

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

于 2008-09-08T20:52:00.140 回答