2008-08-14 16 views
7

Tôi có một chương trình AppleScript tạo thẻ XML và các phần tử trong tài liệu Adobe InDesign. Dữ liệu nằm trong các bảng và việc gắn thẻ mỗi ô sẽ mất 0,5 giây. Toàn bộ tập lệnh mất vài giờ để hoàn thành.Làm cách nào để cải thiện hiệu suất khi thêm InDesign XMLElements thông qua AppleScript?

Tôi có thể đăng mã vòng lặp bên trong, nhưng tôi không chắc liệu SO có phải là chung chung hoặc cụ thể hay không. Tôi sẽ để đám đông quyết định.

[sửa] Mã tạo danh sách (trước vòng lặp này) chứa một mục cho mỗi hàng trong bảng. Ngoài ra còn có một danh sách chứa một chuỗi cho mỗi cột trong bảng. Đối với mỗi ô, chương trình tạo ra một phần tử XML và một thẻ XML bằng cách nối các mục trong các vị trí [hàng]/[cột] của hai danh sách. Nó cũng liên kết văn bản trong ô đó với phần tử mới được tạo ra.

Tôi hoàn toàn mới đối với AppleScript nên một số mã này được sửa đổi thô sơ từ các mẫu của Adobe. Nếu mã là tàn bạo, tôi sẽ không bị xúc phạm.

Dưới đây là các mã:

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: Tôi đã viết lại các câu hỏi để phản ánh tốt hơn câu trả lời đúng.

Trả lời

1

Tôi đã tìm ra điều này.

Tài liệu chứa một loạt các bảng dữ liệu. Trong tất cả, có khoảng 7.000 điểm dữ liệu cần được xuất. Tôi đã tạo ra một phần tử gốc với 7.000 trẻ em.

Đừng làm điều đó. Việc thêm từng phần tử con vào phần tử gốc sẽ chậm hơn và chậm hơn cho đến khi khoảng 5.000 trẻ em AppleScript đã hết thời gian chờ và chương trình bị hủy bỏ.

Giải pháp là làm cho mã của tôi trở nên dễ vỡ hơn bằng cách tạo ra ~ 480 trẻ em ở gốc, với mỗi đứa trẻ có khoảng 16 đứa cháu. Cùng một số nút, nhưng mã bây giờ chạy đủ nhanh. (Nó vẫn mất khoảng 40 phút để xử lý tài liệu, nhưng đó là thời gian vô hạn ít hơn vô cùng.)

Ngẫu nhiên, kế hoạch 7.000 trẻ em ban đầu không phải là ngu ngốc hoặc lười như nó xuất hiện. Giải pháp mới là buộc tôi liên kết hai bảng với nhau bằng cách sử dụng dữ liệu trong các bảng mà tôi không kiểm soát. Chương trình bây giờ sẽ phá vỡ nếu có quá nhiều như một không gian nơi không nên có một. (Nhưng nó hoạt động.)

0

Tôi có thể đăng mã vòng lặp bên trong, nhưng tôi không chắc liệu SO có phải là chung chung hoặc cụ thể hay không. Tôi sẽ để đám đông quyết định.

Mã bạn đăng làm ví dụ có thể cụ thể như bạn (hoặc sếp của bạn) cảm thấy thoải mái - thường xuyên hơn không, giúp dễ dàng hơn với chi tiết cụ thể hơn.

0

Nếu mã vòng lặp bên trong có độ dài hợp lý, tôi không thấy lý do nào bạn không thể đăng. Tôi nghĩ Stack Overflow được dự định bao gồm cả các câu hỏi chung và cụ thể.

1

Vấn đề gần như chắc chắn là lựa chọn. Có anyway bạn có thể trích xuất tất cả các văn bản cùng một lúc sau đó lặp qua các biến nội bộ?

0

Bạn đang sử dụng Máy chủ InDesign hoặc InDesign? Bao nhiêu trang là tài liệu của bạn (hoặc bạn có thể cho chúng tôi biết thông tin nào khác về thiết lập tài liệu/ID của bạn)?

Tôi làm rất nhiều việc phát triển Máy chủ InDesign. Bạn có thể thấy chậm lại vì một vài lý do không nhất thiết liên quan đến mã.

Hiện tại, tôi đang tạo 100-300 tài liệu trang gần như hoàn toàn từ tập lệnh/xml trong khoảng 100 giây (bạn có thể đang làm điều gì đó lớn hơn nhiều).