在 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 列)我如何将其分开?
总而言之,我想要:
- 一个包含 2 个项目的自定义菜单“查看”:
- “Patrick View”:取消隐藏所有列但隐藏第 1 列和第 2 列
- “Karen View”:取消隐藏所有列但隐藏第 4 列和第 6 列
- 一个自定义菜单“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 从主电子表格导入感兴趣的数据。那将是观看的最佳选择。但是,如果用户也打算修改数据,事情就会变得更加复杂,因为修改后的数据必须同步回主电子表格,如果多个用户同时在本地电子表格中修改数据,就会发生冲突。
我有一份包含大量指标的大量 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 列)我如何将其分开?
总而言之,我想要:
- 一个包含 2 个项目的自定义菜单“查看”:
- “Patrick View”:取消隐藏所有列但隐藏第 1 列和第 2 列
- “Karen View”:取消隐藏所有列但隐藏第 4 列和第 6 列
- 一个自定义菜单“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 从主电子表格导入感兴趣的数据。那将是观看的最佳选择。但是,如果用户也打算修改数据,事情就会变得更加复杂,因为修改后的数据必须同步回主电子表格,如果多个用户同时在本地电子表格中修改数据,就会发生冲突。