[英]MailApp.sendEmail not working with onEdit function (Google Sheets Script Editor)
[英]Google spreadsheets script editor: onEdit setValue or clearContent
我试图制作一个电子表格来管理我的钱/开支,但在尝试自动化我的流程时遇到了问题
我想制作一段代码,每次在工作表中编辑单元格时都会运行。
触发时,我希望它计算 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 -> current project's triggers 添加了一个 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.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.