问题跟踪器持有该请求since Aug 3, 2010,具有中等优先级和“已分类”状态。超过 3 年,GAS 团队没有任何解决方案的迹象。
我的解决方法是使用一个特殊的前导字符来指示行/列的可见性状态,它是顶部标题行/列的单元格中的前导反引号 (`)。
如果在列标题中使用了合并的单元格,则 应该专门为该功能留一个空的顶行,直到 Google 工程师改进 API。
如果第一行/列单元格中有公式,同样适用。
这些专用行/列本身可以隐藏。
开始使用此功能后,应从自定义菜单执行每个显示/隐藏列/行命令,否则由于缺少/过多的反引号,以编程方式遍历范围时会出现错误。
例如要隐藏选定单元格的行,调用以下函数
function hideSelectedRows() {
var sheet = SpreadsheetApp.getActiveSheet();
var range = SpreadsheetApp.getActiveRange();
// hide rows and add a ` backtick to the header cell
for (var row = range.getRow(); row <= range.getLastRow(); row++)
{
// add backtick only if it isn't there (that may happen when manually unhiding the rows)
var cellHeader = sheet.getRange(row, 1)
var cellHeaderValue = cellHeader.getValue()
if ( !cellHeaderValue.match(/^`/) ) {
cellHeader.setValue('`' + cellHeaderValue)
}
// hide rows of selected range
sheet.hideRows( row );
}
}
还有菜单
SpreadsheetApp.getActiveSpreadsheet()
.addMenu("Show/Hide", [
{ name : "Hide Selected Rows", functionName : "hideSelectedRows" },
{ name : "Hide Selected Columns", functionName : "hideSelectedColumns" },
null,
{ name : "Hide Rows", functionName : "hideRows" },
{ name : "Hide Columns", functionName : "hideColumns" },
null,
{ name : "Show Rows", functionName : "showRows" },
{ name : "Show Columns", functionName : "showColumns" },
null,
{ name : "Show All Rows", functionName : "unHideAllRows" },
{ name : "Show All Columns", functionName : "unHideAllColumns" }
])
一旦谷歌工程师找到时间改进 onChange 事件,就可以自动放置这些反引号。目前,changeType 仅限于EDIT, INSERT_ROW, INSERT_COLUMN, REMOVE_ROW, REMOVE_COLUMN, INSERT_GRID, REMOVE_GRID, OTHER,没有任何关于插入/删除行/列的详细信息。看起来 GAS 背后的团队很少。我希望他们能雇佣更多的程序员(khm khm)