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

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

编辑]代码构建列表(在此循环之前),该循环中包含每个行中的一个项目。还有一个列表,其中表中的每一列包含一个字符串。对于每个单元格,程序通过连接两个列表的 [行]/[列] 位置中的项目来创建一个 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

编辑:我重新表述了问题以更好地反映正确答案。

有帮助吗?

解决方案 2

我想出了这个。

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

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

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

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

其他提示

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

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

您作为示例发布的代码可以是您(或您的老板)满意的具体代码 - 通常,它更容易帮助您提供更具体的细节。

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

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

我进行了大量的 InDesign Server 开发。您可能会因为一些不一定与代码相关的原因而看到速度变慢。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top