我为我的公司创建了一个简单的插件 . 调用时,插件会查看当前工作表,并用给定词汇表中的相应值替换所有单元格 .
例如,它将找到值为“Brand”的所有单元格,并将其替换为“123_brand”,将“Name”替换为“321_name”等 .
为此,我使用本地工作表(“词汇表”),其行上的所有数据(第一列有“品牌”,“名称”等,而第二列有“123_brand”,“321_name”等) . 我公司的所有成员都在该表上阅读了授权 .
我按以下方式加载它:
function onOpen() {
SpreadsheetApp.getUi().createAddonMenu()
.addItem('Parse sheet', 'parseSheet')
.addToUi();
}
function onInstall(){
onOpen();
}
var librarySpreadsheet = SpreadsheetApp.openById("ID to my Glossary Sheet");
function parseSheet(){
/* Does the sheet parsing */
}
问题是:它不起作用 .
安装后,“Parse Sheet”按钮正常显示,一切正常 . 但是如果用户转到另一张表,则插件在那里不起作用 . 检查控制台会显示以下消息:
Google Apps脚本:您无权执行该操作 .
如果用户删除并重新安装该另一个工作表中的插件,它将再次开始正常工作 .
我尝试提供编辑授权,但它仍然无效 . 这适用于所有用户,甚至是我自己 .
Why is my addon being denied access to an external spreadsheet, except right after installing it?
1 回答
这个全局声明是他在你的插件中没有看到你的附加菜单功能的原因:
这是全局演化,即未在您的函数中声明 . 因此,在打开新文档时调用onOpen()函数时会出现这种情况 . 这是文档页面的引用
插件已安装但未在新电子表格中启用,因此在
authMode.None
授权中运行 . 在该授权模式下,它无权打开任何电子表格 . 因此,全局声明失败并且onOpen过早终止而不添加菜单项 .我的修复建议是将整个声明移到你的parseSheet函数中
或者你可以尝试这样做,如果你想
librarySpreadsheet
是一个全局变量:最后,重新安装时为什么会这样? (@SandyGood已在评论中回答!)安装后,插件运行在
authoMode.FULL
,因为它需要用户交互才能安装授权 . 从文档引用因此,当它重新安装时,它能够获得该全局声明并且还启用该文档的插件 . 因此,插件适用于未来的运行以及该文档