Hide/unhide 基于单元格内容的行
Hide/unhide Rows Based on Content of a Cell
我想要我当前的脚本,该脚本为我提供自定义菜单、侧边栏并根据值隐藏单元格,以便在单元格更改为远离该值时也包括取消隐藏。
例如
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 更改为其他内容,它不会取消隐藏单元格。
为此,您只需编写取消隐藏行的代码。
在 else 块中以这种方式尝试:
else if (cellEdited === "C12" && e.value !== "X") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getActiveSheet();
theSheet.showRows(13, 4);
}
希望对您有所帮助!
您只需以相同的方式取消隐藏,只需将表达式更改为 !== "X",并使用 .showRows 方法即可。
if (cellEdited === "C12" && e.value !== "X") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getActiveSheet();
theSheet.showRows(13, 4);
}
我想要我当前的脚本,该脚本为我提供自定义菜单、侧边栏并根据值隐藏单元格,以便在单元格更改为远离该值时也包括取消隐藏。
例如
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 更改为其他内容,它不会取消隐藏单元格。
为此,您只需编写取消隐藏行的代码。
在 else 块中以这种方式尝试:
else if (cellEdited === "C12" && e.value !== "X") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getActiveSheet();
theSheet.showRows(13, 4);
}
希望对您有所帮助!
您只需以相同的方式取消隐藏,只需将表达式更改为 !== "X",并使用 .showRows 方法即可。
if (cellEdited === "C12" && e.value !== "X") {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = ss.getActiveSheet();
theSheet.showRows(13, 4);
}