Заполнить формулу (установить формула и скопировать автозаполнение) Google Sheets - PullRequest
1 голос
/ 15 октября 2019

У меня есть эта таблица:

enter image description here

Я создаю скрипт для добавления формул в строки, которые не являются пустыми, я получил такой результат:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange('Odds Completas!O2').setFormula('=C2+J2');

  var lr = ss.getLastRow();
  var fillDownRange = ss.getRange(2, 15, lr-1);
  ss.getRange('Odds Completas!O2').copyTo(fillDownRange);
}

Формула определена в O2, а остальные ниже - нет. Вместо этого появляется следующее сообщение:

Количество строк в диапазоне должно быть не менее 1. (строка 6)

1 Ответ

1 голос
/ 15 октября 2019

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

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

  • В вашем скрипте ss объявлено SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(). С другой стороны, диапазон использует a1Notation, включая имя листа. Я думаю, что причина вашей проблемы заключается в следующем.
    • При ss.getRange('Odds Completas!O2').setFormula('=C2+J2'); формула помещается в ячейку "O2" листа Odds Completas.
    • При var lr = ss.getLastRow(); извлекается последняя строка активного листа.
    • В этом случае, например, если активным листом является новый лист, lr возвращает 0. При этом ошибка возникает на ss.getRange('Odds Completas!O2').copyTo(fillDownRange);.
      • В вашем скрипте используется lr-1. Таким образом, даже когда последняя строка равна 1, возникает ошибка. Пожалуйста, будьте осторожны.

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

Шаблон 1:

В этом шаблоне ваш скриптне изменяетсяИ прежде чем запускать скрипт, пожалуйста, откройте лист Odds Completas и запустите скрипт. При этом сценарий запускается как активный лист Odds Completas, а lr возвращает последнюю строку Odds Completas.

Шаблон 2:

В этом шаблоне ваш сценарий

function myFunction() {
  var sheetName = "Odds Completas";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(sheetName);
  sheet.getRange('O2').setFormula('=Q2+J2');

  var lr = sheet.getLastRow();
  var fillDownRange = sheet.getRange(2, 15, lr-1);
  sheet.getRange('O2').copyTo(fillDownRange);
}

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...