【问题标题】:How to have a reference to a sheet bound to the name instead of the sheet如何引用绑定到名称而不是工作表的工作表
【发布时间】:2020-02-03 01:26:24
【问题描述】:

我正在制作一个电子表格来格式化谷歌表单的回复。但是,该表格将每周提供一次;理想情况下,我想将表单响应导入到此电子表格中,让格式化的数据表现在使用这个新的响应表而不是旧的响应表,而无需更新数据表中的公式。但是,如果我尝试通过将新数据表重命名为旧数据表来做到这一点,它会保留旧表引用并在所有公式中更新其名称。

我没有从一些谷歌搜索中找到任何解决方案。有没有简单的方法来解决这个问题?

编辑: here 是一个示例电子表格。理想情况下,我希望从“新工作表”而不是旧工作表中检索“格式化工作表”中的数据。但是,我不想更改“格式表”中的所有公式来反映这一点,因为这将是我经常做的过渡。不幸的是,重命名工作表会保留引用。

【问题讨论】:

  • 您能提供一个示例电子表格吗?
  • @Tanaike 我在这里添加了示例表,带有任意数据来显示问题和意图。
  • 感谢您回复并提供示例电子表格。从您共享的电子表格中,我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

标签: google-apps-script google-sheets


【解决方案1】:
  • 您想使用工作表Formatting Sheet 中的值,方法是将工作表Old Sheet 中的值替换为工作表New Sheet 中的新值。
  • 在您当前的问题中,即使更改了工作表名称,也无法更新值。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

在您的情况下,即使工作表名称更改,工作表 ID 也不会更改。这样,该公式使用旧值。我认为你的问题的原因是这个。在这个答案中,为了实现您的目标,使用了 Google Apps Script。

流程:

示例脚本的流程如下。

  1. 检索New SheetOld Sheet 的工作表对象,它们分别是源工作表和目标工作表。
  2. 备份Old Sheet
    • 如果不想备份,请删除destinationSheet.copyTo(ss).setName(destinationSheet.getName() + "_backup_" + new Date().toISOString());
  3. 将值从New Sheet 复制到Old Sheet。由此,值被替换。在Formatting Sheet,使用了新值。

示例脚本:

请将以下示例脚本复制并粘贴到共享电子表格的脚本编辑器中。并运行myFunction()

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName("New Sheet");
  var destinationSheet = ss.getSheetByName("Old Sheet");

  // Backup "Old Sheet".
  destinationSheet.copyTo(ss).setName(destinationSheet.getName() + "_backup_" + new Date().toISOString());

  // Put values from "New Sheet" to "Old Sheet"
  sourceSheet.getDataRange().copyTo(destinationSheet.getRange(1, 1));
}
  • 运行myFunction()的脚本时,可以在Formatting Sheet的工作表中看到新值计算的结果。

参考资料:

【讨论】:

  • @Vedvart1 感谢您的回复。我很高兴你的问题得到了解决。我可以理解您的目标,因为您提供了示例电子表格。也谢谢你。
猜你喜欢
  • 2022-11-13
  • 2021-09-28
  • 2018-04-07
  • 2021-08-13
  • 1970-01-01
  • 2019-06-18
  • 2012-08-22
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多