Одна из причин повышения эффективности - InDesign в таком случае передает параметры в виде массива, а не каждый по отдельности, отсюда и скачок в производительности.

Изменим часть скрипта, относящуюся к форматированию ячеек. Введем две переменные - для доступа ко всем ячейкам и ко всем строкам:

with(myTable.cells)

{

cellsTbl = itemByRange(firstltem(), lastltemO);

)

with(myTable.rows)

{

rowsTbl = itemByRange(firstltem(), lastltemO);

)

Почему мы задаем отдельно две переменные? Ведь, по логике, через строку можно перейти к содержащимся в ней ячейкам? Однако на самом деле это не так. Как уже упоминалось, InDesign при использовании метода itemByRange о заданный диапазон трактует как массив, поэтому проще использовать именно раздельное обращение.

Таким образом, для форматирования текста в таблице можем записать:

with(cellsTbl)

{

texts[0].appIyStyle(pS [pSA ['Table contents']], true); Конструкция texts [0] используется для обращения к текстовому содержимому ячейки, поскольку применить метод appiystyle о к ячейке невозможно. Первый параметр - индекс стиля (это индекс мы определили раньше), вто рой параметр (true) говорит о том, что текущее форматирование текста будет очищено. Горизонтальное выравнивание в ячейке - по центру.

verticalJustification = 1667591796; Следующий шаг - установка необходимой'высоты для каждой ячейки соответственно ее содержимому. В InDesign для строк и ячеек существует свойство autoGrow, что избавляет нас от решения этой задачи собственными методами:

autoGrow = true; Наконец, задаем параметры оформления:

toplnset = VERT_INSET; bottomlnset = VERT_INSET; leftlnset = DE F_SIDE_INSET; rightInset = DE F_SIDE_INSET;

)

На данном этапе все основные операции на уровне отдельных ячеек выполнены. Осталось заняться объектами более высокого уровня. Выполняем ряд операций над таблицей:

with(myTable)

{

alternatingFills = AlternatingFillsTypes.alternatingRows; // чередовать

// заливку по строкам

startRowFillCount = 1;

startRowFillColor = alterFill; // первый используемый цвет

endRowFillColor = "None"; // второй используемый цвет

startRowFillTint = 100; // плотность цвета

skipFirstAlternatingFillRows =1; // начальная строка Следующий шаг- определение необходимой ширины таблицы. Исходя из практических требований, было выбрано, что если количество колонок больше 5, таблица однозначно должна быть широкой. Если колонок меньше и пользователь не указал явно в диалоговом окне, что таблица должна быть широкой, делаем ее узкой:

width = (columns.length < 5 |I table_W == narrow_column_width) ? narrow_column_width : wide; Настало время задать выключку влево для крайнего левого столбца. Как уже упоминалось, метод itemByRange () воздействует только на те элементы, к которым он применяется, поэтому раньше (когда работали на уровне всех ячеек таблицы) мы не могли получить доступ к столбцам. Поэтому используем переменную rowsTbi, дающую доступ к строкам, и в каждом ряду воздействуем только на самую первую ячейку (порядок ячеек в InDesign идет слева направо, поэтому для рядов cells [0] означает крайнюю левую ячейку):


⇐ вернуться назад | | далее ⇒