阻止用户在共享 google 电子表格中创建新工作表

Prevent users from creating new sheets in a shared google spreadsheet

我创建了一个跨页sheet,除了一个单元格,所有 sheets 都受到保护不被编辑,用户应该在其中输入搜索值,过滤 sheet.我共享了 spreadsheet 并启用了编辑以允许这样做,但这也使用户能够创建新的 sheets,我想阻止这种情况。

也许我使用的不是实现我想要的最佳方式,所以欢迎提出建议。我看到有人建议在类似的用例中使用表单,但我不知道如何将他们的调查功能应用到我的需求中。

EDIt:这是共享传播sheet:https://docs.google.com/spreadsheets/d/1C4mrBWJxPLrFQ4bp82UA2ICOr1e6ER47wF7YuElyoZg/edit?usp=sharing

如果没有看到您现有的电子表格,Seedmanc,Sheet 的 "Data" 菜单下 Google 的 "Filter views" 选项可能会有帮助,因为它可以让 owners/editors 创建并保存仅查看用户也可以访问的过滤器。

此外,仅查看用户可以创建他们独有的过滤视图。一旦他们进入筛选范围,就会出现菜单箭头...

...允许他们按条件(包括自定义公式!)或按值进行过滤。因此,根据您的过滤器的复杂程度以及您的用户对电子表格的熟悉程度,过滤器视图可以提供更灵活的过滤器,同时仍然保护您的工作表。

(详细了解 Google Sheets filter views here。)

您可以使用脚本删除每个新创建的(不是所有者创建的)sheet。这是此类脚本的示例:

// Deletes any tab named "SheetN" where N is a number 
function DeleteNewSheets() {
  var newSheetName = /^Sheet[\d]+$/
  var ssdoc = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ssdoc.getSheets();
  
  // is the change made by the owner ?
  if (Session.getActiveUser().getEmail() == ssdoc.getOwner().getEmail()) {
    return;
  }
  // if not the owner, delete all unauthorised sheets
  for (var i = 0; i < sheets.length; i++) {
    if (newSheetName.test(sheets[i].getName())) {
      ssdoc.deleteSheet(sheets[i])
    }
  }
}

然后设置一个触发器,在发生 更改(如 sheet 创建)时运行此函数 DeleteNewSheets

注意:如果英语不是文档语言,您应该更改正则表达式 /^Sheet[\d]+$/,例如对于法语,它应该是 /^Feuille [\d]+$/.