我正在设计一张Google表来跟踪我的游戏公会成员的统计数据。对于每个成员,统计数据将经常更新,并且必须为每个成员的每个统计数据保留一个运行总计。
示例:如果Stat1已更新,则Stat1Total将等于Stat1Total + Stat1。
这需要针对多个统计信息进行,并且统计信息不会同时更新。有时成员1的Stat1可能会更新,但不会更新Stat2,也不会更新成员2的统计数据。
我已尝试使用迭代计算的Stat1Total = Stat1Total + Stat1,但即使尚未更新Stat,也会更新所有Stat Totals。我需要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已更新,然后按该值更新单元格。
再次,谢谢大家的帮助,我为我的经验缺乏道歉:)
答案 0 :(得分:1)
我通过使用e.range稍微修改了它并添加了一些临时变量来调试它并且它正常工作。确保创建onEdit事件。如果您立即设置通知,您将在几分钟内收到事件中的问题反馈。顺便说一句,你不必将函数命名为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));
}
}
答案 1 :(得分:1)
您可以通过检查事件对象(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);
}
}
}