如何通过AppleScript添加InDesign XMLElements时提高性能?
我有一个AppleScript程序,它可以在Adobe InDesign文档中创建XML标签和元素。数据在表格中,标记每个单元需要0.5秒。整个脚本需要几个小时才能完成。如何通过AppleScript添加InDesign XMLElements时提高性能?
我可以发布内部循环代码,但我不确定是否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
编辑:我改写的问题,以更好地反映正确的答案。
我想出了这一个。
该文档包含一堆数据表。总共有大约7,000个数据点需要导出。我正在为7000名儿童创建一个根元素。
不要这样做。将每个子元素添加到根元素变得越来越慢,直到大约5,000个孩子AppleScript超时并且程序中止。
解决的办法是让我的代码更脆弱,从根中创建约480个孩子,每个孩子约有16个孙子。相同数量的节点,但代码现在运行得足够快。 (处理文档仍然需要大约40分钟,但这比无限时间要少得多。)
顺便说一下,最初的7000儿童计划并不像看起来那么愚蠢或懒惰。新的解决方案迫使我使用我不控制的表中的数据将两个表连接在一起。如果有太多的空间不应该有一个空间,程序现在会中断。 (但它有效。)
我可以发布内部循环代码,但我不确定是否应该是通用的或特定的。我会让暴民决定。
您作为示例发布的代码可以与您(或您的老板)所熟悉的代码一致 - 更多情况下,更容易帮助您获得更具体的细节。
如果内部循环代码的长度合理,我看不到任何您无法发布的原因。我认为堆栈溢出旨在包含一般问题和具体问题。
问题几乎肯定是选择。无论如何,你可以一次提取所有的文本,然后遍历内部变量?
您正在使用InDesign或InDesign Server吗?您的文档有多少页(或者您可以告诉我们关于您的文档/ ID设置的其他信息)?
我做了很多InDesign Server开发。由于几个原因,您可能会看到速度放慢,这些原因不一定与代码相关。
现在,我在大约100秒内(几乎可以做更大的事情)几乎完全从script/xml生成100-300页的文档。