Google 应用程序脚本 - 如何在多个工作表中隐藏列?
Google App Script - How to hide columns across muliple sheets?
我在 Google sheet 中创建了一个自定义菜单,可以根据人们有兴趣查看的指标隐藏/取消隐藏列。
它运行良好,但仅适用于“活动 sheet”。我希望脚本在 sheet 中隐藏某些列并在另一个 sheet 中隐藏其他列。
自定义菜单应包含 3 个项目:'Karen view'、'Patrick View' 和 'View all'
- 凯伦观点:
- 隐藏 sheet 1
中的第 1 列和第 3 列
- 隐藏 sheet 2
中的第 4 列和第 5 列
- 帕特里克观点:
- 隐藏 sheet 1
中的第 1、2 和 4 列
- 隐藏 sheet 2
中的第 4 列和第 5 列
- 查看全部:
- 取消隐藏所有 sheet 中的所有列
下面是我目前使用的脚本:
(我对如何将 getactivespreadsheet 与 getactivesheet 一起使用感到有点困惑,这就是我卡住的地方)
var sh = SpreadsheetApp.getActiveSheet()
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Hide metrics')
.addItem('Patrick View', 'hideColumnsP')
.addItem('Karen View', 'hideColumnsK')
.addItem('View all', 'showColumns')
.addToUi();
}
function showColumns() {
sh.unhideColumn(sh.getRange(1, 1, 1, sh.getLastColumn()))
}
function hideColumnsK(){
showColumns()
sh.hideColumns(1)
sh.hideColumns(3)
}
function hideColumnsP(){
showColumns()
sh.hideColumns(1,2)
sh.hideColumns(4)
}
在此先感谢您的帮助
在你的情况下,下面的修改脚本怎么样?
修改后的脚本:
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Hide metrics')
.addItem('Patrick View', 'hideColumnsP')
.addItem('Karen View', 'hideColumnsK')
.addItem('View all', 'showColumns')
.addToUi();
}
function showColumns() {
const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
showColumnsInAllSheets_(sheets);
}
function hideColumnsK() {
const obj = [{ sheetName: "Sheet1", hide: [1, 3] }, { sheetName: "Sheet2", hide: [4, 5] }];
sample_(obj);
}
function hideColumnsP() {
const obj = [{ sheetName: "Sheet1", hide: [1, 2, 4] }, { sheetName: "Sheet2", hide: [4, 5] }];
sample_(obj);
}
function sample_(obj) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
showColumnsInAllSheets_(sheets);
const sheetObj = sheets.reduce((o, s) => (o[s.getSheetName()] = s, o), {});
obj.forEach(({ sheetName, hide }) => {
if (sheetObj[sheetName]) {
hide.forEach(h => sheetObj[sheetName].hideColumns(h, 1));
}
});
}
function showColumnsInAllSheets_(sheets) {
sheets.forEach(s => s.showColumns(1, s.getMaxColumns()));
}
在这个修改中,可以通过为sheet和列信息提供对象来隐藏特定sheet的特定列。
而且,在此修改中,当 showColumns()
为 运行 时,显示所有 sheet 的所有列。
如果要更改sheet名称和列,请修改函数hideColumnsK
和hideColumnsP
中的obj
。
参考文献:
我在 Google sheet 中创建了一个自定义菜单,可以根据人们有兴趣查看的指标隐藏/取消隐藏列。 它运行良好,但仅适用于“活动 sheet”。我希望脚本在 sheet 中隐藏某些列并在另一个 sheet 中隐藏其他列。
自定义菜单应包含 3 个项目:'Karen view'、'Patrick View' 和 'View all'
- 凯伦观点:
- 隐藏 sheet 1 中的第 1 列和第 3 列
- 隐藏 sheet 2 中的第 4 列和第 5 列
- 帕特里克观点:
- 隐藏 sheet 1 中的第 1、2 和 4 列
- 隐藏 sheet 2 中的第 4 列和第 5 列
- 查看全部:
- 取消隐藏所有 sheet 中的所有列
下面是我目前使用的脚本: (我对如何将 getactivespreadsheet 与 getactivesheet 一起使用感到有点困惑,这就是我卡住的地方)
var sh = SpreadsheetApp.getActiveSheet()
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Hide metrics')
.addItem('Patrick View', 'hideColumnsP')
.addItem('Karen View', 'hideColumnsK')
.addItem('View all', 'showColumns')
.addToUi();
}
function showColumns() {
sh.unhideColumn(sh.getRange(1, 1, 1, sh.getLastColumn()))
}
function hideColumnsK(){
showColumns()
sh.hideColumns(1)
sh.hideColumns(3)
}
function hideColumnsP(){
showColumns()
sh.hideColumns(1,2)
sh.hideColumns(4)
}
在此先感谢您的帮助
在你的情况下,下面的修改脚本怎么样?
修改后的脚本:
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Hide metrics')
.addItem('Patrick View', 'hideColumnsP')
.addItem('Karen View', 'hideColumnsK')
.addItem('View all', 'showColumns')
.addToUi();
}
function showColumns() {
const sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
showColumnsInAllSheets_(sheets);
}
function hideColumnsK() {
const obj = [{ sheetName: "Sheet1", hide: [1, 3] }, { sheetName: "Sheet2", hide: [4, 5] }];
sample_(obj);
}
function hideColumnsP() {
const obj = [{ sheetName: "Sheet1", hide: [1, 2, 4] }, { sheetName: "Sheet2", hide: [4, 5] }];
sample_(obj);
}
function sample_(obj) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
showColumnsInAllSheets_(sheets);
const sheetObj = sheets.reduce((o, s) => (o[s.getSheetName()] = s, o), {});
obj.forEach(({ sheetName, hide }) => {
if (sheetObj[sheetName]) {
hide.forEach(h => sheetObj[sheetName].hideColumns(h, 1));
}
});
}
function showColumnsInAllSheets_(sheets) {
sheets.forEach(s => s.showColumns(1, s.getMaxColumns()));
}
在这个修改中,可以通过为sheet和列信息提供对象来隐藏特定sheet的特定列。
而且,在此修改中,当
showColumns()
为 运行 时,显示所有 sheet 的所有列。如果要更改sheet名称和列,请修改函数
hideColumnsK
和hideColumnsP
中的obj
。