在 Google 表格/应用程序脚本中创建自定义菜单,以根据浏览 sheet 的用户隐藏和取消隐藏列

Create a custom menu in Google Sheets / Apps Scripts to hide and unhide column based on who is browsing the sheet

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

因此,我正在尝试在报告顶部创建一个按钮,其中 hide/unhide 列取决于浏览报告的人。

    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),但我不确定如何汇总所有这些。我应该为每个视图创建不同的变量吗? 同样现在,我的代码是 运行 同时执行两个操作(列创建 + hide/unhide 列)我如何将其分开?

总而言之,我想要:

  1. 一个包含 2 个项目的自定义菜单“查看”:
  1. 一个自定义菜单“Column Creation”有 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 从主电子表格导入感兴趣的数据。那将是观看的最佳选择。但是,如果用户也打算修改数据,事情就会变得更加复杂,因为修改后的数据必须同步回主电子表格,如果多个用户同时在本地电子表格中修改数据,就会发生冲突。