首页 > 解决方案 > 使用 SheetName() 数组从多个工作表中检索单元格以动态链接到每个工作表

问题描述

我正在尝试创建一个动态的、自动更新的 Google 电子表格,它可能会也可能不会超出规范。

目标:

我正在跟踪 Google 表格中每月记录的辅导时间。每个月在 Google 工作表工作簿中都有自己的工作表。要创建一个新的月份,我只是复制上个月并删除内容。我有一个汇总表来跟踪每月记录的时间、付款等。我想尽可能多地自动化这个工作表。

采取的方法:

我使用以下代码获取了一个数组,当我下个月添加另一张表时该数组将自动更新。到目前为止,如 B 列所示:

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

/* https://www.extendoffice.com/documents/excel/5222-google-sheets-get-list-of-sheets.html#a2*/

下一步是在每张纸上获取一个特定的单元格。我可以手动输入每个工作表名称,然后链接工作正常。例如“Aug2021”! 到目前为止 35 美元的仪表板页面

什么不起作用:

但我正在尝试自动化这个过程。这意味着上面的内容不会削减它。

这是我尝试过的。

=B10!$E$35

='B10’!$E$35

='(TO_TEXT(B10))’!$E$35

问:

我显然不是程序员,但上帝让我现在尝到了它的滋味。我有问题是因为我正在处理一个数组吗?如何从数组中调用工作表名称,使其表现得像工作表名称通常那样?我该如何补偿?我是否需要一段新代码,以便我可以按表格收集特定单元格或单元格范围中的信息?这段代码会使用“get”命令吗?

标签: arraysgoogle-sheetshyperlinkcell

解决方案


利用:

=INDIRECT(B10!$E$35)

但请注意,这INDIRECT不适用于数组


这是一个替代示例:

无论工作表是否存在或工作表是否在不久的将来创建,所有工作表的总和 E35

单元格 A1:

=ARRAYFORMULA("=SUM({"&TEXTJOIN("; ", 1, 
 "IFERROR("&UNIQUE(TEXT(ROW(INDIRECT(1*"31/08/2021"&":"&1*(TODAY()+90))), 
 "mmmyyyy\!E35"))&", """")")&"})")

脚本:

function onEdit() { 
var sheet = SpreadsheetApp.getActive().getSheetByName('Master Sheet');  
var src = sheet.getRange("A1");   // The cell which holds the formula
var str = src.getValue(); 
var cell = sheet.getRange("C5");  // The cell where I want the results to be
cell.setFormula(str);             // Setting the formula.
}

推荐阅读