代码之家  ›  专栏  ›  技术社区  ›  JPLemme

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

  •  7
  • JPLemme  · 技术社区  · 18 年前

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

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

    代码构建了一个列表(在此循环之前),其中表中每行包含一项。还有一个列表,表中每列包含一个字符串。对于每个单元格,程序通过连接两个列表的[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 回复  |  直到 18 年前
        1
  •  1
  •   Mike Heinz    18 年前

        2
  •  1
  •   JPLemme    18 年前

    我想出来了。

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

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

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

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

        3
  •  0
  •   Greg Hurlman    18 年前

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

    您作为示例发布的代码可以具体到您(或您的老板)满意的程度-通常情况下,更容易帮助您了解更具体的细节。

        4
  •  0
  •   Derek Park    18 年前

        5
  •  0
  •   Eric    18 年前

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

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