Добавление формулы в пустые ячейки в столбце - PullRequest
1 голос
/ 08 марта 2020
 function copyformula(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var formrange = ss.getRange("J1");
  var formval = formrange.getValues();
  var sourceSheets = ss.getSheets();
  for( sheetNumber = 2; sheetNumber < sourceSheets.length; sheetNumber++) {
  var range = ss.getRange("J3:J1000");
  var values = range.getValues();
  for (var i = 0; i < values.length; i++) {
    if (values[i][0] == '') {
      var cell = range.offset(i, 0, 1, 1);   
      cell.setValues(formval);
      Utilities.sleep(750); //Edit value to adjust amount of pause between function calls (time is in milliseconds). Make it long enough to avoid #error, but not too long to save time.

    }
  }
} 
}

Привет, поэтому цель состоит в том, чтобы проверить наличие пустых ячеек в столбце J3: J1000, (потребуется просмотреть несколько листов). Если есть пустая ячейка, замените ее формулой в J1 (Это будет быть на всех листах). Мне нужно, чтобы скопировать формулу, которая находится в J1 и вставить его, чтобы он изменил все ссылки на ячейки. Пример: допустим, J307 пусто, формула скопирована из J1 и вставлена ​​в J307, но все If's et c теперь основаны на J307 и других значениях ячеек вокруг него. Это будет настроено для работы с триггерами Google (при изменении)

Любая помощь будет принята с благодарностью :). На данный момент скрипт выше ничего не делает и время ожидания истекло.

1 Ответ

1 голос
/ 08 марта 2020
  • Вы хотите поместить формулу из ячейки "J1" на каждом листе в пустые ячейки столбца "J".
  • Вы хотите отразить номер строки в формуле, когда формула помещается в ячейку.
  • Вы хотите проверить индекс листа от 2 до последнего индекса.
  • Вы хотите добиться этого с помощью Google Apps Script.

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

Пример сценария:

function copyformula(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheets = ss.getSheets();
  for( sheetNumber = 2; sheetNumber < sourceSheets.length; sheetNumber++) {
    var sheet = sourceSheets[sheetNumber];
    var values = sheet.getRange("J3:J" + sheet.getLastRow()).getValues();  // Modified
    var formula = sheet.getRange("J1");
    for (var i = 0; i < values.length; i++) {  // Modified
      if (!values[i][0]) {  // Modified
        formula.copyTo(sheet.getRange(`J${i + 3}`), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);
      }
    }
  }
}
  • Чтобы отразить номер строки в скопированной формуле, я использовал copyTo .
  • В этом случае проверяются строки от 3 до последней строки диапазона данных.
  • Если вы не хотите использовать V8, измените sheet.getRange(`J${i + 3}`) на sheet.getRange("J" + (i + 3)) .

Ссылка:

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