Google apps script 谷歌脚本在更新时保持运行总数

Google apps script 谷歌脚本在更新时保持运行总数,google-apps-script,Google Apps Script,我正在设计一个谷歌表来跟踪我的游戏协会成员的统计数据。每个成员的统计数据将经常更新,并且必须为每个成员的每个统计数据保留一个运行总数 示例:如果Stat1被更新,则Stat1Total将等于Stat1Total+Stat1 这需要对多个统计数据执行,并且统计数据不会同时更新。有时,可以更新成员1的Stat1,但不更新成员2的Stat2和stats 我尝试了Stat1Total=Stat1Total+Stat1,并启用了迭代计算,但这会更新所有统计总计,即使统计尚未更新。我需要StatTotal仅

我正在设计一个谷歌表来跟踪我的游戏协会成员的统计数据。每个成员的统计数据将经常更新,并且必须为每个成员的每个统计数据保留一个运行总数

示例:如果Stat1被更新,则Stat1Total将等于Stat1Total+Stat1

这需要对多个统计数据执行,并且统计数据不会同时更新。有时,可以更新成员1的Stat1,但不更新成员2的Stat2和stats

我尝试了Stat1Total=Stat1Total+Stat1,并启用了迭代计算,但这会更新所有统计总计,即使统计尚未更新。我需要StatTotal仅在Stat已更新时更新

我找到了这个脚本,但无法解决如何使其适应多个/不同的单元格。这仅适用于特定板材的B7和B6。也许它会得到活动单元格,然后根据活动单元格的内容更新另一个单元格

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var b7 = s.getRange("B7");
  var b6 = s.getRange("B6");
  var activeCell = s.getActiveCell().getA1Notation();
  if( s.getName()=="Sheet1" && activeCell=="B6" )
    b7.setValue(b7.getValue()+b6.getValue());
};
提前感谢您提供的任何见解/帮助

编辑:谢谢所有的答案,但是,可能是因为我自己的经验不足,我仍然很难让它工作。因此,我将通过示例回到我最初的问题:

         INF      INF TOTAL    Gems      GEMS TOTAL
字符1(A1)(B1)(C1)(D1)

字符2(A2)(B2)(C2)(D2)

我在A1中加了100,B1应该用B1+A1更新,现在B1应该=100。其他任何内容都不应更新。后来,我在A1中放入了200,B1应该更新为300(B1(100)+A1(200)。同样,其他内容也不应该改变。也应该适用于角色2和宝石。有意义吗?注意:总数将在另一张纸上,但即使它们必须保持在同一张纸上,我也可以把它们搞定

我再次尝试B1=B1+A1,但B1会更新导致B1按A1中的值更新的任何事件,即使A1未更新

我希望有一个功能可以查看更新的内容。例如:

(这将出现在单元格B2=MyFunction(B1)的公式栏中)它看到B1已更新,然后根据该值更新单元格


再次感谢大家的帮助,我为自己的经验不足道歉:)

我使用e.range对它进行了一点修改,并添加了一些临时变量来调试它,它可以像这样正常工作。确保您创建了onEdit事件。如果您将notificaton设置为immediate,您将在事件出现问题后几分钟内收到反馈。顺便说一句,您不必将函数命名为onEdit,您可以给它任何有效的乐趣我的名字

function onEdit1(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var b7 = s.getRange("B7");
  var b6 = s.getRange("B6");
  //var activeCell = s.getActiveCell().getA1Notation();
  var editCell = e.range.getA1Notation();
  //var editCell='B6';
  if( s.getName()=="Sheet6" && editCell=="B6" )
  {
    var v = b7.getValue()+b6.getValue();
    //SpreadsheetApp.getUi().alert('v = ' + v + ' editCell = ' + editCell);
    b7.setValue(v);
   }
}
好的,这是第二个例子的代码

