我有一个小脚本,可以从电子表格中抓取一些数据并将其显示在Google Scripts html页面上 - 用于测试我只是显示工作表名称。
它适合我,但其他用户收到错误:[Error] ScriptError: Document 1sTltxpKjSqgaFjc9-3EQzgtvyErkut2qETsn7SdThLE is missing (perhaps it was deleted?)
脚本和电子表格都是公开的,用户可以直接访问电子表格。
Google脚本代码:
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();
任何人都可以解释为什么这张表不能被其他用户访问,但是他们可以查看表格吗?两者都是公开的。
由于 罗布
答案 0 :(得分:1)
如果您已经部署了脚本来运行"作为用户访问应用程序"必须与此类用户共享电子表格,以便以他身份运行的脚本可以访问它。如果你有一个"一般"观众,您必须与&#34分享此电子表格;任何有链接的人都可以查看"。除非您当然可以更改部署选项以执行应用程序,即开发人员。
请注意,这并不一定会暴露您的电子表格,因为您不必为您的用户处理链接,脚本代码(只能由您私有)代表他们访问它,并且因为您的代码从Google服务器运行,电子表格链接永远不会泄露。
电子表格泄露的唯一方法是手动访问它。例如。如果你从咖啡店或其他不安全的网络打开它,有人嗅探或网络管理员自己可以看到你导航到的网站的网址,因此能够自己打开文件(因为它与任何人共享链接)。
如果您的信息非常敏感,并且您不想冒任何机会,那么解决方案就是将此信息保存在其他位置。例如,如果它适合(由于大小限制),您可以使用Properties服务,或cloud-sql或任何其他云存储。
另一个解决方案是使用匿名发布并以您的身份运行的辅助脚本,即" user"脚本可以使用UrlFetch调用来从中接收数据。在这种情况下,仍然只有"仅链接"安全功能,但现在你的脚本发布链接而不是文件,这是不太可能泄漏的方式,因为没有人访问它,但另一个脚本,这是一个谷歌服务器到服务器通信。如果有人能够破解谷歌服务器的通信,那么你的数据无论如何都不会受到保护。
最后,可能是最好的解决方案,就是直接通过UrlFetch使用Drive SDK,您可以在其上管理oAuth2凭据,而不是您的用户'。但是你需要在你的剧本中进行oAuth舞蹈,这不是一件容易的事(尽管互联网上有大量的代码可以帮助你)。此外,还有一些先进的Drive服务可能会有所帮助,但我不确定它是否允许您自己处理oAuth2。
答案 1 :(得分:1)
我收到了此消息,其中包含一个应用程序,该应用程序访问访问列表受限的电子表格。用户即使已获得授权也无法访问它,因为他们的设备上也有个人帐户,浏览器没有机会切换到其授权帐户。但是我找到了我认为可以分享的解决方法。通过告诉用户以隐身模式或私有模式打开标签页,这将导致Google必须提示输入该帐户,然后才能指定正确的帐户。
希望这会有所帮助。
答案 2 :(得分:0)
请尝试使用DriveApp。
var files = DriveApp.getFilesByName(name).next();
答案 3 :(得分:0)
我使用新的隐身窗口Google Chrome Ctrl + shift + N
或在Google chrome中创建另一个用户
或清除Cookie。