从 Google 幻灯片中读取 Google Sheet 获取权限错误
Read Google Sheet from Google Slides getting permission error
NEW INFORMATION
2020 年 11 月 17 日 - 我可以从脚本 运行 onOpen 而不会出现权限错误。我可以 运行 从脚本或菜单中显示数据的函数(在我从脚本中 运行 onOpen 之后)。我认为代码没有任何更改,但又出现了。清单肯定没变。
//@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");
}
我是电子表格和幻灯片的创建者。它们位于“我的云端硬盘”中的同一文件夹中。
我已将 Oauth 添加到幻灯片中的清单中:
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly"
]
}
我尝试通过 ID 和 URL 打开电子表格。错误是:
异常:您没有调用 SpreadsheetApp.openById 的权限。所需权限:https://www.googleapis.com/auth/spreadsheets
我试过创建一个触发器(我不知道这是干什么用的)但是在创建它时,唯一的选项是基于时间的,这似乎没有用。触发器的存在不会改变错误。
幻灯片绑定的代码
//@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...
我添加了“//@NotOnlyCurrentDoc”,因为某些地方推荐这样做。
共享电子表格的状态
访问电子表格的目的是获取数据以使用 showModalDialog 在 html 中显示。我浏览了有关自定义菜单、对话框和边栏的信息,再到 Google 文档、表格和表单、自定义函数和宏、Web 应用程序、附加组件,但我不了解其中任何一个。我希望保持这个简单。自定义函数说它不能显示 html (https://developers.google.com/apps-script/guides/sheets/functions) 所以那是没用的。
任何想法表示赞赏。
作为评论的结果,我按如下方式更改了清单,但错误没有改变。
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets"
]
}
==================
我在删除触发器后收到了此类电子邮件
如错误信息所述:
对于方法
SpreadsheetApp.openById()
您需要提供范围
https://www.googleapis.com/auth/spreadsheets
而不是
https://www.googleapis.com/auth/spreadsheets.readonly
如果您不想提供此范围,请考虑将您的脚本绑定到电子表格并使用方法
SpreadsheetApp.getActive()
接受范围
https://www.googleapis.com/auth/spreadsheets.currentonly
疯狂修复 - 在连接到电子表格之前,我连接到脚本绑定到的幻灯片!纯属偶然发现,但权限错误消失了。
function onOpen() {
var deck = SlidesApp.getActivePresentation();
var slides = deck.getSlides();
var presLen = slides.length;
Logger.log("num slides: " + presLen );
var variables = globalVariables(); //load the Global variables
if (!variables.sheetId) {
Logger.log("SheetId not retrieved from global variables!");
return;
}
try {
var ss = SpreadsheetApp.openById(variables.sheetId);
if (!ss) {
Logger.log("The data spreadsheet does not exist");
SlidesApp.getUi().alert("The data spreadsheet does not exist" + variables.sheetId );
return;
}
} catch (e) {
Logger.log(" in catch for openBYId: " + variables.sheetId );
SlidesApp.getUi().alert(e);
return;
}
NEW INFORMATION
2020 年 11 月 17 日 - 我可以从脚本 运行 onOpen 而不会出现权限错误。我可以 运行 从脚本或菜单中显示数据的函数(在我从脚本中 运行 onOpen 之后)。我认为代码没有任何更改,但又出现了。清单肯定没变。
//@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");
}
我是电子表格和幻灯片的创建者。它们位于“我的云端硬盘”中的同一文件夹中。
我已将 Oauth 添加到幻灯片中的清单中:
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly"
]
}
我尝试通过 ID 和 URL 打开电子表格。错误是:
异常:您没有调用 SpreadsheetApp.openById 的权限。所需权限:https://www.googleapis.com/auth/spreadsheets
我试过创建一个触发器(我不知道这是干什么用的)但是在创建它时,唯一的选项是基于时间的,这似乎没有用。触发器的存在不会改变错误。
幻灯片绑定的代码
//@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...
我添加了“//@NotOnlyCurrentDoc”,因为某些地方推荐这样做。
共享电子表格的状态
访问电子表格的目的是获取数据以使用 showModalDialog 在 html 中显示。我浏览了有关自定义菜单、对话框和边栏的信息,再到 Google 文档、表格和表单、自定义函数和宏、Web 应用程序、附加组件,但我不了解其中任何一个。我希望保持这个简单。自定义函数说它不能显示 html (https://developers.google.com/apps-script/guides/sheets/functions) 所以那是没用的。
任何想法表示赞赏。
作为评论的结果,我按如下方式更改了清单,但错误没有改变。
{
"timeZone": "America/Mexico_City",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets"
]
}
================== 我在删除触发器后收到了此类电子邮件
如错误信息所述:
对于方法
SpreadsheetApp.openById()
您需要提供范围
https://www.googleapis.com/auth/spreadsheets
而不是
https://www.googleapis.com/auth/spreadsheets.readonly
如果您不想提供此范围,请考虑将您的脚本绑定到电子表格并使用方法
SpreadsheetApp.getActive()
接受范围
https://www.googleapis.com/auth/spreadsheets.currentonly
疯狂修复 - 在连接到电子表格之前,我连接到脚本绑定到的幻灯片!纯属偶然发现,但权限错误消失了。
function onOpen() {
var deck = SlidesApp.getActivePresentation();
var slides = deck.getSlides();
var presLen = slides.length;
Logger.log("num slides: " + presLen );
var variables = globalVariables(); //load the Global variables
if (!variables.sheetId) {
Logger.log("SheetId not retrieved from global variables!");
return;
}
try {
var ss = SpreadsheetApp.openById(variables.sheetId);
if (!ss) {
Logger.log("The data spreadsheet does not exist");
SlidesApp.getUi().alert("The data spreadsheet does not exist" + variables.sheetId );
return;
}
} catch (e) {
Logger.log(" in catch for openBYId: " + variables.sheetId );
SlidesApp.getUi().alert(e);
return;
}