function onEdit1(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var col = e.range.getColumn();
  var row = e.range.getRow();
  if(col==1 && row<3)
  {
    s.getRange(row, col+1).setValue(Number(s.getRange(row, col+1).getValue())+Number(e.value));
  }
}
函数onEdit1(e)
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var col=e.range.getColumn();
var row=e.range.getRow();

如果(col==1&&row我使用e.range对它进行了一点修改,并添加了一些临时变量来调试它,它可以这样工作。确保您创建了onEdit事件。如果您将notificaton设置为immediate,您将在事件出现问题的几分钟内得到反馈。顺便说一句,您不必命名函数onEdit,您可以给它任何名称。)有效的函数名

function onEdit1(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var b7 = s.getRange("B7");
  var b6 = s.getRange("B6");
  //var activeCell = s.getActiveCell().getA1Notation();
  var editCell = e.range.getA1Notation();
  //var editCell='B6';
  if( s.getName()=="Sheet6" && editCell=="B6" )
  {
    var v = b7.getValue()+b6.getValue();
    //SpreadsheetApp.getUi().alert('v = ' + v + ' editCell = ' + editCell);
    b7.setValue(v);
   }
}
好的,这是第二个例子的代码

function onEdit1(e) 
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var col = e.range.getColumn();
  var row = e.range.getRow();
  if(col==1 && row<3)
  {
    s.getRange(row, col+1).setValue(Number(s.getRange(row, col+1).getValue())+Number(e.value));
  }
}
函数onEdit1(e)
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var col=e.range.getColumn();
var row=e.range.getRow();

如果(col==1&&row,您可以通过检查事件对象(e)获得编辑单元格的坐标,并计算需要写入的单元格的坐标。请尝试此操作

function onEdit(e) {

var editRange = e.range;  // the edited range
var sheet = SpreadsheetApp.getActiveSpreadsheet() //change to your sheet
                          .getSheets()[0];
var editRow = editRange.getRow(); // row of the edited cell
var editCol = editRange.getColumn(); //column of the edited cell

var targetCol = 3;  //column index for the target cell

if(editCol == 2) {  // check if the cell was in column 2(B)

var editValue = editRange.getValue();

if(editValue) { //check if the value is not empty string("") or 0

    var targetRange = sheet.getRange(editRow, targetCol); //target cell in the same row as the edited cell
    targetRange.setValue(targetRange.getValue() + editValue);


}



}

}

您可以通过检查事件对象(e)来获取已编辑单元格的坐标,并计算需要写入的单元格的坐标。请尝试此操作

function onEdit(e) {

var editRange = e.range;  // the edited range
var sheet = SpreadsheetApp.getActiveSpreadsheet() //change to your sheet
                          .getSheets()[0];
var editRow = editRange.getRow(); // row of the edited cell
var editCol = editRange.getColumn(); //column of the edited cell

var targetCol = 3;  //column index for the target cell

if(editCol == 2) {  // check if the cell was in column 2(B)

var editValue = editRange.getValue();

if(editValue) { //check if the value is not empty string("") or 0

    var targetRange = sheet.getRange(editRow, targetCol); //target cell in the same row as the edited cell
    targetRange.setValue(targetRange.getValue() + editValue);


}



}

}

上面的代码完全符合您的要求。它检查哪个单元格被编辑,并且只对相邻列中的单元格进行更改。啊哈…现在我看到了。我正在将总数包装在另一张表中,而不是相邻列中。将总数复制到另一张表将很容易。谢谢!上面的代码完全符合您的要求equested。它检查哪个单元格被编辑,并且只对相邻列中的单元格进行更改。啊哈…现在我看到了。我被另一张表而不是相邻列中的总数所包围。很容易将总数复制到另一张表中。谢谢!@Anton Dementiev我更新并简化了第二个示例的代码。如果要添加更多行,只需更改
row@AntonDementiev我更新并简化了第二个示例的代码。如果要添加更多行,只需更改
行即可