Bob*_*ell 5 google-sheets google-apps-script importrange google-sheets-formula
我有一个电子表格目标,它使用ImportRange从另一个电子表格源获取一些数据,如
A6 = query(ImportRange("mykey", "Weekly!B:BI"), CONCATENATE("select * WHERE Col1='",B3,"'"), 0)
Run Code Online (Sandbox Code Playgroud)
select子句用于子选择与B3中的值匹配的数据 - 如果更改此单元格值,则"立即"更新导入.
如果有人在源电子表格中更改某些内容,我希望能够强制更新,以便我们在"立即"中看到它反映在目标中.目前这只发生在"一些未指定的时间之后",这一时间长达一分钟左右,而且对于我的目的来说太慢了.
更新:
根据下面的答案和评论,我在Source中添加了一个函数UpdateTarget,该函数从on edit trigger*调用:
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();
}
Run Code Online (Sandbox Code Playgroud)
这似乎更有效,但我可能有一个脚本,如果我沿着这条路线走下去,将更新的值直接写入目标.
我真的希望Target成为其他用户可以复制的模板,并且可以从主源中提取特定的"实时"数据,我不愿意在Source中实现需要在添加新目标时进行维护的脚本.
我认为我真正需要的是一种重新陈述公式的方法,这取决于可以编辑的单元格并触发重新计算 - 但是对结果没有影响?
(*旁白:我发现openByID函数返回"Action not allowed"异常,除非通过显式触发器调用 - onEdit禁止编辑其他电子表格 - 请访问https://developers.google.com/apps-script/understanding_triggers).
当用户打开电子表格或更改影响公式的单元格(在同一电子表格内)时,将重新计算公式。
由于您正在使用两个不同的电子表格,因此后一种情况不适用。
您从哪个电子表格调用flush()函数。我假设它在目标电子表格中。这将没有任何用处。
一种解决方案是在源电子表格中编写一个脚本,每次编辑源时都会修改目标电子表格
归档时间: |
|
查看次数: |
8957 次 |
最近记录: |