为什么我收到 You do not have permission to call SpreadsheetApp.openById?

2023-12-14

我们有两张 AL 表,本地的和国家的。我正在尝试获取它,以便当我们当地的 AL“日历”完成时,数据会复制到国家日历中。检查编辑的单元格是否位于国家电子表格中某人的行中,然后将其复制到国家电子表格上的相应行中。我不断得到

您无权调用 SpreadsheetApp.openByID。

function onEdit(e) {

var range = e.range

var rowNum = range.getRow()
var colNum = range.getColumn()
var sheetEdit = range.getSheet().getName()
var rowEdit = parseInt(rowNum)
var colEdit = parseInt(colNum)
Logger.log(rowEdit)
Logger.log(colEdit)
Logger.log(sheetEdit)

var locSheet = "ID_Local_AL"
var natSheet = "ID_National_AL" //test
var copyEdit = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetEdit).getRange(rowEdit, colEdit, 1, 1).getValue()

//national Rows
var rhRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(12,colEdit)
var jpRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(13,colEdit)
var sahRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(14,colEdit)
var hlRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(15,colEdit)


if (rowEdit = 10) {
  rhRowSMT.setValue(copyEdit)

}

else if (rowEdit = 11) {
  jpRowSMT.setValue(copyEdit)

}

else if (rowEdit = 12) {
  sahRowSMT.setValue(copyEdit)

}

else if (rowEdit = 13) {
  hlRowSMT.setValue(copyEdit)

}

}

理论上,如果其中一个团队放入 AL,则将检查单元格是否要复制,并将该单元格的内容复制到国家工作表上的同一日期中。

相反我得到

您无权调用 SpreadsheetApp.openById。所需权限:https://www.googleapis.com/auth/spreadsheets在 onEdit(代码:28)

我知道这是因为它们是两个不同的电子表格,但是有解决方法吗?


Issue:

权限不足,无法调用SpreadsheetApp.openById().


Reason:

该脚本作为简单的触发,其中运行authMode = LIMITED.


解决方案:

设立一个可安装触发器相反,这样它就可以运行authMode = FULL.

我建议更改脚本的名称,例如:

function syncSheets(e) {

然后运行以下脚本(改编自谷歌的例子) 设置新的可安装触发器:

/**
 * Creates a trigger for when a spreadsheet is edited.
 */
function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('syncSheets')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

参考:

  • 简单的触发器
  • 可安装的触发器
  • 事件对象(有authMode细节)
  • 以编程方式管理触发器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我收到 You do not have permission to call SpreadsheetApp.openById? 的相关文章

  • 在 Google Apps 脚本中创建插件

    我已经整理了一些我想在其他 Google 工作表中访问的代码 但是 由于它使用 SpreadsheetApp getUi 因此代码必须绑定到工作表 因此 我决定创建代码作为附加组件 不幸的是 除非我打开应用程序脚本页面 否则附加组件不会出现
  • 如果存在具有唯一值的行,则更新,否则插入

    我有一个 URL 表 他们包含 id int 主键 url 字符不同 唯一 内容特征各不相同 最后分析日期 我想创建触发器或其他东西 规则可能是 因此每次我从 java 程序中进行插入时 如果存在具有此类 URL 的行 它就会更新一些单行
  • 如何使用脚本获取 Google 文档中的修订历史记录?

    如何使用脚本获取 Google 文档中的修订历史记录 我该怎么做 一些想法 您可能需要启用 Drive SDK 您可以在 资源 gt 高级 Google 服务 菜单中执行此操作 然后执行类似以下操作 var revisions Drive
  • 如何在表单提交时运行 Appscript?

    我正在尝试创建当用户完成表单提交时重定向到网络应用程序的 Google 表单 我查过谷歌开发者文档 https developers google com apps script guides triggers 但我看不到一种简单的方法来做
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 如何从 HTML 文件输入获取文件并将其作为 Google Apps 脚本中电子邮件的附件发送?

    此 HTML 代码使用 Google Script 的 HTML 类服务获取文件输入 见下文 我想获取输入字段的值 文件 发送到我的 gs 文件并将其作为电子邮件的附件发送 从输入字段获取值只会返回文件的目录 这没有任何帮助 因为 Goog
  • Google Apps 脚本:如何水平对齐 inlineImage

    我有以下代码 它是一个更大程序的一部分 我正在尝试将图像从我的 Google 驱动器插入到 Google 文档中 并调整其大小并居中 到目前为止 我能够让程序插入图像并调整其大小 但我不知道如何使 inlineImage 居中 我是使用谷歌
  • 带触发器的物化视图?

    我可以在物化视图上创建触发器吗 我用的是甲骨文10g 是的你可以 请小心 这是什么Oracle 文档 http download oracle com docs cd B19306 01 server 102 b14200 statemen
  • 在触发器中使用 OUTPUT/INTO 而不是插入触发器会使“插入”表无效

    我在使用带有替代插入触发器的表时遇到问题 我创建的表包含一个标识列 我需要在此表上使用而不是插入触发器 我还需要从触发器中查看新插入的标识的值 这需要在触发器中使用 OUTPUT INTO 问题是执行 INSERT 的客户端无法看到插入的值
  • 根据条件格式化货币

    Google Apps 脚本新手 但有一些 VBA 编码经验 我希望能够根据不同的单元格输入决定单元格的数字格式 eg Col A 客户名称 验证范围 B 栏 货币类型 英镑 美元 欧元 经过验证的列表 Col C 费用 100 用户免费类
  • WPF XAML 网格可见性触发器

    我的网格第一行有一条状态消息 我希望它在可见性发生变化时滑入和滑出 第一个可见性触发器效果很好 可以快速打开第一个网格行 一旦我添加 折叠 触发器 就什么都不起作用了 当可见性设置为折叠时 如何反转动画以滑动关闭
  • 无法在 onclick 函数中传递多个参数

    我正在尝试创建一个上传机制 其中我可以使用 HTML 中的文件 ID 将文件上传到 google 驱动器中 我不想将文件夹的 ID 放在上传函数中 因为这是需要的 我试图通过声明另一个参数 即函数 upload e id 来传递函数 upl
  • 如果您有多个表单向单个电子表格发送响应,Google 如何知道提交表单时要执行哪个 onsubmit 触发器

    我需要有人澄清 据我了解 多个表单可以将其回复发送到新 Google 表格中的单个电子表格 因此 我创建了两个 Google 表单 并让他们都将回复发送到新的 Google 电子表格 然后我在电子表格 而不是表单 中创建了两个脚本 每个脚本
  • Google Web Apps - 获取用户电子邮件但以所有者身份运行脚本

    我最近迷上了谷歌网络应用程序 但我遇到了一些进退两难的问题 我正在尝试构建一个对非常特定的用户开放的应用程序 并且他们正在查看的数据根据 其访问组进行过滤 在谷歌表格中 我列出了用户电子邮件及其各自的访问组 A 列 电子邮件 B 列 访问组
  • 复制带有内嵌图像的表格

    我正在尝试将 GDoc 的内容复制到另一个 GDoc 中 这对于所有不同的元素类型都非常有效 包括一个表 枚举DocumentApp ElementType TABLE 但是 如果表包含内联图像 EnumDocumentApp Elemen
  • 在应用程序脚本中将 .XLS 转换为 Google 表格的最有效方法是什么?

    我每周都会自动将 XLS 文件下载到 Google 云端硬盘 我想每周自动将最新下载的 XLS 文件转换为 Google 表格格式 因此转到特定的 Google 驱动器文件夹 查找最新或未转换的 XLS 文件 转换为 Google 表格格式
  • jQuery 在所见即所得文本区域中触发 keyCode Ctrl+Shift+z 和 Ctrl+z

    我想知道如何触发由以下组成的事件 keyCodeCtrl z和事件键码组成Ctrl Shift z Use e which它已通过 jquery 跨浏览器标准化 document keydown function e if e which
  • 如何过滤视图两列 OR 而不是 AND?

    在 Google 表格中 我想过滤查看结果 以便仅显示 D 列和 或 E 列中带有 x 的行 如果我过滤以显示其中包含 x 的列 则它将仅显示 D 列和 E 列中包含 x 的行 我如何让它做 和 或 操作 当我单击列中的过滤器按钮时 它只会
  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR

随机推荐