【发布时间】:2017-12-14 11:10:04
【问题描述】:
我在 Google 表格中有一个模型,该模型设置为每天一列。它包含实际值和预测值,每天我都需要前滚公式以用实际值替换预测值。我不能前滚整列,只能前滚一部分(上面和下面的参考数字不应更改)。
我每天都尝试编写一个脚本来为我执行此操作,但我不知道如何让getRange 引用动态范围。这是我的尝试:
function rollColumn() {
var ss2 = SpreadsheetApp.openById('<ID redacted>');
ss2.getRange("=index(Model!$7:$7,,match(today()-2,Model!$4:$4,0)):index(Model!$168:$168,,match(today()-2,Model!$4:$4,0))").copyTo(ss2.getRange("=index(Model!$7:$7,,match(today()-1,Model!$4:$4,0)):index(Model!$168:$168,,match(today()-1,Model!$4:$4,0))"))
};
INDEX 公式在引用相关范围时起作用(我已在电子表格中对其进行了测试)。但显然getRange 不接受公式作为输入。谷歌表格似乎也不允许使用公式创建命名范围(这就是我在 Excel 中解决这个问题的方法)。
有人可以帮我用 GAS 重新创建这个功能吗?
这是我在 Stack Overflow 上找到的最接近的现有问题,但我无法让它发挥作用: Google Apps Script performing Index & Match function between two separate Google Sheets
谢谢!
【问题讨论】:
-
不清楚您是否尝试过使用日志,或者您是否了解 JavaScript。现在,您的代码的主要问题是您正试图让 Google 表格公式在脚本中工作。但是,Google 表格公式仅在使用 Google 表格编写时才有效。请发送指向其中包含索引匹配的示例 Google 表格的链接。然后我将提供帮助并提供复制其行为的代码。
-
感谢 Antoine 的快速回复。这是一个简化的样本表:docs.google.com/spreadsheets/d/… 重点是,一旦前一天的数据进来,在这种情况下,我需要将
M4:M6复制到N4:N6我已经包含了一个黄色的公式,它显示了我将如何得到根据今天的日期到那个范围,但我确信脚本解决方案最终可能会完全不同..再次感谢! -
感谢链接,但我看不到公式。你能把分享设置改成public on the web吗?这样每个看到您的问题的人都能看到?
-
谢谢 Antoine,我已授予您编辑权限,可以回复任何进一步的请求。任何人都应该可以通过链接查看工作表。
标签: google-apps-script google-sheets