[ID CC-CC2021] Ошибка объединенных ячеек.

vas76

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
3
JavaScript:
var currentTable = app.selection[0].parent instanceof Cell ? app.selection[0].parent.parent : (app.selection[0].parent instanceof Row ? app.selection[0].parent.parent.parent : (app.selection[0].parent instanceof Column ? app.selection[0].parent.parent.parent.parent : (app.selection[0].parent instanceof Table ? app.selection[0].parent : null)));
var allCells = currentTable.cells.everyItem().getElements();
for (var i = 0; i < allCells.length; i++)
       {if (allCells[i].leftEdgeStrokeWeight > 0)  allCells[i].leftEdgeStrokeWeight = 0.15;
         if (allCells[i].rightEdgeStrokeWeight > 0)  allCells[i].rightEdgeStrokeWeight = 0.15;}

Скрипт делает видимые границы заданной толщиной. Но выдает ошибку, если в таблице есть объединенные вертикальные ячейки.
Снимок.JPG

Помогите разобраться, откуда ошибка. Как обойти.
 
Последнее редактирование:

Drawer

Участник
Сообщения
1 816
Реакции
799
JavaScript:
for (var i = 0; i < allCells.length; i++) {
    if (allCells[i].leftEdgeStrokeWeight > 0)  allCells[i].leftEdgeStrokeWeight = 0.15;
}         
for (var i = 0; i < allCells.length; i++) {
    if (allCells[i].rightEdgeStrokeWeight > 0)  allCells[i].rightEdgeStrokeWeight = 0.15;
}
 
  • Спасибо
Реакции: vas76

vas76

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
3
Неожиданное решение. Спасибо!

Под спойлером рабочий скрипт с описанием, вдруг кому пригодится.
В таблице под курсором меняет все видимые границы на черный, 0.15мм (значения задаются в начале скрипта) и удаляет заливку ячеек.
JavaScript:
var doc = app.activeDocument; // Получение активного документа
var SWeight = 0.15; // Установка толщины линии
var SColor = doc.colors.itemByName("Black"); // Получение цвета "Black" из документа

// Определение переменной currentTable. Проверка того, что курсор находится внутри таблицы.
var currentTable = app.selection[0].parent instanceof Cell ? // Проверка, является ли родитель выделенного элемента ячейкой
                                                        app.selection[0].parent.parent : // Если да, то возвращаем таблицу (родителя ячейки)
                                                        (app.selection[0].parent instanceof Row ? // Если нет, проверяем, является ли родитель строкой
                                                        app.selection[0].parent.parent.parent : // Если да, возвращаем таблицу (родителя родителя строки)
                                                        (app.selection[0].parent instanceof Column ? // Если нет, проверяем, является ли родитель столбцом
                                                        app.selection[0].parent.parent.parent.parent : // Если да, возвращаем таблицу (родителя родителя столбца)
                                                        (app.selection[0].parent instanceof Table ? // Если нет, проверяем, является ли родитель таблицей
                                                        app.selection[0].parent : // Если да, возвращаем таблицу
                                                        null))); // Если ни одно из условий не выполнено, возвращаем null

// Если переменная currentTable не равна null, выполняем иначе сообщение и выход.
if (currentTable !== null) {

    // Код заключен в тело функции main() для отмены всей работы программы одной отменой
    function main() {
        var allCells = currentTable.cells.everyItem().getElements(); // Получение всех ячеек в таблице

        // Установка толщины линии и цвета границы для левых границ ячеек
        for (var i = 0; i < allCells.length; i++) {
            if (allCells[i].leftEdgeStrokeWeight > 0) {
                allCells[i].leftEdgeStrokeWeight = SWeight;
                allCells[i].leftEdgeStrokeColor = SColor;
            }
        }

        // Установка толщины линии и цвета границы для правых границ ячеек
        for (var i = 0; i < allCells.length; i++) {
            if (allCells[i].rightEdgeStrokeWeight > 0) {
                allCells[i].rightEdgeStrokeWeight = SWeight;
                allCells[i].rightEdgeStrokeColor = SColor;
            }
        }

        // Установка толщины линии и цвета границы для верхних границ ячеек
        for (var i = 0; i < allCells.length; i++) {
            if (allCells[i].topEdgeStrokeWeight > 0) {
                allCells[i].topEdgeStrokeWeight = SWeight;
                allCells[i].topEdgeStrokeColor = SColor;
            }
        }

        // Установка толщины линии и цвета границы для нижних границ ячеек
        for (var i = 0; i < allCells.length; i++) {
            if (allCells[i].bottomEdgeStrokeWeight > 0) {
                allCells[i].bottomEdgeStrokeWeight = SWeight;
                allCells[i].bottomEdgeStrokeColor = SColor;
            }
        }

        // Установка цвета заливки ячеек в "None"
        for (var i = 0; i < allCells.length; i++) {
            allCells[i].fillColor = "None";
        }
    }

    // Выполнение функции main() с использованием панели истории действий для возможности отмены всех действий скрипта
    app.doScript(main, undefined, undefined, UndoModes.ENTIRE_SCRIPT);
} else {
    alert("Курсор не находится внутри таблицы!"); // Если курсор не находится внутри таблицы, выводится предупреждение
}
 
  • Спасибо
Реакции: Chiga, Flame и Jeine

vas76

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
3
JavaScript:
for (var i = 0; i < allCells.length; i++) {
    if (allCells[i].leftEdgeStrokeWeight > 0)  allCells[i].leftEdgeStrokeWeight = 0.15;
}        
for (var i = 0; i < allCells.length; i++) {
    if (allCells[i].rightEdgeStrokeWeight > 0)  allCells[i].rightEdgeStrokeWeight = 0.15;
}
Все равно ошибка. В таблице как на скриншоте.

Снимок2.JPG

Снимок.JPG
 

Drawer

Участник
Сообщения
1 816
Реакции
799
Все равно ошибка
Это другая ошибка :)
Попробуйте так
Код:
        for (var i = 0; i < allCells.length; i++) {
            try {
                if (allCells[i].topEdgeStrokeWeight > 0) {
                    allCells[i].topEdgeStrokeWeight = SWeight;
                    allCells[i].topEdgeStrokeColor = SColor;
                }
            } catch (e){};
        }
 
  • Спасибо
Реакции: vas76

vas76

Топикстартер
15 лет на форуме
Сообщения
9
Реакции
3
Опять спасибо. Идея понятна. Работает.