【问题标题】:List names of sheets in Google Sheets列出 Google 表格中工作表的名称
【发布时间】:2020-11-18 08:50:00
【问题描述】:

我找到了列出 Google 表格中所有表格名称的代码

function sheetnames() {
  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets()
  for (var i=2 ; i<sheets.length ; i++) out.push( [ sheets[i].getName() ] )
  return out 
}

但我们必须将 =sheetnames() 放在单元格中才能获得值。 创建新工作表时自动更新的脚本是否有任何改进?

【问题讨论】:

  • 一次只关注一个问题。创建新工作表时,没有运行函数的触发器。请参阅可用触发器列表here。恐怕解决方案只能是一种解决方法。
  • 您好,我发布了一个答案,希望对您有所帮助。如果没有解决您的其他问题,因为您应该专注于一个特定问题,并且应该在另一篇文章中提出该额外问题(与第一个问题完全无关)。请注意,包含多个不相关问题的帖子可能会被关闭。

标签: google-sheets


【解决方案1】:

您必须安装一个onChange 触发器,该触发器在用户修改电子表格的结构时(例如,当插入或删除工作表时)运行一个函数。

您可以按照these steps 手动安装触发器,或以编程方式执行此功能一次:

function createOnChangeTrigger() {  
  const ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("writeSheetNames")
  .forSpreadsheet(ss)
  .onChange()
  .create();
}

一旦安装,函数writeSheetNames 将在每次创建、删除或重命名工作表时运行。这个函数应该做两件事:

  • 检索电子表格中所有工作表的工作表名称。
  • 将这些工作表名称写入您指定的单元格。

例如,下面的函数会将数据写入名为Sheet1 的工作表的A 列。

代码示例:

function writeSheetNames() {
  const ss = SpreadsheetApp.getActive();
  const sheetNames = ss.getSheets().map(sheet => [sheet.getName()]);
  const sheet = ss.getSheetByName("Sheet1");
  sheet.getRange("A:A").clear(); // Delete previous data
  sheet.getRange(1,1,sheetNames.length).setValues(sheetNames);
}

参考:

【讨论】:

  • 非常感谢您的帮助。它对我有用。
  • @DucNguyen 不客气。请考虑accepting this answer,如果它解决了您的问题。
  • @lamblichus 哦,我刚刚勾选了“接受这个答案”作为您的答案。它很好地解决了我的问题。我有另一个问题,如下链接。你能看看你的方便吗? stackoverflow.com/q/64907343/14660513干杯,
  • @DucNguyen 嗨!我看到有人已经发布了对您的新问题的答案,我认为这将解决您的问题。
  • @lamblichus,我已经解决了这个问题。非常感谢。
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多