Javascript &引用;(可能被删除了?)”;谷歌脚本中的电子表格错误

Javascript &引用;(可能被删除了?)”;谷歌脚本中的电子表格错误,javascript,google-apps-script,Javascript,Google Apps Script,我有一个小脚本,它从电子表格中获取一些数据,并将其显示在Google脚本html页面上——为了测试,我只显示工作表名称 它对我来说工作正常,但其他用户会收到错误:[error]ScriptError:Document 1sTltxpKjSqgaFjc9-3EQzgtvyErkut2qETsn7SdThLE丢失(可能已删除? 脚本和电子表格都是公共的,用户可以直接访问电子表格 谷歌脚本代码: function getInfo() { var ss = SpreadsheetApp.op

我有一个小脚本,它从电子表格中获取一些数据,并将其显示在Google脚本html页面上——为了测试,我只显示工作表名称

它对我来说工作正常,但其他用户会收到错误:
[error]ScriptError:Document 1sTltxpKjSqgaFjc9-3EQzgtvyErkut2qETsn7SdThLE丢失(可能已删除?

脚本和电子表格都是公共的,用户可以直接访问电子表格

谷歌脚本代码:

function getInfo() {
    var ss = SpreadsheetApp.openById("1sTltxpKjSqgaFjc9-3EQzgtvyErkut2qETsn7SdThLE");
    var ssName = ss.getName();
    var sheet = ss.getSheets()[0];

     return 'Doc: ' + ssName + '. Sheet: ' + sheet.getName();
 }
html中的javascript只是:

  function getSheetInfo(data) {
      $('p.data').append(data);
  }

  google.script.run.withSuccessHandler(getSheetInfo)
     .getInfo();
谁能解释一下为什么这张纸不好;其他用户无法访问,但他们可以查看工作表?两者都是公开的

谢谢
Rob

如果您已部署脚本以“作为访问应用程序的用户”运行,则必须与该用户共享电子表格,以便以他身份运行的脚本可以访问该电子表格。如果你有“普通”受众,你必须与“任何有链接的人都可以查看”共享此电子表格。当然,除非您可以更改部署选项,以在您作为开发人员时执行应用程序

请注意,这并不一定会公开您的电子表格,因为您不必处理用户的链接,脚本代码(只能是您自己的)代表他们访问它,并且由于您的代码从Google服务器运行,因此电子表格链接永远不会泄漏

电子表格泄露的唯一途径是手动访问。例如,如果您从咖啡馆或其他不安全的网络打开该文件,在那里,有人嗅探或网络管理员自己可以看到您导航到的站点的url,因此能够自己打开该文件(因为它是通过链接共享给任何人的)

如果您的信息非常敏感,并且您不想冒险,那么解决方案是将此信息保存到其他地方。例如,如果它适合(由于大小限制),您可以使用Properties服务、云sql或任何其他云存储

另一种解决方案是使用以匿名方式发布并以您的身份运行的辅助脚本,“用户”脚本可以使用UrlFetch调用该脚本以从中接收数据。在这种情况下,仍然有一个“仅链接”的安全功能,但现在您的脚本发布了链接而不是文件,这是不太可能泄漏的,因为除了另一个脚本之外,没有人访问它,这是一个谷歌服务器对服务器的通信。而且,如果有人能入侵谷歌服务器,你的数据也不会受到保护


最后,最好的解决方案可能是通过UrlFetch直接使用Drive SDK,您可以在UrlFetch上管理oAuth2凭据,传递您的而不是用户的凭据。但是您需要在脚本中跳oAuth舞,这并不是一件小事(尽管互联网上有很多代码可以帮助您)。此外,还有高级驱动器服务可能会有一些帮助,但我不确定它是否允许您自己处理oAuth2。

试试DriveApp吧

    var files = DriveApp.getFilesByName(name).next();

我让这条消息产生了一个应用程序,它可以访问具有有限访问列表的电子表格。用户即使获得授权也无法访问它,因为他们的设备上也有个人帐户,并且浏览器中没有机会切换到他们的授权帐户。但我找到了一个我想分享的解决办法。通过告诉用户以隐姓埋名或私人模式打开一个标签,这会导致谷歌不得不提示输入帐户,并且可以指定正确的帐户


希望这能有所帮助。

我用新的匿名windows google Chrome解决了这个问题
Ctrl+shift+N

或者在谷歌浏览器中创建另一个用户


或清除cookies。

您的脚本是否“以用户访问应用程序的身份”运行?如果是,他们是否可以访问电子表格?如果是这种情况,那么这就是预期的行为,解决方案是将文件共享给任何有链接的人,这些链接可以查看或发布作为开发人员运行的脚本。谢谢Henrique。是的,我正在运行“作为访问应用程序的用户”,因为我需要获取登录用户的一些个人详细信息。(所以不能像我一样运行)是的,他们可以直接访问电子表格,没有问题。我将尝试更改电子表格访问设置并发回。谢谢你的帮助。谢谢亨里克的帮助。那么,在不公开该工作表的情况下,是否没有办法运行该工作表?我需要那里的敏感数据。你知道吗?我已经做了一个恰当的回答,因为它相当长。希望它能帮助汉克斯·亨里克,很好的解释。在做了更多的挖掘之后,结果证明他们都在同一个谷歌组织内,所以我可以在内部分享。完美的再次感谢你的帮助。