Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets 如何跟踪单元格中某个值随时间的变化。自我参照挑战_Google Sheets_Self Reference - Fatal编程技术网

Google sheets 如何跟踪单元格中某个值随时间的变化。自我参照挑战

Google sheets 如何跟踪单元格中某个值随时间的变化。自我参照挑战,google-sheets,self-reference,Google Sheets,Self Reference,我有一个电子表格,其中我必须跟踪包含整数值的单元格的每日变化,并计算今天新获取的数据和昨天数据之间的差异。我不需要跟踪超过最后1天的差异 定义: 我有一个谷歌电子表格,有两张表格: “SheetA”显示更新 “SheetB”今天的数据自动导入为=IMPORTDATA(url) “SheetB”中每日导入数据的数据结构如下所示: |键|值| |ABC | 100 | |DEF | 123 | | ... | ... | 数据每天在CET时间00:00更新-这意味着每天早上打开电子表格时

我有一个电子表格,其中我必须跟踪包含整数值的单元格的每日变化,并计算今天新获取的数据和昨天数据之间的差异。我不需要跟踪超过最后1天的差异

定义:

我有一个谷歌电子表格,有两张表格:

  • “SheetA”显示更新
  • “SheetB”今天的数据自动导入为=IMPORTDATA(url)
  • “SheetB”中每日导入数据的数据结构如下所示:

    |||
    |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();
    }