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

时间:2008-08-14 19:32:03

标签: macos adobe applescript adobe-indesign

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

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

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

我是AppleScript的新手,所以这些代码中的一部分是从Adobe的样本中粗略修改的。如果代码是残暴的,我将不会被冒犯。

以下是代码:

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
编辑:我已经改写了这个问题,以便更好地反映正确答案。

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我想出了这个。

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

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

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

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

答案 2 :(得分:0)

  

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

您发布的示例代码可以与您(或您的老板)感到满意一样具体 - 通常情况下,您可以更轻松地帮助您了解更具体的细节。

答案 3 :(得分:0)

如果内循环代码是合理的长度,我看不出任何你不能发布的原因。我认为Stack Overflow旨在涵盖一般问题和具体问题。

答案 4 :(得分:0)

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

我做了很多InDesign Server开发。您可能会因为一些不一定与代码相关的原因而看到减速。

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