onEdit(e) 在附加组件中不起作用

2023-11-26

我编写了一个脚本,在本机电子表格中使用时效果很好。我现在尝试将其作为附加组件发布,并且发现onEdit(e)不工作,当onOpen(e) and onInstall(e)工作正常。

我已经查看了有关授权模式和安装/启用附加组件的文档,但我认为我可能遗漏了一些东西(希望很简单),因为我是初学者。我应该以不同的方式调用这些函数吗?或者放置onEdit?任何帮助表示赞赏。谢谢!!

function setup() {
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Send Auto Emails');

  try {ss.setActiveSheet(ss.getSheetByName('Send Auto Emails'));}
  catch (e) {ss.insertSheet('Send Auto Emails', 0);}

  sheet.getRange(1, 1).setValue('Recipient Email Address');   

  //etc...
}

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = e.source.getActiveSheet();
  var range = e.source.getActiveRange();

  if (range.getA1Notation() == "C1" | range.getA1Notation() == "D1" |     range.getA1Notation() == "E1" && sheet.getName() == "Send Auto Emails") {
    Browser.msgBox(
      'Alert',
      'Feel free to change the title here to something more relevant to you.  But be aware, if you would like to use an optional item, please make sure you are referencing it in your email message exactly as it appears here, wrapped in < and >. Example: <Optional Item 1>.',
      Browser.Buttons.OK
    );
  }
  if (range.getA1Notation() == "J4" && sheet.getName() == "Send Auto     Emails") {
    Browser.msgBox(
      'Alert',
      'Only add the email message body.  "Hello, Recipient Name" and "Best, Your Name" will be automatically added.  If you would like to use Optional Items in this message, see the example text to make sure you are using them the right way.',
      Browser.Buttons.OK
    );
  }

  if (range.getA1Notation() == "A2") {
    ss.toast("Your data in column A must not be separated by any blank rows. Any data after a blank row will be ignored.", "Be aware", 90);
  }
}

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('BulkEmail beta')
      .addItem('1. Sheet Setup', 'setup')
      .addItem('2. Send Emails', 'sendEmails')
      .addToUi();
  onEdit(e);
}

function onInstall(e) {
  onOpen(e);
}

EDIT 1

我尝试创建一个可安装的触发器,而不是使用简单的触发器onEdit,仍然无济于事。

function createonEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ScriptApp.newTrigger('installableonEdit')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

function installableonEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = e.source.getActiveSheet();
  var range = e.source.getActiveRange();

  try {
    if (range.getA1Notation() == "C1" | range.getA1Notation() == "D1" | range.getA1Notation() == "E1" && sheet.getName() == "Send Auto Emails") {
      Browser.msgBox(
        'Alert',
        'Feel free to change the title here to something more relevant to you.  But be aware, if you would like to use an optional item, please make sure you are referencing it in your email message exactly as it appears here, wrapped in < and >. Example: <Optional Item 1>.',
        Browser.Buttons.OK
      );
    }
    if (range.getA1Notation() == "J4" && sheet.getName() == "Send Auto Emails") {
      Browser.msgBox(
        'Alert',
        'Only add the email message body.  "Hello, Recipient Name" and "Best, Your Name" will be automatically added.  If you would like to use Optional Items in this message, see the example text to make sure you are using them the right way.',
        Browser.Buttons.OK
      );
    }

    if (range.getA1Notation() == "A2") {
      ss.toast("Your data in column A must not be separated by any blank rows. Any data after a blank row will be ignored.", "Be aware", 90);
    }
  } catch(err) {
    var errMsg = 'There was an error: ' + err +
        + " \n \n" +
        'from the: onEdit function ' +
        + " \n \n" +
        'The call stack is: ' + err.stack;

    GmailApp.sendEmail('[email protected]', "error", errMsg);
  }
}

Your onOpen()触发器正在运行onEdit()扳机。opOpen()安装并启用附加组件后,在 AuthMode.LIMITED 中运行。

In 本文档, 它指出:

允许访问有限服务子集的模式(LIMITED)。当绑定到文档的附加组件或脚本执行 onOpen(e) 或 onEdit(e) 简单触发器时,会发生此(LIMITED)模式,除了 NONE 描述的情况之外。

您正在运行一个onOpen()简单的触发器,并且它在有限模式下运行,因为它位于附加组件中。

所以,这部分,我非常确定。

我相信您可以做的是创建一个可安装的编辑触发器,并以完整模式运行。所以,这就是我要尝试的,摆脱简单的触发器,并安装一个触发器ScriptApp.

在文档中,它指出:

他们(简单的触发器)无法访问需要授权的服务。例如,简单的触发器无法发送电子邮件,因为 Gmail 服务需要授权,但简单的触发器可以使用匿名的语言服务翻译短语。

谷歌文档

以便试着抓包括发送一封电子邮件,这会阻止onEdit()简单的触发工作。

Add a 试着抓到您的代码,如果有错误,请给自己发送电子邮件。

function onEdit(e) {try{
  //Code Here

} catch(err) {
  var errMsg = 'There was an error: ' + err +
      + " \n \n" +
      'from the: onEdit function ' +
      + " \n \n" +
      'The call stack is: ' + err.stack;

  GmailApp.sendEmail('[email protected]', "Subject", errMsg);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

onEdit(e) 在附加组件中不起作用 的相关文章

  • 根据表单提交创建名称的新工作表

    在 Google Sheets 中 我有一个脚本 用于为提交的每个 Google 表单创建一个新工作表 它应该创建一个新工作表 其名称基于最后一列 G 列 不是表单提交的列 然后 它从最后一行和标题行获取信息并将其复制到创建的工作表的前两行
  • 用于清除多个范围的 Google 脚本。

    我有许多电子表格 每周填写一次 并在新的一周开始时关闭 我编写了一个脚本来遍历并清除许多不同工作表中的各种范围 请参阅下面的代码 我的问题是有没有更好的方法来做到这一点 而不是必须一次清除一个部分的范围并拥有一百万个clearContent
  • 如果输入重复,则覆盖 Google 表格(用于表单响应)行

    因此 我一直在尝试找出如何阻止谷歌表单中的谷歌表格响应输出中出现重复的行 如果找到这个链接 听起来它正是我想要的 表单 Google 脚本防止重复 https stackoverflow com questions 16965687 for
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • 在 Google 表格中批量查找并替换正则表达式

    是否有函数 脚本或插件可以将大量正则表达式替换应用于 Google 表格中的一系列数据 我有一张包含地址列表的工作表 另一张工作表在两列中包含几十对正则表达式 例如 St 和 Street 我想替换地址中第一列短语的所有实例列出另一个中相应
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 根据日期自动对数据进行排序

    我正在尝试使我的电子表格根据日期自动对数据进行排序 我附上了我正在使用的电子表格的照片 您会注意到 G 列中有一个工作日公式 目前 一旦我更新了配药日期 重新订购日期就会根据公式进行更新 基于安排的工作日 然后我对 G 列使用 SORT R
  • getActiveRange 不返回当前选择

    这应该是一个简单的问题 但我自己无法破解 我想将活动工作表中当前选定的单元格复制到名为 data 的数组中 var sheet SpreadsheetApp getActive getActiveSheet var selection sh
  • 如何使用 Google Apps 脚本添加指向电子表格单元格的链接

    可以通过用户界面向 Google 电子表格中的单元格添加 链接 我想使用 Google Apps 脚本执行相同的操作 我本以为 Range 类上有一种方法可以实现这一点 但看不到 有谁知道如何做到这一点 截至 2020 年 6 月 可以选择
  • 选择列的最后一个值

    我有一个电子表格 G 列中有一些值 有些单元格之间是空的 我需要将该列中的最后一个值获取到另一个单元格中 就像是 LAST G2 G9999 除了那个LAST不是一个函数 类似的答案卡里加里的回答 https stackoverflow c
  • firebase云功能事务偶尔工作

    我有这样的云功能 exports updateNewsCount functions database ref channels channelId news newsId onWrite event gt const channelId
  • Google 脚本过滤一个值的范围

    我想过滤第 1 列中仅包含 Bob 特定值的行的 google 工作表范围 到目前为止 我的代码允许我过滤out第 1 列中有 Bob 的行 我需要相反 我想返回第 1 列中只有 Bob 的行 因此 其中 filterSettings 不是
  • 在 Google Apps 脚本中创建插件

    我已经整理了一些我想在其他 Google 工作表中访问的代码 但是 由于它使用 SpreadsheetApp getUi 因此代码必须绑定到工作表 因此 我决定创建代码作为附加组件 不幸的是 除非我打开应用程序脚本页面 否则附加组件不会出现
  • 使用 MySQL 触发器将所有表更改记录到辅助表

    我有一张桌子 CREATE TABLE data table data id INT NOT NULL AUTO INCREMENT PRIMARY KEY field1 INT NOT NULL field2 INT NOT NULL f
  • 如何使用脚本获取 Google 文档中的修订历史记录?

    如何使用脚本获取 Google 文档中的修订历史记录 我该怎么做 一些想法 您可能需要启用 Drive SDK 您可以在 资源 gt 高级 Google 服务 菜单中执行此操作 然后执行类似以下操作 var revisions Drive
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • Google Apps 脚本自动生成的库文档

    我目前正在开发一个 Google Apps 脚本库 它基本上将电子表格视为数据库对象 目前 该库有两个相同的功能 例如 Opens and creates a query object for a spreadsheet with the
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 带触发器的物化视图?

    我可以在物化视图上创建触发器吗 我用的是甲骨文10g 是的你可以 请小心 这是什么Oracle 文档 http download oracle com docs cd B19306 01 server 102 b14200 statemen

随机推荐

  • Haskell 中 FFI 调用的类型自动转换

    我定义了以下模块来帮助我导出 FFI 函数 LANGUAGE MultiParamTypeClasses FunctionalDependencies TypeSynonymInstances module ExportFFI where
  • 无法制作完整的帧缓冲区对象 8cd6(iOS,以编程方式创建的 OpenGL 视图)

    我在让以编程方式创建的 OpenGL 视图在某些 iOS 版本 设备上运行时遇到问题 这似乎在越狱设备上最常见 但在普通设备上也会发生 似乎只有 v4 1 或 4 2 1 才会失败 我的设备已越狱 这不是我的 当然也不是我选择越狱的 并且装
  • C - 包含依赖项的编译

    我有一些代码想在我没有 root 访问权限的机器上运行 该机器没有运行此代码所需的一些库 有什么方法可以在编译时包含所有依赖项吗 我意识到生成的文件可能非常大 您正在寻找的是静态编译 执行静态编译将所有库包含到可执行文件本身中 因此您不必太
  • 在 Angular 2 中的对象的所有属性中搜索字符串

    如何使用 TS 在 Angular 2 中的对象的所有属性中搜索字符串 我在带有搜索框的表中呈现了一组客户 如果用户键入一个值 我想搜索所有属性值以推送与键入的值匹配的客户 export var CUSTOMER Client id 1 n
  • 在 PdfPCell 中右对齐文本

    我有一个可以生成 PDF 发票的 C 应用程序 此发票中有一个项目和价格表 这是使用生成的PdfPTable and PdfPCells 我希望能够右对齐价格列 但我似乎无法做到 文本总是在单元格中左对齐 这是我创建表的代码 PdfPTab
  • 用经度和纬度计算半径[重复]

    这个问题在这里已经有答案了 我试图确定两个位置 每个位置都有自己的纬度和经度值 彼此之间的距离是否在一定距离内 例如 3 英里半径 我有双值来表示每个位置的纬度和经度 Location 1 Double lattitude1 40 7143
  • Java Math.cos() 方法未按预期返回 0

    在 Windows 7 PC 上使用 Java 不确定这是否重要 并对应该返回 0 如 pi 2 的值调用 Math cos 而不是返回小值 但除非我误解 否则小值是与零相比远大于 1 ulp Math cos Math PI 2 6 12
  • 使用 jQuery 确定 Android 上的长按(长按、轻按按住)

    我已经能够成功播放使用 jQuery 和 HTML 页面在 Android 上实现 touchstart touchmove 和 touchend 事件 现在我想看看确定长按事件的技巧是什么 即点击并按住 3 秒 我似乎还无法弄清楚这一点
  • 如何使用 Backbone.Marionette 处理嵌套的 CompositeView?

    我正在使用 Backbone 进入更大规模的数据结构 并且遇到了通过 CompositeViews 很好地表示数据的情况 也就是说 CollectionView 周围添加了 附加内容 例如标题 按钮等 然而 我在将 CompositeVie
  • 如何创建可以从以编程方式创建的按钮调用的 Segue?

    在 Swift 中 我使用以下方法以编程方式创建了一个按钮 var button UIBarButtonItem title Tableau style Plain target self action tabBarTableauClick
  • 如何使用 JDBC 或 Hibernate 获取当前数据库事务 id?

    我在谷歌上查了一下 但找不到任何相关的东西 基本上 我想掌握长时间运行的事务 现在 我经历information schema INNODB TRX或者看看输出show engine innodb status找到trx id然后打开gen
  • 直接在函数声明上使用 function.prototype.bind

    为什么这是允许的 var f function console log this x bind x 1 为什么这不是或者更好为什么我在这种情况下会出现语法错误 function f console log this x bind x 1 那
  • 通过引用 C++ 中的模板函数传递数组

    下面的代码对我来说效果很好 include
  • 为什么 null 不是编译时常量?

    所以如果我有一个static final Object CONSTANT null 出于某种原因 如果我在另一段代码中引用它 例如doSomething CONSTANT 它不会在编译期间内联到代码中 所以而不是doSomething nu
  • Ionic 2:如何更新现有项目的 Ionic 库?

    在 Ionic 2 网站上找不到任何信息 例如 使用 Ionic 库 2 0 1 创建一个项目 如何将其更新到 Ionic 库 2 1 0 标准程序是什么 ionic lib update已弃用 如果您想更新 CLI 您需要运行 npm i
  • System.Web.Http.HttpPut 与 System.Web.Mvc.HttpPut 有什么不同

    之间有什么不同系统 Web Http HttpPut and System Web Mvc HttpPut 在 Web API 项目上使用 HttpPut 会导致错误 405 请求的资源不支持 http 方法 PUT 它们属于两个不同的框架
  • 如何知道选择了哪个单选按钮?

    我的 Ui 中有 3 个单选按钮位于同一个单选组中 他们是 var rbutton1 app createRadioButton dist 5 miles var rbutton2 app createRadioButton dist 10
  • 如何在iOS中的UITableViewCell中制作渐变背景?

    我按照下面的教程使用 CAGradientLayer 在 UITableViewCell 中制作渐变背景 http cocoawithlove com 2009 08 adding shadow effects to uitableview
  • 将字符串转换为Scheme中的代码

    如何将字符串转换为PLT方案中相应的代码 不包含string gt input port方法 例如 我想转换这个字符串 1 0 1 0 0 进入这个列表 1 0 1 0 0 是否可以在不打开文件的情况下执行此操作 方案有程序read用于从输
  • onEdit(e) 在附加组件中不起作用

    我编写了一个脚本 在本机电子表格中使用时效果很好 我现在尝试将其作为附加组件发布 并且发现onEdit e 不工作 当onOpen e and onInstall e 工作正常 我已经查看了有关授权模式和安装 启用附加组件的文档 但我认为我