2008-08-14 6 views
7

Tengo un programa AppleScript que crea etiquetas XML y elementos dentro de un documento de Adobe InDesign. Los datos están en tablas, y etiquetar cada celda lleva .5 segundos. Todo el script tarda varias horas en completarse.¿Cómo puedo mejorar el rendimiento al agregar InDesign XMLElements a través de AppleScript?

Puedo publicar el código interno del bucle, pero no estoy seguro si SO se supone que es genérico o específico. Dejaré que la mafia decida.

[editar] El código crea una lista (antes de este ciclo) que contiene un elemento por fila en la tabla. También hay una lista que contiene una cadena para cada columna en la tabla. Para cada celda, el programa crea un elemento XML y una etiqueta XML al concatenar los elementos en las posiciones [fila]/[columna] de las dos listas. También asocia el texto en esa celda al elemento recién creado.

Soy completamente nuevo en AppleScript, por lo que parte de este código se modifica crudamente a partir de las muestras de Adobe. Si el código es atroz, no me ofenderé.

Aquí está el código:

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 

EDIT: He reformulé la pregunta para reflejar mejor la respuesta correcta.

Respuesta

1

Me di cuenta de esto.

El documento contiene varias tablas de datos. En total, hay alrededor de 7.000 puntos de datos que deben exportarse. Estaba creando un elemento raíz con 7.000 niños.

No hagas eso. La adición de cada elemento secundario al elemento raíz se hizo cada vez más lenta hasta que, en unos 5.000 niños, se agotó el tiempo de espera de AppleScript y se anuló el programa.

La solución fue hacer que mi código fuera más frágil creando ~ 480 niños de la raíz, con cada niño teniendo alrededor de 16 nietos. El mismo número de nodos, pero el código ahora se ejecuta lo suficientemente rápido. (Todavía tarda unos 40 minutos en procesar el documento, pero eso es infinitamente menos tiempo que el infinito.)

Dicho sea de paso, el plan original de 7,000 niños no era tan estúpido ni perezoso como parece. La nueva solución me obliga a unir las dos tablas usando datos en las tablas que no controlo. El programa ahora se romperá si hay tanto como un espacio donde no debería haber uno. (Pero funciona.)

0

Puedo publicar el código de bucle interno, pero no estoy seguro de si se supone que SO sea genérico o específico. Dejaré que la mafia decida.

El código que publica como ejemplo puede ser tan específico como usted (o su jefe) se sienta cómodo; la mayoría de las veces, es más fácil ayudarle con detalles más específicos.

0

Si el código interno del bucle es de una longitud razonable, no veo ninguna razón por la que no pueda publicarlo. Creo que Stack Overflow pretende abarcar preguntas tanto generales como específicas.

1

El problema es casi seguro que es el seleccionado. ¿Hay alguna forma de que puedas extraer todo el texto de una vez y luego iterar sobre las variables internas?

0

¿Está utilizando InDesign o InDesign Server? ¿Cuántas páginas tiene su documento (o qué otra información puede decirnos sobre su documento/configuración de ID)?

Hago mucho desarrollo de InDesign Server. Podría ver ralentizaciones por un par de razones que no están necesariamente relacionadas con el código.

En este momento, estoy generando documentos de 100-300 páginas casi por completo desde script/xml en aproximadamente 100 segundos (es posible que esté haciendo algo mucho más grande).

Cuestiones relacionadas