Google apps script 从谷歌幻灯片读取谷歌工作表获取权限错误
2020年11月17日-我可以从脚本运行onOpen,而不会出现权限错误。我可以运行从脚本或菜单显示数据的函数(在我从脚本运行onOpen之后)。我不认为代码有任何变化,但它再次出现。舱单绝对没有改变Google apps script 从谷歌幻灯片读取谷歌工作表获取权限错误,google-apps-script,google-sheets,permissions,google-slides,Google Apps Script,Google Sheets,Permissions,Google Slides,2020年11月17日-我可以从脚本运行onOpen,而不会出现权限错误。我可以运行从脚本或菜单显示数据的函数(在我从脚本运行onOpen之后)。我不认为代码有任何变化,但它再次出现。舱单绝对没有改变 NEW INFORMATION //@NotOnlyCurrentDoc function globalVariables(){ var variables = { // this is the Co
NEW INFORMATION
//@NotOnlyCurrentDoc
function globalVariables(){
var variables = {
// this is the Connect Four Game
sheetId: '1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA',
sheetUrl: 'https://docs.google.com/spreadsheets/d/1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA/edit?usp=sharing'
};
return variables; //return a dictionary of keys and values
}
//function installableOpen() { // never starts
function onOpen() {
var variables = globalVariables(); //load the Global variables
try {
// var ss = SpreadsheetApp.openByUrl(variables.sheetUrl);
var ss = SpreadsheetApp.openById(variables.sheetId)
if (!ss) {
SlidesApp.getUi().alert("Spreadsheet not found!");
return;
}
} catch(e) {
SlidesApp.getUi().alert(e);
return;
}
etc...
我是电子表格和幻灯片的创建者。它们位于我驱动器上的同一文件夹中 我已将Oauth添加到幻灯片中的清单中:
//@NotOnlyCurrentDoc
function globalVariables(){
var variables = {
// this is the Connect Four Game
sheetId: '1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA',
sheetUrl: 'https://docs.google.com/spreadsheets/d/1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA/edit?usp=sharing'
};
return variables; //return a dictionary of keys and values
}
function onOpen() {
Logger.log("In onOpen" );
var variables = globalVariables(); //load the Global variables
Logger.log("In onOpen sheetUrl from globalVariables: " + variables.sheetUrl );
try {
// var ss = SpreadsheetApp.openByUrl(variables.sheetUrl);
var ss = SpreadsheetApp.openById(variables.sheetId)
if (!ss) {
SlidesApp.getUi().alert("Spreadsheet not found!");
return;
}
} catch(e) {
SlidesApp.getUi().alert(e);
return;
}
SlidesApp.getUi()
.createMenu( 'Ask ?')
.addItem('BE1','BE1')
.addItem('BE2','BE2')
.addItem('BE3','BE3')
.addItem('BE4','BE4')
.addToUi();
prepareQuestions(ss);
Logger.log("After prepareQuestions");
setupSheets(ss); // only want to do this once
Logger.log("After setupSheets");
}
function setupSheets(ss) {
SlidesApp.getUi().alert("setupSheets() triggered");
var nextI = '1';
var cache = CacheService.getUserCache();
cache.put('nextI', nextI);
console.log("1. cache.put('nextI') = " + nextI);
SlidesApp.getUi().alert("End onOpne) = ");
}
function BE1() {
SlidesApp.getUi().alert("BE1() triggered");
var variables = globalVariables(); //load the Global variables
var sheetName = 'BE1';
var sheet = SpreadsheetApp.openById(variables.sheetId).getSheetByName('BE1');
if (!sheet) {
Logger.log("Sheet BE1 not found");
SlidesApp.getUi().alert("Sheet BE1 not found");
return;
}
getNextQ(sheet);
SlidesApp.getUi().alert("end BE1 function");
}
我已尝试按ID和URL打开电子表格。错误是:
例外:您没有调用SpreadsheetApp.openById的权限。所需权限:
我尝试过创建一个触发器(我不知道这是为了什么),但创建它时,唯一的选项是基于时间的,似乎没有什么用处。触发器的存在不会改变错误
绑定到幻灯片的代码
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly"
]
}
我添加了“/@NotOnlyCurrentDoc”,因为在某些地方建议这样做
电子表格的共享状态
访问电子表格的目的是通过showModalDialog获取以html格式显示的数据。我浏览过自定义菜单、对话框和侧边栏上的信息,浏览过谷歌文档、表单、自定义函数和宏、web应用程序、加载项,但我一点都不懂。我希望保持这个简单。自定义函数说它不能显示html(),所以这将是无用的
任何想法都值得赞赏
作为注释的结果,我更改了清单如下,但错误保持不变
NEW INFORMATION
//@NotOnlyCurrentDoc
function globalVariables(){
var variables = {
// this is the Connect Four Game
sheetId: '1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA',
sheetUrl: 'https://docs.google.com/spreadsheets/d/1fmZCittj4ksstmhh8_t0O0csj8IDdwi9ohDDL5ZE7VA/edit?usp=sharing'
};
return variables; //return a dictionary of keys and values
}
//function installableOpen() { // never starts
function onOpen() {
var variables = globalVariables(); //load the Global variables
try {
// var ss = SpreadsheetApp.openByUrl(variables.sheetUrl);
var ss = SpreadsheetApp.openById(variables.sheetId)
if (!ss) {
SlidesApp.getUi().alert("Spreadsheet not found!");
return;
}
} catch(e) {
SlidesApp.getUi().alert(e);
return;
}
etc...
=====================================
我在删除触发器后收到了这类电子邮件
如错误消息所示: 对于方法
SpreadsheetApp.openById()
您需要提供范围
https://www.googleapis.com/auth/spreadsheets
而不是
https://www.googleapis.com/auth/spreadsheets.readonly
如果您不想提供这个范围,请考虑将脚本绑定到电子表格并使用方法
SpreadsheetApp.getActive()
哪个接受范围
https://www.googleapis.com/auth/spreadsheets.currentonly
疯狂修复-在连接到电子表格之前,我已连接到脚本绑定到的幻灯片!纯偶然发现,但权限错误已消失
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets"
]
}
换了什么?清单中的作用域或将
SpreadsheetApp.openById()
更改为SpreadsheetApp.getActive()
后的作用域?您是否只在简单的触发器(onOpen
)上出现问题?这是一个授权问题,因为不允许在简单触发器上使用SpreadsheetApp.openById()
。使用instead如果你在没有简单触发器的情况下运行代码,那么这应该是有效的。我删除了触发器。关闭并重新打开幻灯片集/演示文稿,但出现了相同的错误。在我的尝试中发现了一堆关于触发器的电子邮件。我在上面的原始图片中添加了该图片。关于触发器故障的电子邮件日期为11月15日。当你说你删除了触发器-你的意思是你将onOpen
函数重命名为不同的东西吗?错误是不同的。不能使用时间触发器调用ui
元素。删除时间触发器。“事件源”应为“来自幻灯片”,所有触发器均已删除。谢谢在打开电子表格时仍然出现错误(我猜是onOpen运行),但如果我从脚本编辑器运行onOpen,则不会出现权限错误!