Я импортировал XML, который содержит вложенные таблицы, и создал скрипт для удаления всех пустых ячеек, который выглядит следующим образом:
var myDocument = app.activeDocument;
for(var i=myDocument.textFrames.length-1; i>=0; i--){
for(var j=myDocument.textFrames[i].tables.length-1; j>=0; j--){
for(var k=myDocument.textFrames[i].tables[j].rows.length-1; k>=0; k--){
myContents = 0;
for(var l=myDocument.textFrames[i].tables[j].rows[k].cells.length-1; l>=0; l--){
if (myDocument.textFrames[i].tables[j].rows[k].cells[l].contents != "") myContents++;
}
if (myContents == 0) myDocument.textFrames[i].tables[j].rows[k].remove();
}
}
}
Это работает для обычной таблицы, но в моем XML-документе, содержащем таблицы, он не удаляет пустые ячейки, даже если он попадает в правильный оператор if.
У кого-нибудь есть решения?
Как упоминалось в комментарии, пустые строки, которые не были найдены сценарием, — это те, которые находятся в таблице, полностью вложенной в большую таблицу.
Логика скрипта их не видит; он только просматривает таблицы «немедленно» внутри текстовых фреймов. Чтобы исправить это, ему нужен отдельный цикл внутри цикла Table, специально проверяющий наличие вложенных таблиц. (Что плохо масштабируется — если внутри этих таблиц могут быть таблицы внутри таблиц, нужен еще один цикл. Лучше написать отдельную функцию , которая может вызывать себя рекурсивно; тогда она работает с таблицами-в-таблицах-в- столы в...)
Дополнительное незначительное улучшение заключается в том, что цикл не по текстовым фреймам , а по целым историям . (Что, помимо скорости, также имеет то преимущество, что таблицы с вытесненным текстом также обрабатываются.)
В целом, для вложенных таблиц должен работать следующий полный скрипт:
var myDocument = app.activeDocument;
for(var i=0; i<myDocument.stories.length; i++)
{
for(var j=0; j<myDocument.stories[i].tables.length; j++)
{
processTable(myDocument.stories[i].tables[j]);
}
}
function processTable (any_table)
{
var r,c,t, isEmpty;
for (r=any_table.rows.length-1; r>=0; r--)
{
isEmpty = true;
for (c=0; c< any_table.rows[r].cells.length; c++)
{
for (t=0; t<any_table.rows[r].cells[c].tables.length; t++)
processTable (any_table.rows[r].cells[c].tables[t]);
if (any_table.rows[r].cells[c].contents != '')
isEmpty = false;
}
if (isEmpty)
any_table.rows[r].remove();
}
}
Jongware
переулки123
переулки123
Jongware
переулки123
Jongware