Google 应用程序脚本 - 如何在多个工作表中隐藏列?

Google App Script - How to hide columns across muliple sheets?

我在 Google sheet 中创建了一个自定义菜单,可以根据人们有兴趣查看的指标隐藏/取消隐藏列。 它运行良好,但仅适用于“活动 sheet”。我希望脚本在 sheet 中隐藏某些列并在另一个 sheet 中隐藏其他列。

自定义菜单应包含 3 个项目:'Karen view'、'Patrick View' 和 'View all'

  1. 凯伦观点:
  1. 帕特里克观点:
  1. 查看全部:

下面是我目前使用的脚本: (我对如何将 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名称和列,请修改函数hideColumnsKhideColumnsP中的obj

参考文献: