基于单元格值隐藏列

时间:2021-07-09 20:30:50

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

我试图根据 A2 中的选择隐藏列。 enter image description here

这是我正在使用的代码,我很难卡住。

function onEdit(e) {
  var myRange = SpreadsheetApp.getActiveSheet().getRange("A:J"); 

  //Let's get the row & column indexes of the active cell
  var row = e.range.getRow(1);
  var col = e.range.getColumn(0);

  //Check that your active cell is within your named range
  if (col >= myRange.getColumn() && col <= myRange.getLastColumn() && row >= myRange.getRow() && row <= myRange.getLastRow()) { 
    if e.myRange === "Renewal" ? myRange.hideColumns(5)
    
  }
}

如果有人能指出我正确的方向,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据您的代码,如果 A2 中的下拉列表为“续订”,我假设您想隐藏第 5 (E) 列。如果这就是你想要的,那么你的脚本就会有很多问题。

代码:

function onEdit(e) {
  // get current sheet
  var sheet = e.source.getActiveSheet(); 
  // get row and column of edited cell
  var row = e.range.getRow();
  var col = e.range.getColumn();

  // make sure to only hide/show column if edited cell is A2 in 'Sheet1'
  if (col == 1 && row == 2 && sheet.getSheetName() == 'Sheet1') { 
    // if value of A2 in Sheet1 is Renewal, hide columns, if not Renewal, then show the same columns back
    if (e.value === "Renewal") {
      sheet.hideColumns(5, 2); // hide column 5-6 (E-F)
      sheet.hideColumns(8, 1); // hide column 8 (H) 
    }
    else {
      sheet.showColumns(5, 2); // show column 5-6 (E-F)
      sheet.showColumns(8, 1); // show column 8 (H) 
    }
  }
}

错误:

  • getRow()getColumn() 分别获取范围的当前行和列。你不在这里传递参数
  • 您不需要确定您编辑的单元格是否在 A:J 范围内,您只需要指定应指向 A2 的行和列(如果需要,还需要指定在 中考虑的特定工作表)
  • 三元运算符在它之前不需要 if 语句,它总是需要 else 部分。因此,如果 A2 不是 Renewal,我添加了 showColumns 以显示隐藏列。
  • hideColumns() 是一种工作表方法,而不是范围,因此您需要获取当前编辑的工作表。此外,它接受 2 个参数,即开始隐藏列的索引以及需要隐藏的列数。

输出:

output

资源: