簡體   English   中英

表格在一系列單元格(假到真)的編輯上運行腳本

[英]Sheets Run script on edit of a range of cells (False to True)

我有一個腳本,在編輯工作表時需要運行該腳本。 每當選中L列(L2:L260)中的框時,我都需要它運行。 我最初編寫的腳本是在按鈕按下時運行的(選中多個復選框,單擊按鈕即可運行),但其他需要使用它的人無法運行該腳本。 最初,單擊按鈕時腳本運行良好,但是一旦我添加了onEdit內容,它便完全停止工作。 這是我所擁有的:

function onEdit(e) {
  //Get the sheet you want to work with. 
  var editrange = {
    top : 2,
    bottom : 260,
    left : 11,
    right : 11};
  var thisrow = e.range.getrow();
  if (thisrow < editrange.top || thisrow > editrange.bottom)
    return;
  var thiscolumn = e.range.getcolumn();
  if (thiscolumn < editrange.left || thiscolumn > editrange.right)
    return;
  var ss = e.range.getSheet();
  var sheet = ss.getSheetByName("Responsible");
  //Grab the entire Range, and grab whatever values you need from it. EX: rangevalues
  var range8 = sheet.getRange("K3:K90");
  var range28 = sheet.getRange("M3:M90");
  var range2values8 = range28.getValues();
  var rangevalues8 = range8.getValues();
  //Loops through range results
  for (var i in rangevalues8) {
    // for (var j in rangevalues) {
    Logger.log("rangevalues8["+i+"]["+0+"] is:"+rangevalues8[i][0]);//Added

    //Set the rules logic
    if (rangevalues8[i][0] == true) { //Modified
      //Set the cell 
      range2values8[i][0] += 1; //Directly add 1 to range2values
      Logger.log(range2values8);//Added
    }
  }

  //copy new information
  var destination = ss.getSheetByName('Compiled Data');//whatever page
  var destCell8 = destination.getRange("I183:I270");
  destCell8.setValues(range2values8);

  //clear checkboxes
  var cleaning = ss.getSheetByName('Asset Bank');
  var cleaningcell8 = cleaning.getRange("A3:A90").getValues();
  range8.setValues(cleaningcell8);
}

感謝您的任何幫助!

在檢查getcloumn()您的代碼后,我猜您在錯誤的方法getcolumn()編輯了getcolumn()

var ss = e.range.getSheet();
var sheet = ss.getSheetByName("Responsible");

e.range.getrow()

似乎是主要問題

正確的語法是:

getColumn();
getRow();

並且您需要從spreadsheet對象而非工作sheet對象中使用函數getSheetByName(name)

這是更正的代碼:

 function onEdit(e) {

    //Get the sheet you want to work with. 
    var editrange = {
        top: 2,
        bottom: 260,
        left: 11,
        right: 11
    };
    //getRow() and not getrow()
    var thisrow = e.range.getRow();
    if (thisrow < editrange.top || thisrow > editrange.bottom) return;
    //getColumn() and not getcolumn()
    var thiscolumn = e.range.getColumn();
    if (thiscolumn < editrange.left || thiscolumn > editrange.right) return;
    //Line that replaces the erroneous 'var ss = e.range.getSheet()';
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Responsible");
    //Grab the entire Range, and grab whatever values you need from it. EX: rangevalues
    var range8 = sheet.getRange("K3:K90");
    var range28 = sheet.getRange("M3:M90");
    var range2values8 = range28.getValues();
    var rangevalues8 = range8.getValues();
    //Loops through range results
    for (var i in rangevalues8) {
        Logger.log("rangevalues8[" + i + "][" + 0 + "] is:" + rangevalues8[i][0]); //Added
        //Set the rules logic
        if (rangevalues8[i][0] == true) { //Modified
            //Set the cell 
            range2values8[i][0] += 1; //Directly add 1 to range2values
            Logger.log(range2values8); //Added
        }
    }
    //copy new information
    var destination = ss.getSheetByName('Compiled Data'); //whatever page
    var destCell8 = destination.getRange("I183:I270");
    destCell8.setValues(range2values8);
    //clear checkboxes
    var cleaning = ss.getSheetByName('Asset Bank');
    var cleaningcell8 = cleaning.getRange("A3:A90").getValues();
    range8.setValues(cleaningcell8);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM