Pergunta

Eu tenho um programa AppleScript que cria tags e elementos XML em um documento do Adobe InDesign.Os dados estão em tabelas e a marcação de cada célula leva 0,5 segundos.O script inteiro leva várias horas para ser concluído.

Posso postar o código do loop interno, mas não tenho certeza se o SO deve ser genérico ou específico.Vou deixar a multidão decidir.

Editar] O código constrói uma lista (antes deste loop) que contém um item por linha na tabela.Há também uma lista contendo uma string para cada coluna da tabela.Para cada célula, o programa cria um elemento XML e uma tag XML concatenando os itens nas posições [linha]/[coluna] das duas listas.Também associa o texto dessa célula ao elemento recém-criado.

Sou completamente novo no AppleScript, então parte desse código foi modificado grosseiramente a partir dos exemplos da Adobe.Se o código for atroz, não ficarei ofendido.

Aqui está o 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

EDITAR:Reformulei a pergunta para refletir melhor a resposta correta.

Foi útil?

Solução 2

Eu descobri isso.

O documento contém várias tabelas de dados.Ao todo, existem cerca de 7.000 pontos de dados que precisam ser exportados.Eu estava criando um elemento raiz com 7.000 filhos.

Não faça isso.Adicionar cada filho ao elemento raiz ficou cada vez mais lento até que cerca de 5.000 filhos o AppleScript atingiu o tempo limite e o programa foi abortado.

A solução foi tornar meu código mais frágil, criando cerca de 480 filhos a partir da raiz, com cada filho tendo cerca de 16 netos.O mesmo número de nós, mas o código agora é executado com rapidez suficiente.(Ainda leva cerca de 40 minutos para processar o documento, mas é infinitamente menos tempo do que infinito.)

Aliás, o plano original de 7.000 crianças não era tão estúpido ou preguiçoso quanto parece.A nova solução está me forçando a vincular as duas tabelas usando dados das tabelas que não controlo.O programa agora será interrompido se houver espaço onde não deveria haver.(Mas funciona.)

Outras dicas

O problema é quase certamente a seleção.Existe alguma maneira de extrair todo o texto de uma vez e depois iterar sobre variáveis ​​internas?

Posso postar o código do loop interno, mas não tenho certeza se o SO deve ser genérico ou específico.Vou deixar a multidão decidir.

O código que você publica como exemplo pode ser tão específico quanto você (ou seu chefe) se sentir confortável - na maioria das vezes, é mais fácil ajudá-lo com detalhes mais específicos.

Se o código do loop interno tiver um comprimento razoável, não vejo nenhum motivo para você não poder publicá-lo.Acho que o Stack Overflow pretende abranger questões gerais e específicas.

Você está usando o InDesign ou o InDesign Server?Quantas páginas tem o seu documento (ou que outras informações você pode nos fornecer sobre a configuração do seu documento/ID)?

Eu faço muito desenvolvimento no InDesign Server.Você pode estar vendo lentidão por alguns motivos que não estão necessariamente relacionados ao código.

No momento, estou gerando documentos de 100 a 300 páginas quase completamente a partir de script/xml em cerca de 100 segundos (você pode estar fazendo algo muito maior).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top