从行添加行和复制公式 - 超时

时间:2018-01-22 14:55:52

标签: google-sheets

我有一张超过4000行和30列的大表。 如果少于x“空”行,我试图自动向表单添加新行。空行仅由包含公式定义,但数据列A为空。

检查行是否为空我检查A列,因为您必须在A列中输入数据。添加新行后,脚本应该在新行之前复制/粘贴最后一行,因此它们包含公式也是如此。

这是脚本(PREVIOUS VERSION):

  function addRowsItems() {

  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('items');  

  var freeRows = 300; // Number of empty Rows after last Entry

  var lRow = sh.getLastRow(), lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);

  var startRow = lRow-freeRows;

  if(startRow < 0) {
    startRow = 1; }

  var values = sh.getRange("A" + startRow + ":A").getValues(); 
  var maxIndex = values.reduce(function(maxIndex, row, index) {
    return row[0] === "" ? maxIndex : index;
  }, 0);

  var maxIndex = maxIndex + startRow;

  var space = lRow - maxIndex;
  var addLines = freeRows - space;

  if(space < freeRows) {

     sh.insertRowsAfter(lRow, addLines); 
     range.copyTo(sh.getRange(lRow+1, 1, addLines, lCol), {contentsOnly:false});

    }
  }

这是在一张包含较少数据的新工作表中。 但是在主表中使用它有超过4000行数据我得到了一些时间。该脚本会添加新行,但在能够复制/粘贴之前会超时。

为什么要花这么多时间?有没有更简单的方法来实现这一目标?

所以这是实际版本。单元格B1包含范围A:A的COUNBLANK

function addRowsItems() {

  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('items');  

  var freeRows = 307; // Number of empty Rows after last Entry

  var lRow = sh.getMaxRows(), lCol = sh.getMaxColumns(), range = sh.getRange(lRow,1,1,lCol);
  var space = sh.getRange("B1").getValues();
  var addLines = freeRows - space;

  if(space < freeRows) {

     sh.insertRowsAfter(lRow, addLines); 
     range.copyTo(sh.getRange(lRow+1, 1, addLines, lCol), {contentsOnly:false});

    }
  }

1 个答案:

答案 0 :(得分:1)

尝试 android:onValueChange="@{(picker,oldv,newv) -> viewModel.onValChange(oldv, newv)}"> 函数返回范围内的空单元格数。包含文本,数字,错误等的单元格不计算在内。返回空文本的公式将被计算在内。