Come posso migliorare le prestazioni quando aggiungo XMLElements di InDesign tramite AppleScript?

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

Domanda

Ho un programma AppleScript che crea tag ed elementi XML all'interno di un documento Adobe InDesign.I dati sono nelle tabelle e l'assegnazione di tag a ciascuna cella richiede 0,5 secondi.Il completamento dell'intero script richiede diverse ore.

Posso pubblicare il codice del ciclo interno, ma non sono sicuro che SO debba essere generico o specifico.Lascerò che sia la folla a decidere.

Modifica] Il codice crea un elenco (prima di questo ciclo) che contiene un elemento per riga nella tabella.C'è anche un elenco contenente una stringa per ogni colonna della tabella.Per ogni cella, il programma crea un elemento XML e un tag XML concatenando gli elementi nelle posizioni [riga]/[colonna] dei due elenchi.Inoltre associa il testo in quella cella all'elemento appena creato.

Sono completamente nuovo in AppleScript, quindi parte di questo codice è stato modificato grossolanamente dagli esempi di Adobe.Se il codice è atroce non mi offenderò.

Ecco il codice:

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

MODIFICARE:Ho riformulato la domanda per riflettere meglio la risposta corretta.

È stato utile?

Soluzione 2

Ho capito questo.

Il documento contiene una serie di tabelle di dati.In tutto, ci sono circa 7.000 punti dati che devono essere esportati.Stavo creando un elemento radice con 7.000 bambini.

Non farlo.L'aggiunta di ciascun figlio all'elemento root è diventata sempre più lenta fino a quando circa 5.000 bambini AppleScript è scaduto e il programma è stato interrotto.

La soluzione era rendere il mio codice più fragile creando circa 480 figli dalla radice, con ogni figlio che aveva circa 16 nipoti.Stesso numero di nodi, ma il codice ora viene eseguito abbastanza velocemente.(Ci vogliono ancora circa 40 minuti per elaborare il documento, ma è infinitamente meno che infinito.)

Per inciso, il piano originale per 7.000 bambini non era così stupido o pigro come sembra.La nuova soluzione mi costringe a collegare insieme le due tabelle utilizzando i dati nelle tabelle che non controllo.Il programma ora si interromperà se c'è anche solo uno spazio dove non dovrebbe essercene uno.(Ma funziona.)

Altri suggerimenti

Il problema è quasi sicuramente la selezione.Esiste comunque la possibilità di estrarre tutto il testo in una volta e poi scorrere le variabili interne?

Posso pubblicare il codice del ciclo interno, ma non sono sicuro che SO debba essere generico o specifico.Lascerò che sia la folla a decidere.

Il codice che pubblichi come esempio può essere tanto specifico quanto tu (o il tuo capo) vi sentite a vostro agio: il più delle volte, è più facile aiutarvi con dettagli più specifici.

Se il codice del ciclo interno ha una lunghezza ragionevole, non vedo alcun motivo per cui non puoi pubblicarlo.Penso che Stack Overflow sia destinato a comprendere sia domande generali che specifiche.

Stai utilizzando InDesign o InDesign Server?Di quante pagine è il tuo documento (o quali altre informazioni puoi fornirci sulla configurazione del tuo documento/ID)?

Mi occupo molto dello sviluppo di InDesign Server.Potresti riscontrare rallentamenti per un paio di motivi che non sono necessariamente legati al codice.

In questo momento, sto generando documenti di 100-300 pagine quasi completamente da script/xml in circa 100 secondi (potresti fare qualcosa di molto più grande).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top