我试图制作一个电子表格来管理我的资金/支出,并且在尝试使我的流程自动化时遇到了问题
我想编写一条代码,该代码每次在工作表中编辑一个单元格时都会运行。
触发后,我希望它计算ssum,lsum和betal(在循环中),然后将其放入3个不同的单元格中。该代码的行为符合预期,但是onedit触发器不起作用。
这是我的代码:
function regnudbetalprocent() {
var betal = 0;
var i = 1;
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var sum = activeSheet.getRange(18, 5).getValue();
var ssum;
var lsum;
var ssumori = activeSheet.getRange(3, 8).getValue();
var lsumori = activeSheet.getRange(4, 8).getValue();
var fuld = activeSheet.getRange(18, 2).getValue();
while(betal < sum){
ssum = ((ssumori - fuld / 2) / 100) * i;
lsum = ((lsumori - fuld / 2) / 100) * i;
betal = ssum + lsum;
i++;
}
if (betal > sum) {
var output = [
[ssum,lsum],
["Samlet",betal]
]
return output;
}
}
输出变量相应地从调用函数的位置设置相邻单元格
我已经尝试过使用setValue和clearContent,但是我无法在调用该函数的单元格外部进行编辑。我用过Edit->当前项目的触发器来添加一个onEdit触发器,每次我编辑工作表时该触发器都会增加,但是什么也没发生。
有人可以指导我吗?我如何得到我想要的?
如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。
"Exception: You do not have permission to call setValue (line 7)."
,我认为您可能正在将函数regnudbetalprocent()
用作自定义函数。在这种情况下,会发生这种错误。当以上几点反映到您的脚本时,它将变为以下内容。
的功能onEdit
用作简单触发器。因此,为了运行脚本,请手动编辑单元格“ B18”,“ E18”,“ H3”和“ H4”之一。这样,运行脚本并从“ B18”,“ E18”,“ H3”和“ H4”的单元格中检索值,并将计算结果放入“ D21:E22”的单元格中。
function onEdit(e) {
var a1Notation = e.range.getA1Notation(); // Added
if (a1Notation != "B18" && a1Notation != "E18" && a1Notation != "H3" && a1Notation != "H4") return; // Added
var betal = 0;
var i = 1;
var app = SpreadsheetApp;
var ss = app.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();
var sum = activeSheet.getRange(18, 5).getValue();
var ssum;
var lsum;
var ssumori = activeSheet.getRange(3, 8).getValue();
var lsumori = activeSheet.getRange(4, 8).getValue();
var fuld = activeSheet.getRange(18, 2).getValue();
while(betal < sum){
ssum = ((ssumori - fuld / 2) / 100) * i;
lsum = ((lsumori - fuld / 2) / 100) * i;
betal = ssum + lsum;
i++;
}
if (betal > sum) { // Modified
var output = [[ssum,lsum], ["Samlet",betal]];
var r = e.range.getSheet().getRange("D21:E22");
r.clearContent(); // This line might not be required.
r.setValues(output);
SpreadsheetApp.flush(); // This line might not be required.
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句