首页 > 解决方案 > 尝试脚本化的谷歌表格

问题描述

我对电子表格脚本有点陌生,我有一个想要完成的项目。

概述:

我正在制作记录阅读进度的电子表格。第一列 (A) 是日期。第二列(B)是阅读所需的时间。第三列 (C) 是花费在阅读上的分钟数。第四列 (D) 是如下所述的奖励分钟数。第五列 (E) 是 (Effort+Bonus-Requirement) 的结果

如果您花费超过 30 分钟(比如说 30+x 分钟),则额外的用于为接下来的 x 天增加 1 分钟。因此,如果您在接下来的 7 天中花费 37 分钟阅读,您将获得 1 分钟的奖励,因此您需要在接下来的 7 天中花费 29 分钟而不是通常的 30 分钟。

然而,奖金可以累积和叠加。如果您在第一天花费 37 分钟,则第二天您需要花费 29 分钟,但如果您总共花费了 35 分钟,那么接下来的 5 天(第二天之后)将再获得 1 分钟奖励,所以第三天一天将有总共2分钟的奖金。所以这个例子中更大的图景将是第 2 天获得 +1,第 3 到第 7 天将获得 2 分钟,第 8 天将获得 1 分钟(从第一天开始,而不是从第二天开始)。

要解决的其他标准:

计算的最大奖励是无上限的,因此如果用户需要花 30 分钟阅读,而他们花了 150 分钟,那么接下来的 120 天内,每天 120 分钟的奖励将被添加为 1 分钟。

红利可无限制叠加,如果总金额超过每日要求的限额将被正常处理,仅通过红利即可达到并超过要求的30分钟,将被正常处理。如果您在某一天有 35 分钟的累积奖金,即使在这一天到来之前,它也会被视为“目标达成 + 5 分钟奖金”。然而,没有什么可以阻止当天超额完成以增加奖金。

我的努力

我已经使用 google sheet javascript 编写了一些脚本,但问题是我必须创建一个需要在每个单元格中使用的函数,因为据我了解,脚本不能在其调用的单元格以外的单元格上使用 setValue()在。

此外,函数的工作方式是它们仅在您将单元格设置为“=myFunction()”时调用,并且即使您更改用作输入的单元格也不会更改。

一些代码

这是我创建的函数,它工作正常,但是我需要它保持持久性并实时进行计算。

function c() {

  var app = SpreadsheetApp;
  var ss = app.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet();
  var thisCell = activeSheet.getCurrentCell();
  var thisColumn = thisCell.getColumn();
  var thisRow = thisCell.getRow();
  var finalValue = 0;

  for (var i = 2; i< thisRow; i++) {
    //if the value in cell Ei is greater than the difference between (thisRow-i) then increment cell
    if (activeSheet.getRange("E"+i).getValue() >= (thisRow-i)){
    Logger.log(activeSheet.getRange("E"+i).getValue());  
    finalValue++;
    }
  }

  return (finalValue);
  Logger.log("final "+finalValue);
}

我希望我的问题对你来说足够清楚。

标签: javascriptgoogle-sheets

解决方案


推荐阅读