如何在Google SpreadSheets上动态引用多个工作表?

时间:2015-05-06 15:32:14

标签: google-apps-script google-sheets spreadsheet

我使用Google SpreadSheet插件制作Google Analytics报告。我的问题是,对于每个查询,此加载项会创建一个不同的工作表。我经常有大约50张不同的数据表,必须将数据编译成一张。例如:

我可能有3张名为:“有机数据”,“直接数据”和“其他数据”

每张工作表都有一组不同的数据,我想将其编译到名为“Report”的第4张表中的单个表中。该表的第一列数据来自“有机数据”表,第二列数据来自“直接数据”表,第三列数据来自“其他数据”表。

我这样做的方法是逐个引用单元格。因此,在“报告”表中,我将写入= Organic Data!B4,然后拖动以填充列的其他单元格,然后我将对其他工作表执行此操作以填充“报表”工作表的其他列。

问题是,正如我所说,我经常有超过50张不同的纸张,并且引用它们会变得相当困难。

我想动态地这样做。在单元格上有工作表的名称,并使用它来引用单元格。例如:

在“报告”表格中:

A1 =“有机数据”,B1 =“直接数据”,C1 =“其他数据”

在单元格“Report!A2”中我试过写= CONCAT(“=”,A1,“!”,“B4”)希望在这个单元格中获取单元格“Organic Data!B4”的值,但我得到字符串“=有机数据!B4,而不是”有机数据“表中的单元格值。

我已经制定了一个自定义公式来解决这个问题:

function referenceSheet(sheetName, cellInput) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell = ""
  var cell = sheetName+'!'+cellInput;

  var value = ss.getRange(cell).getValue();

  return value;
}

效果很好。在上面的示例中,为了将单元格“Organic Data!B4”的值输入单元格“Report!A2”,我需要在“Report!A2”上写下以下内容:

"=referenceSheet(A1, cell("address",B4))" 

它将返回单元格“Organic Data!B4”的值。

我确实遇到过这个定制公式的问题。主要是,自定义公式不刷新onChange,所以如果我更改“Organic Data!B4”的值,“Report!A2”将不会更改。

我想知道是否有与我的自定义公式类似的原生公式?

如果没有,当我从其他单元格更改日期时,最好的方法是使我的自定义公式刷新?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我在Google论坛上发布了相同的问题并得到了一个很好的答案。

有一个原生公式call = INDIRECT

我的例子就是这样:

=INDIRECT(CONCATENATE(A$1,"!",cell("address",$B4)),true)