Как я могу перейти к следующему диапазону, используя макросы? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть пример кода макроса, который я получил при записи. Таким образом, код защищает столбцы «C» и «D» всякий раз, когда я запускаю его.

НО, что мне нужно, когда я запускаю этот код во второй раз, он защищает следующие 2 столбца, т. Е. 'E' и 'F' и т. Д.

Как я могу это сделать .?

Кроме того, существует ли способ, чтобы этот код выполнялся автоматически в установленное время дня каждый день в течение месяца, поэтому мне не нужно вручную запускать код каждый день.

/** @OnlyCurrentDoc */

function DataReWriteProtection() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C:D').activate();
  var protection = spreadsheet.getRange('C:D').protect();
};

1 Ответ

0 голосов
/ 21 апреля 2019

Этот код может дать вам начало для разработки собственного кода.

Скрипт должен быть установлен как устанавливаемый, управляемый по времени, триггерный. Вы должны выбрать частоту и время выполнения, которое подходит вам лучше всего.

function so5577363801() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // assumes that cell A1 contains the column value (as an integer) for the next column to be protected
  // assumes that two columns (side-by-side) are to be protected
  var colNumRange = sheet.getRange("A1");
  var colNum = colNumRange.getValue();
  var startcol = colNum;
  var endcol = colNum+1;

  // convert column numbers to letters
  var startletter = columnToLetter(startcol);
  var endletter = columnToLetter(endcol);
  // Logger.log("DEBUG: Cell A1: "+colNum+", start column: "+startcol+", endcol: "+endcol+", start letter: "+startletter+", end letter: "+endletter);//DEBUG

  // define the range to be protected
  var range = sheet.getRange(startletter+":"+endletter);
  // Logger.log("DEBUG: range = "+range.getA1Notation());//DEBUG
  var rangename = '"'+startletter+":"+endletter+'"';
  //Logger.log("DEBUG: range name: "+rangename);//DEBUG

  // protect the range, and assign a description
  var protection = sheet.getRange(startletter+":"+endletter).protect();
  protection.setDescription(rangename).setWarningOnly(true);

  // update CellA1 with the column number to be used next time.
  var newcol = colNum+2;
  colNumRange.setValue(newcol); 
}

function columnToLetter(column){
  var temp, letter = '';
  while (column > 0){
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...