Как перетащить формулу в пустые ячейки (только один столбец)?Google Apps Script - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь сделать следующее: 1) Проверить, сколько строк было заполнено в столбце A;2) Проверьте, сколько строк было заполнено в столбце G;3) Перетащите формулу из последней заполненной строки столбца G. в оставшиеся пустые ячейки.

Например, если в столбце A заполнено 15 строк, а в столбце G есть только 10 ячеек, содержащих формулу,Я хотел бы перетащить формулу из ячейки G10 в ячейку G15 (при условии, что все G11-15 пусты)

Ниже приведен мой код, по какой-то причине он не работает (продолжает зависать, затем "Подготовкадля выполнения ... "экран, когда я его запускаю)

Любая помощь очень ценится !!

function dragdown() {

var sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
var lastpopulatedrowForm = sh.getRange("A1:A").getLastRow();
var lastpopulatedrowManual = sh.getRange("G1:G").getLastRow();

    for (var i=1;i<=lastpopulatedrowForm;i++) {

         var emptyrange= sh.getRange(lastpopulatedrowManual, 6, i, 1);

         if (emptyrange.isBlank()) {

         var copyformulacell = sh.getRange(lastpopulatedrowManual,6,1,1);
         var getformula = copyformulacell.getFormulaR1C1();
         emptyrange.setFormula(getformula);

                                    }
       }
  }

1 Ответ

0 голосов
/ 20 марта 2019

Как насчет этой модификации? В этой модификации copyTo() использовалось для копирования формулы последней строки столбца «G». Ход модифицированного скрипта выглядит следующим образом. Пожалуйста, подумайте об этом как об одном из нескольких ответов.

  1. Получить значения столбцов «A» и «G».
  2. Получить последние строки обоих столбцов «A» и «G».
  3. Скопируйте формулу в последней строке столбца «G» в пустые строки после последней строки столбца «G».

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

function dragdown() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lastpopulatedrowForm = sh.getRange("A1:A").getValues();
  var lastpopulatedrowManual = sh.getRange("G1:G").getValues();
  var lastRowOfColA = 0;
  var lastRowOfColG = 0;
  for (var i = lastpopulatedrowForm.length - 1; i >= 0; i--) {
    if (lastRowOfColA === 0 && lastpopulatedrowForm[i] != "") {
      lastRowOfColA = i + 1;
    }
    if (lastRowOfColG === 0 && lastpopulatedrowManual[i] != "") {
      lastRowOfColG = i + 1;
//      break; // If lastRowOfColA is always larger than lastRowOfColG, you can use this line.
    }
  }
  if (lastRowOfColA > lastRowOfColG) {
    var src = sh.getRange(lastRowOfColG, 7);
    var dst = sh.getRange(lastRowOfColG + 1, 7, lastRowOfColA - lastRowOfColG, 1);
    src.copyTo(dst, SpreadsheetApp.CopyPasteType.PASTE_FORMULA);
  }
}

Справка:

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

...