Скрипт высоты строки InDesign?

InDesign игнорирует высоту строк при импорте листа Excel. Высота каждой первой и второй строки была по умолчанию (20), высота каждой третьей строки была 10. Кто-нибудь знает, могу ли я выполнить эти чередующиеся высоты строк в моей импортированной таблице InDesign? Возможно, с помощью javascript? Я использовал этот цикл VBA в Excel:

'starting at row 3 and ending at row 2000, change row height to 10, skip 3 rows, repeat.
For x = 3 To 2000 Step 3


    Rows(x).RowHeight = 10

Next

Вот пример того, что я собираюсь сделать в InDesign.

Для чего эти строки? Мне кажется, что они нужны только для того, чтобы дать дополнительное расстояние между соседними рядами. Если это все, для чего вы их используете, вероятно, проще просто удалить их полностью и просто применить стиль ячейки, который добавляет X мм отступа внизу ячейки к каждой другой строке.
Спасибо за вашу помощь @Janus Bahs Jacquet. Я почти на месте! Да, строки нужны только для того, чтобы дать дополнительный интервал, поэтому я удалил их и теперь следую вашему подходу. Однако я не верю, что вы можете добавлять отступы попеременно. То есть «Параметры таблицы» содержат чередующиеся шаблоны для обводки и заливки, но « Параметры ячейки» не содержат чередующихся шаблонов для заполнения.
Нет, я не думаю, что вы можете сделать это настолько автоматически; вам придется вручную применить стиль к отдельным строкам. Разве что есть вариант с полосатым стилем, которого навскидку не припомню, но мне так не кажется.
@JanusBahsJacquet, тогда все будет хорошо. Большое спасибо за вашу помощь :)

Ответы (1)

Я обнаружил, что глобальное изменение таблиц — это не то, что стили таблиц и ячеек делают очень хорошо. Помимо постоянной проблемы, заключающейся в том, что «стили ячеек просто не подходят» (о чем я всегда задавался вопросом), есть слишком много вещей, которые вы не можете сделать с помощью стилей ячеек. Поэтому я долгое время полагался на сценарии для форматирования своих таблиц.

У меня есть базовая структура, настроенная для обработки различных типов выбора, и вы можете добавить к ней практически любую функциональность, которую хотите. См. статью InDesignSecrets Tackling Tables through Scripting, которую я написал об этом, чтобы получить полную информацию, а также пару советов о том, что вы можете с этим сделать!

Добавить немного места только под нечетными строками очень просто — первые функции здесь — это «каркас», работа над каждой таблицей выполняется в последней функции:

app.doScript(checkUserSelection, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Process Table");

function checkUserSelection ()
{
    var a_table = checkWhichTable();
    if (a_table == null)
    {
        if (confirm("No table selected. Do you want to process *all* tables?") == false)
            return;
        allTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
        for (aTable=0; aTable<allTables.length; aTable++)
        {
            processTable (allTables[aTable]);
        }
    } else
    {
        processTable (a_table);
    }
}

function checkWhichTable()
{
// ensure the user made a selection
    if (app.selection.length != 1)
        return null;
    var currentTable = app.selection[0];
    if (currentTable.hasOwnProperty("baseline"))
    {
        currentTable = app.selection[0].parent;
    }
    while (currentTable instanceof Cell || currentTable instanceof Row || currentTable instanceof Column);
    currentTable = currentTable.parent;
    if (!(currentTable instanceof Table))
    {
        // No table selected
        return null;
    }
    return currentTable;
}

function processTable(table)
{
    // do something here!
    var r;
    for (r=2; r<table.rows.length; r+=3)
        table.rows[r].cells.everyItem().bottomInset = "20pt";
}

Функция processTable— это место, где происходит волшебство; в этом случае я изменил нижнюю вставку, чтобы 20ptдобавить немного пробела под каждой ячейкой в ​​выбранных строках. ( Эта everyItem()штука — это уловка, когда все ячейки в строке адресуются одновременно. Чтобы правильно объяснить это, требуется больше знаний, чем у меня есть; я знаю только, как это использовать :) Часть 1, если она вас интересует (и это только часть 1!).)

Если вы хотите изменить только высоту строки (что приводит к немного другому результату с ячейками, содержащими более одной строки), вы также можете сделать это:

function processTable(table)
{
    // do something here!
    var r;
    for (r=2; r<table.rows.length; r+=3)
        table.rows[r].height = "30pt";
}

Обратите внимание, что Javascript начинает считать свои строки с 0, а не с 1. Если я правильно помню, VBA по умолчанию начинается с 1; и поэтому ваш собственный 3будет 2в Javascript.

Javascript не любит доступ к несуществующим элементам. Ваш собственный цикл доходит до 2000, и я думаю, что это значение, о котором вы подумали, что «конечно, этого будет достаточно» (вплоть до того момента, когда вы столкнетесь с таблицей, где это не так), но в Javascript вы получите сообщение об ошибке, если стол короче. Таким образом, явный тест внутри lengthмоих собственных циклов.