Google apps script 谷歌应用程序脚本:是否有可能获取存储在用户个人硬盘中的blob文件,将其插入电子表格?

Google apps script 谷歌应用程序脚本:是否有可能获取存储在用户个人硬盘中的blob文件,将其插入电子表格?,google-apps-script,google-drive-api,Google Apps Script,Google Drive Api,我创建了一个web应用程序,要求用户手动签署一个spreasheet文档。 为了做到这一点,我编写了以下代码: function saveSign(url){ // url = canvas.toDataURL("image/png"); const email = Session.getActiveUser().getEmail(); const base64 = url.split(",")[1]; const decoded = Uti

我创建了一个web应用程序,要求用户手动签署一个spreasheet文档。 为了做到这一点,我编写了以下代码:

function saveSign(url){ // url = canvas.toDataURL("image/png");
  const email = Session.getActiveUser().getEmail(); 
  const base64 = url.split(",")[1];
  const decoded = Utilities.base64Decode(base64);
  const blob = Utilities.newBlob(decoded, MimeType.PNG, email);
  const file = DriveApp.createFile(blob);
  return true;
};
此代码将在使用此web应用的每个用户个人驱动器中创建一个包含用户电子邮件标题的文件

一切都很好,但当我尝试用下面的代码将刚刚创建或已经创建并存储在电子表格用户个人驱动器中的图片插入时,会发生错误

const ssDA = SpreadsheetApp.openById("idSpreadsheet");
const wsDA = ssDA.getSheetByName("sheetName");
let uBlob;
const files = DriveApp.getFiles();
while (files.hasNext()) {
  let file = files.next();
  let fFileName = file.getName();
  if(fFileName === ufileName){
    uBlob = file.getBlob();
  }
}
wsDA.insertImage(uBlob, 12, 32); // Error in this line
控制台日志错误:

异常:参数无效:url

当我尝试插入存储在驱动器中的图像时,一切正常,但当同事尝试插入存储在个人驱动器中的图像时,上述代码不起作用

实际上,while循环(var文件)在我的个人文件夹中迭代,而不是在用户个人文件夹中迭代

请参见以下web应用部署信息:

以用户身份执行应用程序:访问web应用程序的用户


您能帮助我吗?

我不知道您是否设置了web应用程序(权限、脚本是否链接到电子表格、独立、每个用户是否必须拥有自己的电子表格),但这里有一个与您类似的示例

说明: 我有我的主要帐户和一个朋友的帐户

在主要账户中:
  • 创建了新的脚本项目
  • 创建了新的电子表格
  • 在我的驱动器中制作了一个名为“doggo.jpg”的图像
  • 做了一些功能:
  • function insertImg(文件名){
    const ssDA=SpreadsheetApp.openById(“{spreadsheetid}”);//使用新的电子表格id
    const wsDA=ssDA.getSheetByName(“{sheetname}”);
    const ufileName=文件名
    const files=DriveApp.getFiles();
    while(files.hasNext()){
    让file=files.next();
    让fFileName=file.getName();
    if(fFileName==ufileName){
    uBlob=file.getBlob();
    }
    }
    wsDA.insertImage(uBlob,10,10);
    }
    函数testInsert(){//这是测试函数
    insertImg(“doggo.jpg”)
    }
    函数doGet(e){
    return HtmlService.createHtmlOutFromFile(“page”);//接下来我们将创建此页面
    }
    
  • 在脚本项目中创建一个html文件“page.html”,带有一个按钮和一个addEventListener来运行测试功能,在本例中,我是而不是,包括样板html(Doctype、head等):
  • 
    你好
    运行函数
    document.getElementById(“btn”)。addEventListener(“单击”,doStuff);
    函数doStuff(){
    google.script.run.insertImg(“doggo.jpg”);//下面是测试函数的运行情况。
    };
    
  • 运行测试并确保我已授予脚本所有权限
  • 发布的web应用程序,
    以以下身份执行应用程序:访问web应用程序的用户
    谁有权访问该应用程序:任何人
  • 打开web应用程序,按下按钮,将图像插入电子表格。到这里,我想和你一样
  • 与朋友的帐户共享谷歌表单。-非常重要
  • 现在,朋友登录到他们的帐户:
  • 在朋友帐户的驱动器中获得另一个同名“doggo.jpg”的图像
  • 已打开web应用的URL并授予必要的权限
  • 测试了按钮,它成功了 参考:

    我能问一下你的问题吗?1.脚本中的
    Exception:Argument non-valide:url
    错误发生在哪里?2.关于
    一切都很好
    ,我能问一下它的细节吗?3.我可以问一下脚本中使用的作用域吗?@Tanaike:错误发生在
    wsDA.insertImage(uBlob,12,32)行。当我说一切都好的时候,我想说的是saveSign功能也可以工作,这意味着使用web应用的用户。可以将画布图形保存在自己的个人驱动器中。带有while循环的第二个代码在表单提交后触发。下面列出了脚本作用域:
    “https://www.googleapis.com/auth/spreadsheets“,”userinfo.email“,”表单“,”script.scriptapp“,”script.send_mail“,”script.external_request“,”drive“
    Thks提前发送”!谢谢你的回复。我注意到已经发布了一个答案。在这种情况下,我要尊重现有的答案。它会解决你的问题。