Wie kann ich die Leistung beim Hinzufügen von InDesign XMLElements über AppleScript verbessern?

StackOverflow https://stackoverflow.com/questions/11574

Frage

Ich habe ein AppleScript-Programm, das XML-Tags und -Elemente in einem Adobe InDesign-Dokument erstellt.Die Daten liegen in Tabellen vor und das Markieren jeder Zelle dauert 0,5 Sekunden.Die Fertigstellung des gesamten Skripts dauert mehrere Stunden.

Ich kann den inneren Schleifencode posten, bin mir aber nicht sicher, ob SO generisch oder spezifisch sein soll.Ich lasse die Mafia entscheiden.

Bearbeiten] Der Code erstellt eine Liste (vor dieser Schleife), die in der Tabelle einen Element pro Zeile enthält.Es gibt auch eine Liste mit einer Zeichenfolge für jede Spalte in der Tabelle.Für jede Zelle erstellt das Programm ein XML-Element und ein XML-Tag, indem es die Elemente an den Positionen [Zeile]/[Spalte] der beiden Listen verkettet.Außerdem wird der Text in dieser Zelle dem neu erstellten Element zugeordnet.

Da ich AppleScript noch nicht kenne, ist ein Teil dieses Codes grob aus den Adobe-Beispielen abgeändert.Wenn der Code grausam ist, werde ich nicht beleidigt sein.

Hier ist der Code:

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

BEARBEITEN:Ich habe die Frage umformuliert, um die richtige Antwort besser wiederzugeben.

War es hilfreich?

Lösung 2

Das habe ich herausgefunden.

Das Dokument enthält eine Reihe von Datentabellen.Insgesamt müssen etwa 7.000 Datenpunkte exportiert werden.Ich habe ein Stammelement mit 7.000 untergeordneten Elementen erstellt.

Tu das nicht.Das Hinzufügen jedes untergeordneten Elements zum Stammelement wurde immer langsamer, bis bei etwa 5.000 untergeordneten Elementen eine Zeitüberschreitung von AppleScript auftrat und das Programm abgebrochen wurde.

Die Lösung bestand darin, meinen Code spröder zu machen, indem ich etwa 480 untergeordnete Elemente aus dem Stammverzeichnis erstellte, wobei jedes Kind etwa 16 Enkelkinder hatte.Gleiche Anzahl an Knoten, aber der Code läuft jetzt schnell genug.(Die Verarbeitung des Dokuments dauert immer noch etwa 40 Minuten, aber das ist unendlich viel weniger Zeit als unendlich.)

Übrigens war der ursprüngliche 7.000-Kinder-Plan nicht so dumm oder so faul, wie es scheint.Die neue Lösung zwingt mich, die beiden Tabellen miteinander zu verknüpfen, indem ich Daten in den Tabellen verwende, die ich nicht kontrolliere.Das Programm bricht jetzt ab, wenn auch nur ein Leerzeichen vorhanden ist, wo keins sein sollte.(Aber es funktioniert.)

Andere Tipps

Das Problem ist mit ziemlicher Sicherheit die Auswahl.Gibt es überhaupt eine Möglichkeit, den gesamten Text auf einmal zu extrahieren und dann über interne Variablen zu iterieren?

Ich kann den inneren Schleifencode posten, bin mir aber nicht sicher, ob SO generisch oder spezifisch sein soll.Ich lasse die Mafia entscheiden.

Der Code, den Sie als Beispiel veröffentlichen, kann so spezifisch sein, wie Sie (oder Ihr Chef) möchten – in den meisten Fällen ist es einfacher, Ihnen mit spezifischeren Details zu helfen.

Wenn der innere Schleifencode eine angemessene Länge hat, sehe ich keinen Grund, warum Sie ihn nicht veröffentlichen können.Ich denke, Stack Overflow soll sowohl allgemeine als auch spezifische Fragen umfassen.

Verwenden Sie InDesign oder InDesign Server?Wie viele Seiten hat Ihr Dokument (oder welche anderen Informationen können Sie uns über Ihre Dokument-/ID-Einrichtung mitteilen)?

Ich arbeite viel an der Entwicklung von InDesign Server.Möglicherweise kommt es aus mehreren Gründen zu Verlangsamungen, die nicht unbedingt mit dem Code zusammenhängen.

Im Moment erstelle ich 100-300-seitige Dokumente fast vollständig aus Skript/XML in etwa 100 Sekunden (möglicherweise erledigen Sie etwas viel Größeres).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top