如何在 Google 电子表格中使用 ImportRange 函数强制重新计算单元格?

2024-01-11

我有一个电子表格目标,它使用 ImportRange 从另一个电子表格源获取一些数据,如

A6 = query(ImportRange("mykey", "Weekly!B:BI"), CONCATENATE("select * WHERE Col1='",B3,"'"), 0)

select 子句用于子选择与 B3 中的值匹配的数据 - 如果此单元格值发生更改,则导入将“立即”更新。

如果有人更改了源电子表格中的某些内容,我希望能够强制更新,以便我们“立即”看到它反映在目标中。目前,这只发生在“一段未指定的时间之后”,最多一分钟左右,对于我的目的来说太慢了。

Update:

根据下面的答案和评论,我在源中添加了一个从编辑触发器调用的函数 UpdateTarget*:

function UpdateTarget() {
  try {
    var ss = SpreadsheetApp.openById("targetID");
  }
  catch(err)
  {
    Browser.msgBox(err);
  }
  var sheet = ss.getSheetByName("Weekly");
  sheet.getRange("A4").setValue("=query(ImportRange("sourceID", "Weekly!B:BI"), CONCATENATE("select * WHERE Col1='",B3,"'"), 0) ");
  SpreadsheetApp.flush();
}

这似乎更有效,但如果我沿着这条路线走,我也可能有一个脚本将更新的值直接写入目标。

我真的希望目标成为其他用户可以复制的模板,并且可以从主源中提取特定的“实时”数据,我不愿意在源中实现在添加新目标时需要维护的脚本。

我认为我真正需要的是一种重新表述公式的方法,使其依赖于可以编辑的单元格并触发重新计算 - 但这对结果没有影响?

(*旁白:我发现 openByID 函数返回“不允许操作”异常,除非通过显式触发器调用 - onEdit 被禁止编辑其他电子表格 -参见https://developers.google.com/apps-script/understanding_triggers https://developers.google.com/apps-script/understanding_triggers).


当用户打开电子表格或更改影响公式的单元格(在同一电子表格内)时,将重新计算公式。

由于您正在使用两个不同的电子表格,因此后一种情况不适用。

您从哪个电子表格调用flush()函数。我假设它在目标电子表格中。这将没有任何用处。

一种解决方案是在源电子表格中编写一个脚本,每次编辑源时都会修改目标电子表格

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Google 电子表格中使用 ImportRange 函数强制重新计算单元格? 的相关文章

随机推荐