如何将公式下拉到空单元格(仅一列)中? Google Apps脚本

时间:2019-03-20 06:11:17

标签: javascript loops google-apps-script formula

我正在尝试执行以下操作: 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 :(得分:0)

此修改如何?在此修改中,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);
  }
}

参考:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。