Как запустить скрипт Google Apps на всех листах в моем файле электронной таблицы? - PullRequest
1 голос
/ 27 марта 2020

ПРОБЛЕМА :

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

Код:

/** 
 * Sets background color to strikethrough-formatted cells
 */
function set_color_strikethrough(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  for (i=0; i<sheets.length; i++) {
    var sheet = ss.getSheets()[i];  // current sheet
    var sheetName = sheet.getName();
    console.log("sheetname: ", sheetName);
    var lr = sheet.getLastRow()
    var lc = sheet.getLastColumn()
    var range = sheet.getRange(2,1,lr,lc);
    var results = range.getFontLines();

    for (var i=0;i<lr;i++) {
      for (var j=0;j<lc;j++ ) {
        if(results[i][j] == "line-through"){
          var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
        }
      }
    }
  }
}

ОБНОВЛЕНИЕ (решение) :

Спасибо @Tanaike за то, что он указал, что переменная счетчика i была использована неправильно, простая ошибка, которую упустили из виду. Рабочий код:

/** 
 * Sets background color to strikethrough-formatted cells
 */
function set_color_strikethrough(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  for (k=0; k<sheets.length; k++) {
    var sheet = sheets[k];  // current sheet
    var lr = sheet.getLastRow()
    var lc = sheet.getLastColumn()
    var range = sheet.getRange(2,1,lr,lc);
    var results = range.getFontLines();

    for (var i=0;i<lr;i++) {
      for (var j=0;j<lc;j++ ) {
        if(results[i][j] == "line-through"){
          var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
        }
      }
    }
  }
}

1 Ответ

1 голос
/ 27 марта 2020

Я хотел бы изменить следующим образом.

Точки модификации:

  • В вашем скрипте для l oop используется переменная i, используемая в для l oop с использованием i. i у 1-го для l oop изменяется на 2-го для l oop. Таким образом, l oop с использованием i не работает должным образом, как вы ожидаете. Я думаю, что это причина вашей проблемы.
  • var sheet = ss.getSheets()[i]; можно изменить на var sheet = sheets[i];. Таким образом, стоимость процесса может быть немного уменьшена.

Модифицированный скрипт:

Когда ваш скрипт модифицируется, он становится следующим:

function set_color_strikethrough(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  for (k=0; k<sheets.length; k++) {  // <--- Modified
    var sheet = sheets[k]; // <--- Modified
    var sheetName = sheet.getName();
    console.log("sheetname: ", sheetName);
    var lr = sheet.getLastRow()
    var lc = sheet.getLastColumn()
    var range = sheet.getRange(2,1,lr,lc);
    var results = range.getFontLines();

    for (var i=0;i<lr;i++) {
      for (var j=0;j<lc;j++ ) {
        if(results[i][j] == "line-through"){
          var color = sheet.getRange(i+2,1,1,lc).setBackground("orange")
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...