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.
Я обнаружил, что глобальное изменение таблиц — это не то, что стили таблиц и ячеек делают очень хорошо. Помимо постоянной проблемы, заключающейся в том, что «стили ячеек просто не подходят» (о чем я всегда задавался вопросом), есть слишком много вещей, которые вы не можете сделать с помощью стилей ячеек. Поэтому я долгое время полагался на сценарии для форматирования своих таблиц.
У меня есть базовая структура, настроенная для обработки различных типов выбора, и вы можете добавить к ней практически любую функциональность, которую хотите. См. статью 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
моих собственных циклов.
Куртка Janus Bahs
МиннеаполисКодер9
Куртка Janus Bahs
МиннеаполисКодер9