如何循环遍历列以拖拽公式

How to loop through columns to drag down formulas?

本文关键字:遍历 何循环 循环      更新时间:2023-09-26

我有一个由行1-最后一行定义的范围,并且我试图做以下操作:

  1. 查看每列的最后一行(它们应该都是相同的),如果单元格是空的,从第1行向下拖动公式,直到该列的最后一行(例如,如果我在A列,我的最后一行是第10行,我将评估A10是否为空,如果是,我将把公式从A1一路拖到A10)
  2. 循环遍历A-M列并重复此过程

我有一个艰难的时间,因为我一直得到一个"准备执行"的消息,而调试,它从来没有运行过。

function dragformulas() {
    var sh2=SpreadsheetApp
        .getActiveSpreadsheet()
        .getSheetByName("Inputs for Web App")
    var lastrow = sh2.getLastRow();
  for (var j=0; j < 14 ; j+1) {
    var emptyrange= sh2.getRange(lastrow, j+1, 1, 1);
  if (emptyrange.isBlank()) {
    var copyformulacell = sh2.getRange(1, j+1, 1, 1);
    var dragrange= sh2.getRange(1, j+1, lastrow - 1, 1);
    var getformula = copyformulacell.getFormulas();
    dragrange.setFormula(getformula);
  }
 }
}

我简化了代码,现在它可以工作了。

 function myFunction() {
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns");
  var lastrow = sh.getLastRow();
  var numrows = lastrow;
  var lastcol = sh.getLastColumn();
  var numcols = lastcol;
  var range = sh.getRange(1,1,numrows,numcols);
  sh.setActiveRange(range);
  return propagateFormulae(numrows, numcols, sh);
}
function propagateFormulae(rows, cols){
  for(var i=1;i<=cols;i++){
    for(var j=2;j<=rows;j++){
      var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Looping columns");
      if(sh.getRange(j,i).getValue().length == 0)
        sh.getRange(j-1,i).copyTo(sh.getRange(j,i));
      else{
        j=rows;
     }
    }
   }
  }