通过AppleScript添加InDesign XMLElements时如何提高性能?
我有一个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
编辑:我改写了这个问题,以更好地反映正确答案。
解决方案
回答
I can post the inner loop code, but I'm not sure if SO is supposed to be generic or specific. I'll let the mob decide.
作为示例,我们发布的代码通常是我们(或者老板)习惯的具体情况,它可以提供更具体的细节,因此更加容易。
回答
如果内部循环代码的长度合理,那么我看不到任何无法发布的原因。我认为堆栈溢出旨在包含一般性问题和特定性问题。
回答
问题几乎可以肯定是选择。无论如何,我们可以一次提取所有文本,然后遍历内部变量吗?
回答
我们正在使用InDesign还是InDesign Server?文档有几页(或者我们能告诉我们有关文档/ ID设置的哪些其他信息)?
我做了很多InDesign Server开发。我们可能会因为某些不一定与代码相关的原因而看到速度变慢。
现在,我大约在100秒内几乎完全从script / xml生成了100-300页的文档(我们可能做的事情要大得多)。
回答
我想通了。
该文档包含一堆数据表。总共需要导出大约7,000个数据点。我创建了一个有7,000个孩子的根元素。
不要那样做将每个子代添加到根元素的速度越来越慢,直到大约5,000个子代AppleScript超时并且程序中止。
解决方案是通过从头创建约480个子代,每个子代大约有16个孙代,从而使我的代码更加脆弱。相同数量的节点,但是代码现在可以足够快地运行。 (处理文档仍需要大约40分钟,但这比无限远地少了很多。)
顺便说一句,最初的7,000个孩子计划并不像看上去那样愚蠢或者懒惰。新的解决方案迫使我使用我无法控制的表中的数据将两个表链接在一起。现在,如果有太多空间不应该存在,那么程序将中断。 (但是可以。)