【问题标题】:Unable to detect Row inserts in Google sheets through google apps scripts?无法通过谷歌应用脚​​本检测谷歌表格中的行插入?
【发布时间】:2017-09-23 07:52:51
【问题描述】:

我是 Google 应用脚本的新手。目前,我正在尝试创建一个插入行检测器并根据其顶部行的值更新该新行中的值。在线阅读文档和其他内容,我创建了以下代码。但问题是它不起作用。

如何创建通用行检测器或如何解决此问题?

代码:

function onChange(e){ 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange('A1').setBackground('green');
  //e.range.setNote('Last modified: ' + new Date().toLocaleTimeString() + ' getActiveUser().getEmail(): ' + Session.getEffectiveUser() );
  if (e.changeType == "INSERT_ROW") {
    sheet.getRange('A1').setBackground('red');
    // a row or many rows were inserted

    if (e.source.getActiveSheet().getName() == "UIDAICheck") {
      // Let's set the formula for calculating the End Date / Time of inserted lines    
      sheet.getRange('A1').setBackground('blue');
      var iRow = e.source.getActiveSheet().getActiveRange().getRow();
      var iRows = e.source.getActiveSheet().getActiveRange().getNumRows(); 

      var aRange = SpreadsheetApp.getActiveSpreadsheet().getActiveRange();
      aRange.setValue('555')

    }
  }
}

如果有与代码无关的更改,例如安装可安装触发器或其他东西,请分享我如何能够连接这些点以及能够自动填充行插入的单元格值?诚然,我对这整个领域都是新手..

PS:我认为这段代码的任何部分都不起作用。这是我的执行记录:

[17-09-23 13:25:46:950 IST] SpreadsheetApp.getActiveRange() [0 seconds]
[17-09-23 13:25:46:950 IST] Range.getRow() [0 seconds]
[17-09-23 13:25:46:950 IST] Range.getLastRow() [0 seconds]
[17-09-23 13:25:46:950 IST] Range.getColumn() [0 seconds]
[17-09-23 13:25:46:950 IST] Range.getLastColumn() [0 seconds]
[17-09-23 13:25:47:049 IST] Session.getActiveUser() [0.098 seconds]
[17-09-23 13:25:47:050 IST] User.getEmail() [0 seconds]
[17-09-23 13:25:47:050 IST] SpreadsheetApp.getActiveSpreadsheet() [0 seconds]
[17-09-23 13:25:47:058 IST] Starting execution
[17-09-23 13:25:47:103 IST] Execution failed: Script function not found: onEdit [0 seconds total runtime]

【问题讨论】:

  • 您知道导致 onEdit 错误的原因吗?除了 onChange 函数还有其他代码吗?任何已安装的触发器?
  • 不完全确定。好吧,最初我有一个 onEdit 触发器,它工作得很好,但是代码编辑器运行按钮只能选择一个函数,所以我删除了它并尝试运行它。无论如何,这段代码的任何部分都不是专有的,任何以前做过的人都可以轻松地重新创建。只是把它放在那里展示我尝试过的东西。我认为如果你能重新编写基本代码会更好。

标签: google-apps-script google-sheets google-apps google-sheets-api


【解决方案1】:

我还没有测试过,但请尝试一下。

function MyChange(e){ 
  var sheet = SpreadsheetApp.getActiveSheet();
  if(sheet.getRange('A1').getBackground()!='#ff0000')
  {
    sheet.getRange('A1').setBackground('#00ff00');
  }
  if (e.changeType == "INSERT_ROW") 
  {
    sheet.getRange('A1').setBackground('#ff0000');
    if (sheet.getName()=="UIDAICheck") 
    {
      sheet.getRange('A1').setBackground('#0000ff');
      sheet.getActiveRange().setValue('555');
    }
  }
}

安装 onChange 触发器:

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多