在谷歌工作表/应用程序脚本中创建一个自定义菜单,根据浏览工作表的人隐藏和取消隐藏列



我有一个庞大的Google Sheet报告,其中包含许多指标。我公司的很多人都可以访问这份报告,他们都希望看到不同的指标。

因此,我试图在报告顶部创建一个按钮,根据浏览报告的人来隐藏/取消隐藏列。

function onOpen(){
const ui = SpreadsheetApp.getUi();
ui.createMenu('Column Creation')
.addItem('Add Column', 'insertColumn')
.addToUi();
ui.createMenu('View   ')
.addItem('Patrick View', 'HideColumns')
.addItem('Karen View', 'HideColumns')
.addItem('Umesh View', 'HideColumns')
.addItem('Unhide everything', 'HideColumns')
.addToUi();  function insertColumn()   
var ss = SpreadsheetApp.getActiveSpreadsheet();   
var sheet = ss.getSheetByName('KW'); [...] //this is another function to insert a column

我知道我需要使用sheet.hideColumns(1)和sheet.showColumns(2),但我不知道如何聚合所有这些。我应该为每个视图创建不同的变量吗?同样现在,我的代码正在同时运行这两个操作(列创建+隐藏/取消隐藏列),我如何将其分离?

总之,我想要:

  1. 一个自定义菜单"查看";有2个项目:
  • ";Patrick View":取消隐藏所有列,但隐藏列1&2
  • "Karen View":取消隐藏所有列,但隐藏第4列和第6列
  1. 一个自定义菜单"列创建"有1项:
  • ";添加列";(这个脚本已经在运行,但与第一个自定义菜单同时运行,所以当我单击时,它会隐藏列并创建一个新列)

我希望我的解释不要太混乱,提前感谢您的帮助!

尝试

var sh = SpreadsheetApp.getActiveSheet()
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Column Creation')
.addItem('Add Column', 'insertColumn')
.addToUi();
ui.createMenu('View   ')
.addItem('Patrick View', 'hideColumnsP')
.addItem('Karen View', 'hideColumnsK')
.addItem('Unhide everything', 'showColumns')
.addToUi();
}
function showColumns() {
sh.unhideColumn(sh.getRange(1, 1, 1, sh.getLastColumn()))
}
function hideColumnsP(){
showColumns()
sh.hideColumns(1,2)
}
function hideColumnsK(){
showColumns()
sh.hideColumns(4,3)
}

请注意,一次只能有一个人处于活动状态!

只有特定用户才能隐藏/取消隐藏列

一旦用户取消隐藏列,该列也将对所有其他查看器取消隐藏(在几秒钟的传播时间后)。

一个解决方案是,每个用户都有自己的个人电子表格,通过ImportRange从主电子表格中导入感兴趣的数据。这将是最适合观看的。然而,如果用户也要修改数据,事情将变得更加复杂,因为修改后的数据必须同步回主电子表格,如果多个用户同时修改本地电子表格中的数据,可能会发生冲突。

最新更新