根据单元格内容隐藏/取消隐藏行

Hide/unhide Rows Based on Content of a Cell

本文关键字:隐藏 取消 单元格      更新时间:2023-09-26

我想要我的当前脚本,它为我提供了一个自定义菜单、侧边栏和基于值隐藏单元格,如果单元格从值更改为取消隐藏。

例如

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改成其他的,它不会取消隐藏单元格。

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

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

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

以这种方式在其他块中尝试:

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

希望能有所帮助!