Google sheets 如何跟踪单元格中某个值随时间的变化。自我参照挑战
我有一个电子表格,其中我必须跟踪包含整数值的单元格的每日变化,并计算今天新获取的数据和昨天数据之间的差异。我不需要跟踪超过最后1天的差异 定义: 我有一个谷歌电子表格,有两张表格:Google sheets 如何跟踪单元格中某个值随时间的变化。自我参照挑战,google-sheets,self-reference,Google Sheets,Self Reference,我有一个电子表格,其中我必须跟踪包含整数值的单元格的每日变化,并计算今天新获取的数据和昨天数据之间的差异。我不需要跟踪超过最后1天的差异 定义: 我有一个谷歌电子表格,有两张表格: “SheetA”显示更新 “SheetB”今天的数据自动导入为=IMPORTDATA(url) “SheetB”中每日导入数据的数据结构如下所示: |键|值| |ABC | 100 | |DEF | 123 | | ... | ... | 数据每天在CET时间00:00更新-这意味着每天早上打开电子表格时
|ABC | 100 |
|DEF | 123 |
| ... | ... | 数据每天在CET时间00:00更新-这意味着每天早上打开电子表格时,它会自动用新数据更新“SheetB”中的值,而我会丢失前一天的数据 “SheetA”结构 |键|昨天值|今天值|差异|
|ABC | 100 | 107 |(+或-)7 |
| ... | .... | .... | ... |
“SheetA”必须显示前一天的每日变化。如果从“SheetB”中新导入的数据显示增加了7,则应在“差异”列中显示+7。差异可以是负的,也可以是正的 如何计算“SheetA”中的差异而不丢失前一天的数据?我不需要保留整个历史。我只需要今天的价值和昨天的价值之差。我可以随意修改工作表。我无法更改源数据,它是使用=IMPORTDATA导入的csv 问题是,我应该在计算差异后更新昨天的数据。但如果没有昨天的数据,我无法计算差异 提前感谢:)您可以使用另一张表格存储昨天的数据。 所以,为了做到这一点,你可以利用应用程序脚本的时间驱动触发器 代码 解释 上述代码由两个功能组成:
-用于将数据从今天的工作表导入昨天的工作表importYesterday
IMPORTDATA
在午夜重新计算,因此此处选择的导入数据的方法使用getRange
和getValues
获取数据,并使用getRange
和setValues
将数据粘贴到昨天的工作表中
请注意,上述方法独立于IMPORTDATA
的重新计算-因此,一旦您在昨日
工作表中有了所有数据,它将保留在那里,除非您特别触发其更改
因此,为了始终从昨天获取数据,创建了createTrigger
函数
createTrigger
-用于触发执行昨天的重要
功能。
这是通过使用atHour(23)
方法完成的,这意味着触发器将在大约23小时运行
因此,基本上,数据是在IMPORTDATA
重新计算之前导入到forday
工作表中的
下一步
至于主工作表中的其他计算,您只需引用今天
和昨天
工作表中的单元格即可
如果您还想根据其他值更新昨天的数据,只需修改importityesterday
函数以满足您的需要,甚至可以创建另一个专门用于更新值的函数
注
您还必须调整importityesterday
中使用的getRange
方法,以匹配您拥有的数据范围
参考文献
-
-
// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0
function importYesterday() {
let spreadsheet = SpreadsheetApp.openById("SPREADSHEET_ID");
let yesterdaySheet = spreadsheet.getSheetByName("YESTERDAY");
let todaySheet = spreadsheet.getSheetByName("TODAY");
let data = todaySheet.getRange(ROW, COL, NUM_ROWS, NUM_COLS).getValues();
yesterdaySheet.getRange(ROW, COL, NUM_ROWS, NUM_COLS).setValues(data);
}
function createTrigger() {
ScriptApp.newTrigger('importYesterday')
.timeBased()
.atHour(23)
.create();
}