Google Script onEdit(e)函数和行范围

时间:2019-12-12 20:39:34

标签: google-apps-script google-sheets google-apps-script-simple-triggers

在向该社区寻求帮助并得到该社区成员(Tedinoz)的快速,及时的答复后,我偶然发现了两个问题。

因此,要解决问题,我试图制作一个电子表格,其中如果标记了复选框,则行基于称为数量(基本上是数量为1)的列中的数字。

第一个问题:如何编写代码以使函数动态进入电子表格中插入的所有行?尝试设置var row = sheet.getDataRange();

时出现错误

第二个问题:使用函数onEdit(e)时是否存在变通办法,以便在选中复选框时该函数不会添加无限行?我要搜索的是在复选框为True时根据数量添加行,或者在复选框为False时减去行(如果最初为该行添加的行)。

还有没有办法复制C列的文本或一定范围的文本(插入行时通过列)?

Screenshot of Spreadsheet

以下是我到目前为止的内容:

function onEdit(e) {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetname = "Test";
  var sheet = ss.getSheetByName(sheetname);
  var row = sheet.getDataRange;

  // get value of Column H
  var colHValue = sheet.getRange(row,8).getValue()

  if (colHValue = true){
    //Logger.log("DEBUG: Col H = True. do something")

    // get value of Column D
    var Value = sheet.getRange(row,4).getValue();

    // get the quantity and convert from a string to a number
    var qty = Value;
    var qtynum = +qty;
    // var newtype = typeof qtynum; // DEBUG
    //Logger.log("DEBUG: the quantity is "+qtynum+", new type = "+newtype)

    // This inserts rows after 
    sheet.insertRowsAfter(row, qtynum-1);
  }
  else{
    //Logger.log("DEBUG: col H <> True. do nothing");
  }
}

2 个答案:

答案 0 :(得分:0)

function onEdit(e) {
  var sh=e.range.getSheet();
  if(sh.getName()!="Test")return;
  var colHValue=sh.getRange(e.range.rowStart,8).getValue()
  if (colHValue==true){
    sh.insertRowsAfter(e.range.rowStart, Number(sh.getRange(e.range.rowStart,4).getValue())-1);
  }
}

答案 1 :(得分:0)

function autoDup() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var data = sheet.getDataRange().getValues();
     var newData = [];
     for(var n in data){
       newData.push(data[n]);
    if(!Number(data[n][3])){continue};// if column 3 is not a number then do nothing
      for(var c=1 ; c < Number(data[n][3]) ; c++){ // start from 1 instead of 0 because we have already 1 copy
      newData.push(data[n]);//store values
    }
  }
  sheet.getRange(1,1,newData.length,newData[0].length).setValues(newData).sort({column: 1, ascending: false});// write new data to sheet, overwriting old data
}