【问题标题】:Hide/unhide Rows Based on Content of a Cell根据单元格的内容隐藏/取消隐藏行
【发布时间】:2015-03-25 16:11:16
【问题描述】:

我希望我当前的脚本能够为我提供一个自定义菜单、侧边栏并根据某个值隐藏单元格,以便在单元格更改为远离该值时还包括取消隐藏。

例如

function onOpen() {
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
        .createMenu('x Tools')
        .addItem('Instructions', 'showSidebar')
        .addItem('Change y Form', 'openform')
        .addToUi();
}

function showSidebar() {
    var html = HtmlService.createHtmlOutputFromFile('Page')
        .setSandboxMode(HtmlService.SandboxMode.IFRAME)
        .setTitle('Instructions')
        .setWidth(300);
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
        .showSidebar(html);
}

function openform() {
    showURL("https://docs.google.com/a/xxx/viewform")
}

function showURL(href) {
    var app = UiApp.createApplication().setHeight(50).setWidth(200);
    app.setTitle("Add Project to x");
    var link = app.createAnchor('Open x Form ', href).setId("link");
    app.add(link);
    var doc = SpreadsheetApp.getActive();
    doc.show(app);
}

function onEdit(e) {
    Logger.log('e.value: ' + e.value);
    var cellEdited = e.range.getA1Notation();
    Logger.log('cellEdited: ' + cellEdited);
    if (cellEdited === "C12" && e.value === "X") {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var theSheet = ss.getActiveSheet();
        theSheet.hideRows(13, 4);
    };
}

我的问题是我尝试添加第二个 if 语句 - 没有出错,但没有取消隐藏。尝试使用 else 并得到错误。基本思想是如果单元格 c12 是 X,则应隐藏第 13、14、15、16 行,如果是其他任何单元格,则应可见。我现在所拥有的用于隐藏,但是如果您将 X 更改为其他内容,它不会取消隐藏单元格。

【问题讨论】:

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


    【解决方案1】:

    您只需要以相同的方式取消隐藏,只需将表达式更改为 !== "X",并使用 .showRows 方法。

    if (cellEdited === "C12" && e.value !== "X") {
    
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var theSheet = ss.getActiveSheet();
    
        theSheet.showRows(13, 4);
    }
    

    【讨论】:

      【解决方案2】:

      为此,您只需编写代码来取消隐藏行。

      这样在else块中试试:

      else if (cellEdited === "C12" && e.value !== "X") {
      
          var ss = SpreadsheetApp.getActiveSpreadsheet();
          var theSheet = ss.getActiveSheet();
      
          theSheet.showRows(13, 4);
           }
      

      希望有帮助!

      【讨论】:

      • 我在使用 Else 时仍然遇到错误,但是一旦我删除了 else,其余的一切都正常了。我认为我最大的问题是不知道命令是 Showrows。非常感谢,这是一个很大的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 2018-04-13
      • 2012-09-05
      • 2015-05-21
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      相关资源
      最近更新 更多