Скрипт Adobe InDesign для воздействия только на выбранную таблицу/Текстовый фрейм

#scripting #adobe-indesign #extendscript

Вопрос:

Я новичок в написании сценариев и скопировал этот ниже, и он отлично работает, но не все таблицы одинаковы в документе, и я просто хочу повлиять на выбранные таблицы/текстовые фреймы. Есть ли простой способ заставить этот код работать так, как я хочу?

 var myDoc = app.activeDocument;
var myWidths = [.5,.35,.44,.44];
for(var T=0; T < myDoc.textFrames.length; T  ){
for(var i=0; i < myDoc.textFrames[T].tables.length; i  ){
for(var j=0; j < myWidths.length; j  ){
myDoc.textFrames[T].tables[i].columns[j].width = myWidths[j];
}
}
}
 

Спасибо за любую помощь, только начинаю погружаться в сценарии InDesign и разбираться в них.

Ответ №1:

Да, это можно сделать довольно легко:

 var myWidths = [.5,.35,.44,.44];

var sel = app.selection;
if (sel.length != 1) exit();
var frame = sel[0];
if (frame.constructor.name != 'TextFrame') exit();

for (var i = 0; i < frame.tables.length; i  ) {
    for (var j = 0; j < myWidths.length; j  ) {
        frame.tables[i].columns[j].width = myWidths[j];
    }
}
 

Он будет работать для одного выделенного текстового фрейма.

Если вам нужно обработать несколько выбранных кадров, вот еще один вариант кода:

 var myWidths = [.5,.35,.44,.44];
var frames = app.selection
var f = frames.length

while(f--) {
    if (frames[f].constructor.name != 'TextFrame') continue; 
    var tables = frames[f].tables;
    var t = tables.length;
    while(t--) {
        var table = tables[t];
        var c = table.columns.length;
        while(c--) {
            table.columns[c].width = myWidths[c];
        }
    }
}