Google电子表格脚本编辑器:onEdit setValue或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->当前项目的触发器来添加一个onEdit触发器,每次我编辑工作表时该触发器都会增加,但是什么也没发生。

有人可以指导我吗?我如何得到我想要的?

Tanaike
  • 用于计算的值为常数单元“ B18”,“ E18”,“ H3”和“ H4”。
  • 您要在编辑上述单元格之一时运行脚本。您要使用OnEdit事件触发器。
  • 您要将结果值放入“ D21”,“ E21”和“ E22”的单元格。
  • 您的计算没有问题。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改要点:

  • 在您的脚本中,我认为可以使用简单触发器而不是可安装触发器。
  • 从您的答复关于"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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google电子表格编辑器:对脚本文件重新排序

Google 电子表格脚本编辑器中的 IEFE(立即执行函数表达式)

Google 电子表格脚本编辑器中的硬链接单元格

谷歌电子表格脚本编辑器:删除项目

Google电子表格脚本

“谷歌电子表格”选择范围来填充脚本编辑器中的边框(简化我的代码)

Google Spreadsheet:刷新电子表格后,如何在其他标签中保持脚本编辑器处于打开状态

Google表格数组clearcontent

使用Google Apps脚本编辑Google电子表格

从 Google 电子表格发送 Slack 消息 onEdit 触发器,如果编辑的列值与特定文本(如发送或是)匹配

自动更新 Google 电子表格脚本

Google App脚本电子表格

使用Google电子表格脚本复制并粘贴

Google 电子表格脚本 - 搜索功能

语法错误:Google 电子表格脚本

编辑其他电子表格时用于复制现有电子表格的脚本

如何将电子表格的访问权限从编辑器更改为查看器?

是否可以将编辑器的用户名写入Google文档电子表格中的单元格

使用Google脚本和电子表格创建时间触发器

Google脚本:通过触发器处理时,电子表格更新存在问题

如何使用php在Google驱动器中创建电子表格并安装加载项或将应用脚本附加到电子表格中

不会使用.getEditors函数返回电子表格的所有编辑器

在Google时区(而不是电子表格时区)中使用Google Apps电子表格脚本的日期

使用onEdit触发器将值返回到Google电子表格中的单元格

从电子表格中修改另一个电子表格:Google Apps脚本

如何根据活动电子表格 Google Apps 脚本中的数据创建多个电子表格?

Google电子表格公式

有没有办法将 Google Apps 脚本触发器设置为基于对多个电子表格之一的编辑?

在提供带有应用脚本的编辑对话框的同时,在Google电子表格中将数据保密