Как использовать скрипт приложения Google для автоматического выделения границы ниже, когда значение изменяется

Я хочу добавить границу под строкой всякий раз, когда изменяется значение столбца C.

Я давно не трогал макрос, это скрипт, который я собрал, но он работает не так, как ожидалось. Кто-нибудь знает, где проблема? Спасибо!

function underline() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  for (var i = 1; i < 10; i++) {
    if (sheet.getRange(spreadsheet.getCurrentCell().getRow() + i, 3) != sheet.getRange(spreadsheet.getCurrentCell().getRow() + i+1, 3)) {
        sheet.getRange(spreadsheet.getCurrentCell().getRow() + i, 1, 1, sheet.getMaxColumns()).activate();
        spreadsheet.getActiveRangeList().setBorder(null, null, true, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID);
         }
  }

};

1 ответ

Решение

Ваш оригинальный код немного запутан, много делает с одним if заявление. Я взял на себя смелость отделить сложный бит в отдельную функцию, findOriginal(cell), Следующий код добавляет одну строку:

function findOriginal(cell) { //offsets given cell until finds new content
  while (cell.getValue() == cell.offset(1,0).getValue()) cell = cell.offset(1,0);
  return cell;
}

function underline() {
  var spreadsheet = SpreadsheetApp.getActive(),
      cell = spreadsheet.getSelection().getCurrentCell();

  cell = findOriginal(cell);

  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(cell.getRow(), 1, 1, sheet.getLastColumn()) // setting the range to border
  .setBorder(null, null, true, null, null, null, 
             '#000000', SpreadsheetApp.BorderStyle.SOLID); // you wrote this line
};
Другие вопросы по тегам