首页 > 解决方案 > Google 表格应用程序脚本 Onformsubmit 触发功能不允许使用 driveapp 访问文件

问题描述

我目前正在尝试让用户提交一个包含我必须处理信息的 csv 的表单。为此,我创建了一个函数来解析上传的文件,然后将其写入帮助文件或表单响应电子表格中的新工作表中。问题是,当我尝试访问使用文件 ID 上传的 csv 时,出现以下错误。我已经阅读了一些类似的问题,他们提到触发器 onformsubmit 无法授予这些权限并添加文件处理功能 a 自定义菜单,但这会导致更耗时的工作流程

*例外:您无权调用 DriveApp.getFileById。所需权限:(https://www.googleapis.com/auth/drive.readonly || https://www.googleapis.com/auth/drive

onformsubmit 的代码如下

function onFormSubmit(e){

  //Logger.log('item1' + e.namedValues['Billing data file'][0]);
  //Logger.log('item2' + e.namedValues['Billing data file']);
  let billingFilelink = e.namedValues['Billing data file'][0];
  let billingFileId = billingFilelink.split("?id=")[1];

  let file = DriveApp.getFileById("1Mg3X7xdhTUJ5N6nMR2nB5tto2F7xCUUc");
  importCSVFromGoogleDrive(billingFileId)
  //Logger.log(billingFileId)
}

这里是我手动添加的文件 ID,但实际上是 billingFileId。如果有更简单的方法可以做到这一点,那么得到建议会很棒

带有脚本的文件在下面共享

https://docs.google.com/spreadsheets/d/1T8Rh90-_wC86R7gvTjIOH8sas5Nz5CuGUHWz2Zv5D2I/edit?usp=sharing

标签: google-apps-scriptgoogle-sheets

解决方案


您在这里有两个选择。首先,根据第一条评论,您可以将范围添加到项目清单中的手动列表中,如此所述。您只需要包含项目使用的任何/所有范围,包括错误中提到的范围。其次,我经常发现,当我onFormSubmit在实际的 Apps 脚本编辑器中运行该函数时,即使该函数无法完全执行,它通常也能够获取完整的范围列表并让您以这种方式批准它们. 那将是更简单的选择,所以我会先尝试,如果失败,请尝试第一种方法。


推荐阅读