Google表格脚本可隐藏无法在onEdit()上使用的列

马特·鲍耶(Matt Bowyer)

我有以下代码根据第一行/列的内容(无论是大于还是小于0)在工作表中显示或隐藏列/行,当从可安装的触发器调用时,它可以很好地工作,但是作为一个onEdit函数,它不起作用。

理想情况下,我想避免使用可安装的触发器,因为它不会随工作表一起复制,并且主要是作为要重复复制的模板。

数据保存在表单“输入”中,然后在表单“表”(受保护)中提供查询数据。理想情况下,它应该以编辑方式(在工作表输入上)或以一分钟的时间间隔运行(这是首选选项,但如果涉及使用如上所述的触发器程序,则不可以)。

如下所示的当前版本不会创建任何错误消息,但也无法正常运行。

function onEdit(){
  hideEmptyRows(); 
  hideCols(); 
}


function hideCols() {
  var sh = SpreadsheetApp.getActive().getSheetByName('table');
  var totalsRow = 1;

  sh.getRange(totalsRow, 3, 1, sh.getMaxColumns()-3).getValues()[0]
    .forEach(function(el, i) {
        if (!el || el >= 1) sh.showColumns(i + 3)
    });

 sh.getRange(totalsRow, 3, 1, sh.getMaxColumns()-3).getValues()[0]
    .forEach(function(el, i) {
        if (!el || el <= 0) sh.hideColumns(i + 3)
    })
}


function hideEmptyRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName("Table");      // Enter sheet name
  var row = s.getRange('A:A').getValues();            // Enter 
   column letter that has the text "hide" and  "unhide"

   s.showRows(1, s.getMaxRows());
   for(var i=0; i< row.length; i++){s.showRows(i+1, 1); if(row[i] == 0) { s.hideRows(i+1, 1); }   // Value to hide
  
  }}

在此处输入图片说明

在此处输入图片说明

马里奥斯

说明:

  • 您的代码应该工作正常。

  • 但是,建议利用事件对象 e在当前解决方案中,如果您对另一张纸进行任何更改,则onEdit可能会更改该纸table也许这是理想的行为,但我不建议这样做。

  • 您可以使用事件对象在此特定项目中进行的另一项改进forEach第一发生更改执行零件即,例如,如果编辑了第2行,则无需执行for循环来执行第1行的计算。

解:

在这里,我为您提供了更易于维护/面向未来的解决方案:

function onEdit(e) {
  
  const sheet_name = 'table';
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const sh = e.source.getActiveSheet();
  const totalsRow = 1;

  if(sh.getName() == sheet_name && row == totalsRow ){
  sh.getRange(totalsRow, 3, 1, sh.getMaxColumns()-3).getValues()[0]
    .forEach(function(el, i) {
        if (!el || el <= 0) sh.hideColumns(i + 3);
        if (!el || el > 0) sh.showColumns(i + 3);
    })
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google表格脚本可按日期隐藏列

使用脚本隐藏一系列列-Google表格

使用脚本隐藏谷歌表格中的列

使用脚本在 Google 工作表上隐藏不同的列?

Google表格onEdit大写脚本功能

基于 onedit / google 表格的调用脚本

Google表格脚本可帮助在表格之间移动数据

Google表格脚本可填充列中的间歇性空白

Google表格应用脚本:条件隐藏或显示列

在Google脚本的Google脚本内的特定工作表上使用onedit()触发器

Google脚本可伸缩跨度列

当我组合 2 个 onEdit 脚本时,我在 Google 表格脚本编辑器上不断收到范围错误

应用脚本可强制Google表格中的特定行高

Google表格脚本可为整个专栏添加重点

用于电子表格的Google脚本可从工作表上链接的PDF页面提取数据

Google表格脚本onEdit的表单响应清除单元格

适用于 Google 表格的 Apps 脚本(onedit 功能)

Google脚本隐藏Google表格中的行

如何使用 Google 脚本隐藏/取消隐藏命名的列范围

Google表格onEdit计算

Google表格onEdit(e)TypeError:无法读取属性

隐藏和取消隐藏列-Google表格

如何使用Google Apps脚本清除Google表格中的列?

如何使用Google脚本从Google表格中提取特定列?

Google Apps脚本:onEdit

无法再使用 Google 表格脚本编辑器

使用Google表格QUERY对不同表格上的= x列求和

Google表格脚本可将已完成的行移至新表格

Google表格应用脚本可更改表格并保持相同的活动单元格