[ID CC-CC2021] Header Rows to Body во всех таблицах

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Здравствуйте, уважаемые.
Подскажите, как в JS все Header Rows во всех таблицах активного документа конвертировать в Body Rows?
Indesign 15 (CC 2020).
Спасибо.
 

iv-mi

15 лет на форуме
Сообщения
565
Реакции
381
Вот тут решается обратная задача - первые строки превратить в заголовки.
Наверное, можно взять как идею и приспособить к своей задаче.
 
  • Спасибо
Реакции: es1305

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Похоже обязательно. После пересохранения файлов Word-а через Google Documents почему-то все строки в таблицах с недавнего времени получают аттрибут Header row. Иного способа нормализовать текст с сохранением локального форматирования я не знаю, увы. Если подскажете, тоже буду благодарен
 

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Вот тут решается обратная задача - первые строки превратить в заголовки.
Наверное, можно взять как идею и приспособить к своей задаче.
пытался и неоднократно, в том числе и по этому обсуждению. Вот кстати, подскажите, понятно что по всем таблицам пробежаться в цикле, а по строкам, нужен вложенный цикл или как-то через row.everyItem() можно?
 

densen

15 лет на форуме
Сообщения
765
Реакции
656
Подскажите, как в JS все Header Rows во всех таблицах активного документа конвертировать в Body Rows?
Попробуйте вот так:
JavaScript:
app.activeDocument.stories.everyItem().tables.everyItem().rows.everyItem().properties = {rowType:RowTypes.BODY_ROW};
Этим скриптом каждой строке из всех таблиц документа присваивается свойство Body Rows. Но скрипт работает странно, так как если в таблице имеются два Header Rows или больше, то скрипт исправляет только самый нижний из них, оставляя верхние без изменения. Но с каждым запуском скрипта их становится всё меньше, пока их число не становится равным нулю.
 
  • Спасибо
Реакции: es1305

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Попробуйте вот так:
JavaScript:
app.activeDocument.stories.everyItem().tables.everyItem().rows.everyItem().properties = {rowType:RowTypes.BODY_ROW};
Этим скриптом каждой строке из всех таблиц документа присваивается свойство Body Rows. Но скрипт работает странно, так как если в таблице имеются два Header Rows или больше, то скрипт исправляет только самый нижний из них, оставляя верхние без изменения. Но с каждым запуском скрипта их становится всё меньше, пока их число не становится равным нулю.
Такой своеобразный юмор от JavaScript :) Спасибо огромное
 

Flame

Unregistered user
20 лет на форуме
Сообщения
1 334
Реакции
66
Если вручную проходить ряды в обратном порядке, то без юмора обойдется

JavaScript:
var myTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
for (var i = 0; i < myTables.length; i++) {
    for (var j = myTables[i].rows.length - 1; j > -1; j--) {
        var myRow = myTables[i].rows[j];
        if (myRow.rowType != RowTypes.BODY_ROW) {
            try {
                myRow.properties = {
                    rowType: RowTypes.BODY_ROW
                };
            } catch (e) {
                alert('Problem in table ' + myRow.contents);
                alert(e);
            }
        }
    }
}
 
Последнее редактирование:
  • Спасибо
Реакции: Drawer, es1305 и densen

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Если вручную проходить ряды в обратном порядке, то без юмора обойдется

JavaScript:
var myTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
for (var i = 0; i < myTables.length; i++) {
    for (var j = myTables[i].rows.length - 1; j > -1; j--) {
        var myRow = myTables[i].rows[j];
        if (myRow.rowType != RowTypes.BODY_ROW) {
            try {
                myRow.properties = {
                    rowType: RowTypes.BODY_ROW
                };
            } catch (e) {
                alert('Problem in table ' + myRow.contents);
                alert(e);
            }
        }
    }
}
Класс. Про обратный порядок даже и не подумал бы. А что можно сделать с проблемными строками? Не понимаю, это какие-то объединённые ячейки что ли... Достаточно много остаётся
 

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Да, проверил. Спотыкается именно на объединённых ячайках и не обрабатывает их. В остальном всё отлично, благодарю всех откликнувшихся
 

densen

15 лет на форуме
Сообщения
765
Реакции
656
Да, проверил. Спотыкается именно на объединённых ячайках и не обрабатывает их. В остальном всё отлично, благодарю всех откликнувшихся
Тогда придется применить запрещенный прием - применять свойство не к строкам, а к ячейкам.

JavaScript:
var myTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
for (var i = 0; i < myTables.length; i++) {
    for (var j = myTables[i].cells.length - 1; j > -1; j--) {
        var myRow = myTables[i].cells[j];
        if (myRow.rowType != RowTypes.BODY_ROW) {
            try {
                myRow.properties = {
                    rowType: RowTypes.BODY_ROW
                };
            } catch (e) {}
        }
    }
}
 
Последнее редактирование:
  • Спасибо
Реакции: es1305

es1305

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
0
Тогда придется применить запрещенный прием - применять свойство не к строкам, а к ячейкам.

JavaScript:
var myTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
for (var i = 0; i < myTables.length; i++) {
    for (var j = myTables[i].cells.length - 1; j > -1; j--) {
        var myRow = myTables[i].cells[j];
        if (myRow.rowType != RowTypes.BODY_ROW) {
            try {
                myRow.properties = {
                    rowType: RowTypes.BODY_ROW
                };
            } catch (e) {}
        }
    }
}
А так можно было? 😄