当前位置: 首页 > 知识库问答 >
问题:

Google电子表格脚本编辑器:OneEdit setValue或clearContent

金宣
2023-03-14

我正试图制作一个电子表格来管理我的资金/开支,但在尝试自动化我的流程时遇到了一个问题

我想制作一段代码,每次在工作表中编辑单元格时运行。

当被触发时,我希望它计算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,但我无法在调用函数的单元格外进行编辑。我用过编辑-

有人能指引我吗?我怎样才能得到我想要的?

共有1个答案

吕学
2023-03-14
  • 用于计算的值是"B18"、"E18"、"H3"和"H4"的常数单元格。
  • 在编辑上述单元格之一时运行脚本。您想要使用OnEdit事件触发器。
  • 您要将结果值放入D21、E21和E22的单元格中。
  • 你的计算没有问题。

如果我的理解是正确的,这个答案怎么样?请把这看作是几种可能的答案之一。

  • 在您的脚本中,我认为可以使用简单触发器代替可安装触发器
  • 从您的回复中,关于“异常:您没有调用setValue(第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.
  }
}
  • 简单触发器
 类似资料:
  • 我试图用谷歌应用程序脚本导出谷歌电子表格到JSON(或XML)。以下是我的谷歌表: 下面是我的谷歌应用程序脚本代码: 但是,当我部署JSON时,我没有得到任何JSON。 多谢,

  • 这是我的代码,基本上是从文本。 这成功地在Google电子表格中创建了一个电子表格。我可以在internet浏览器的驱动器主页上看到它。在此之后,当我尝试从另一个电子表格导入工作表时,会发生错误。 出于某种原因,我得到了错误: googleapiclient.errors.HttpError: 这是奇怪的部分,因为电子表格已经创建。我可以从我的互联网浏览器的驱动器主页上看到它。如果我在浏览器中插入

  • 我编写了一个绑定到谷歌电子表格的小脚本,它从最后一行的单元格中读取电子邮件地址并向其发送电子邮件。这些值由一个WebApp(而不是谷歌表单)收集。 我试过各种各样的触发器。时间驱动触发器工作,但电子表格触发器不工作。我都试过了。如果我手动更改电子表格中的某个单元格,onEdit触发器会工作,但当工作表被另一个脚本更改时,它不会启动。

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