Одна из причин повышения эффективности - 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] означает крайнюю левую ячейку):