【问题标题】:Hiding row based on cell value, in large spreadsheet generates error "Exceeded Maximum Execution Time"基于单元格值隐藏行,在大型电子表格中生成错误“超过最大执行时间”
【发布时间】:2018-06-01 16:42:27
【问题描述】:

我正在尝试根据单元格中的值隐藏行。

我使用 Google 表格作为商品的库存。在最后一列,如果我将其标记为“是”,我希望隐藏整行。

该代码适用于模板表,但当我尝试在我的主库存上激活它时,它显示“超过最大执行时间”,我认为这是发生的,因为它是一个相当大的库存。

function onEdit() {

var ss = SpreadsheetApp.getActiveSpreadsheet();

var sheet = ss.getActiveSheet();

  var lastRow = sheet.getLastRow();

  for( i=1 ; i<=lastRow ; i++) { // i <= lastRow

      var status = sheet.getRange("AD"+i).getValue();

      if (status == "Yes") {

         sheet.hideRows(i);
    } 
   }
  }

我确实看到,您可以在触发器上将其设置为时间驱动。

如何使代码不超过 5 分钟的最长时间?

【问题讨论】:

  • 您的代码永远占用的原因是您为每一行调用电子表格服务方法,即terribly slow。根据 Apps 脚本"best practices",尽可能使用批处理方法。

标签: google-apps-script google-sheets


【解决方案1】:

由于您的脚本使用保留的函数名称 onEdit,它会在每次发生编辑时触发,每次循环遍历所有工作表行时,如果满足条件,即使该行已经隐藏,它也会隐藏该行。

更改脚本以检查当前编辑的单元格,在编辑事件对象上使用 en 并仅在满足条件时隐藏当前行。类似于以下内容:

function onEdit(e){
   if(e.range.getColumn() === 30 && e.value === 'Yes'){
     e.range.getSheet().hideRows(e.range.getRow())
   }
}

注意:我还没有测试它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多