Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果快速输入值,则Google电子表格脚本不起作用_Javascript_Google Apps Script_Google Sheets_Spreadsheet - Fatal编程技术网

Javascript 如果快速输入值,则Google电子表格脚本不起作用

Javascript 如果快速输入值,则Google电子表格脚本不起作用,javascript,google-apps-script,google-sheets,spreadsheet,Javascript,Google Apps Script,Google Sheets,Spreadsheet,我已经为我的谷歌电子表格编写了以下脚本: function onEdit(e) { var doc = SpreadsheetApp.getActiveSpreadsheet(); var sheet = doc.getActiveSheet(); var cell = sheet.getActiveCell(); var column = sheet.getActiveCell().getColumn(); var row = sheet.getActiveCell().

我已经为我的谷歌电子表格编写了以下脚本:

function onEdit(e) 
{
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = doc.getActiveSheet();
  var cell = sheet.getActiveCell();
  var column = sheet.getActiveCell().getColumn();
  var row = sheet.getActiveCell().getRow();
  var dat = sheet.getActiveCell().getValue()+"";
  var curDate = Utilities.formatDate(new Date(), "GMT+5:30", "dd/MM/yyyy")
  var editor = doc.getViewers();
  var temp = e.oldValue;
  if(dat=="")
  {
    dat = "0.0"
  }
  if((column == 4 || column == 5) && temp != null)
  {
    cell.setComment("Value changed from ₹"+ (temp) + " to ₹" + dat + " on " + curDate);
  }

}
当D或E列中的值发生更改时,我使用此代码插入注释。我从一个月开始使用此脚本,代码工作正常。但我最近注意到了一个问题

  • 如果我在几个单元格中快速输入值,例如,D2、D3、D4、D5、D6等,则不会对所有单元格执行代码,只会将注释添加到一些随机单元格中。只有在输入记录之间保持至少1秒的间隔时,才会按预期执行
  • 如果一次从多个单元格中删除值,则不会对任何单元格执行代码

  • 感谢您阅读代码

    我从《气体指南》上了解到,触发器可能对您有所帮助

    使用以下方法向编辑范围添加注释:

    function onEdit(e){
      // Set a comment on the edited cell to indicate when it was changed.
      var range = e.range;
      range.setNote('Last modified: ' + new Date());
    }
    

    关于第一个问题,我能够使用以下脚本重现该问题:

    function onEdit(e){
      var destination = e.range.offset(0,1);
      if(e.value){ // Do this when editing a range having only one cell
        destination.setValue(e.value);
      } else { // Do this when editing a range having multiple cells
        destination.setValues(e.range.getValues());
      }
    }
    
    这应该通过使用向谷歌报告

    关于第二个问题,getActiveCell只返回活动单元格,并且看起来需要整个范围。值得注意的是,当编辑包含多个单元格的区域时,e.oldValue返回null

    以下是脚本的另一个版本,可同时用于单单元格编辑和多单元格编辑:

    function onEdit(e){
      var column = e.range.getColumn();
      if(column == 4 || column == 5){
        if(e.range.getNumRows() == 1 && e.oldValue != undefined){
          e.range.setNote("Old value: " + ((e.oldValue)?e.oldValue:"0.0") + "| New value: " + ((e.value)?e.value:"0.0"));
        } 
        if(e.range.getNumRows() > 1){
          var values = e.range.getValues();
          for(var i = 1;i<=e.range.getNumRows();i++){
            e.range.getCell(i,1).setNote("Old value: Not available | New value: " +  ((values[i-1][0])?(values[i-1][0]):"0.0"));
          }
        }
      }
    }
    
    函数onEdit(e){
    var column=e.range.getColumn();
    如果(列==4 | |列==5){
    if(e.range.getNumRows()==1&&e.oldValue!=未定义){
    e、 range.setNote(“旧值:+((e.oldValue)→e.oldValue:“0.0”)+”;新值:+((e.value)→e.value:“0.0”);
    } 
    如果(e.range.getNumRows()>1){
    var values=e.range.getValues();
    
    对于(var i=1;iLooks),您可能会在脚本运行时遇到问题,或者编辑并不总是执行单个单元格(您可以编辑一个范围)。当编辑的部分是一组单元格而不是单个单元格时,请尝试使用Chemiadel的答案找到正确激活事件的方法。检查此项以查看事件实际带来的内容,这样您就不必重复工作。