我在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
并不接受公式作为输入。 Google Sheets似乎也不允许使用公式创建命名区域(这就是我在Excel中解决这个问题的方法)。
有人可以帮我用GAS重新创建此功能吗?
这是我在Stack Overflow上发现的最接近的现有问题,但我还没有能够让它发挥作用: Google Apps Script performing Index & Match function between two separate Google Sheets
谢谢!
答案 0 :(得分:0)
您应该在代码中添加{contentsOnly:false}参数。像这样的东西:
TemplateSheet.getRange("S2:T2").copyTo(DestSheet.getRange("S2:T"+LRow2+""), {contentsOnly:false});
答案 1 :(得分:0)
从列标题中获取日期,然后将公式粘贴到右侧的行:
true