Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从谷歌幻灯片读取谷歌工作表获取权限错误_Google Apps Script_Google Sheets_Permissions_Google Slides - Fatal编程技术网

Google apps script 从谷歌幻灯片读取谷歌工作表获取权限错误

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

2020年11月17日-我可以从脚本运行onOpen,而不会出现权限错误。我可以运行从脚本或菜单显示数据的函数(在我从脚本运行onOpen之后)。我不认为代码有任何变化,但它再次出现。舱单绝对没有改变

                        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,则不会出现权限错误!