【问题标题】:Access to spreadsheet in deployed web app访问已部署的 Web 应用程序中的电子表格
【发布时间】:2015-03-11 08:41:49
【问题描述】:

我正在尝试通过作为网络应用发布的 Google 脚本访问 Google 电子表格。

我是如何创建脚本的:

  • 来自电子表格、工具/脚本编辑器...、电子表格项目
  • 它要求访问 GDrive 中的电子表格,所以总的来说我认为它已附加到电子表格中。

脚本:

function doGet() {
  var ss = SpreadsheetApp.getActive();
  // alternative, doesn't work either
  // var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/abcdef/edit");

  var sheets = ss.getSheets();

  var text = ... loop over sheets and do some stuff to get the data ...

  return ContentService.createTextOutput(text);
}

调用网络应用时的错误信息:

TypeError: Cannot call method "getSheets" of null.

该函数在编辑器中运行时有效(当然减去 ContentService.createTextOutput)。

有什么建议吗?谢谢! :-)

桑德罗

【问题讨论】:

  • According to Google,将绑定脚本部署为 Web 应用程序是“不常见的”。似乎以这种方式部署会阻止脚本访问getActiveSpreadsheet()等方法。如果我们考虑getActiveSheet(),这更有意义——在网络应用程序的上下文中没有“活动工作表”的概念。因此,您似乎需要按名称(或编号)打开工作表,并按 URL 或 Id 打开电子表格。

标签: google-apps-script google-sheets


【解决方案1】:

除非脚本绑定到电子表格(即脚本是在电子表格中创建的),否则您不能使用 getActive() 方法。

在您使用 openByUrl() 的示例中,我将检查您的 URL 和对该工作表的权限。这是您尝试做的工作示例。

function doGet(){
  var ss= SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1XLOVvEo2nzLARwRhsiWUrFMtF0LnofC1PQoWIeLmwgQ/edit#gid=0');
  return ContentService.createTextOutput(ss.getSheets()[0].getName()).setMimeType(ContentService.MimeType.TEXT); 
}

【讨论】:

  • 好的,openByUrl 示例现在可以工作了。我发誓我以前有过这样的经历;-) 这很好。但是我已经从电子表格中创建了脚本,如我最初的帖子中所述。所以 SpreadsheetApp.getActive() 应该返回电子表格,即使在 doGet() 中调用,对吧?或者当 UI 不可见时是否有其他方法可以调用? (考虑到网络应用的范围,可能就是这种情况)
  • 我也在尝试解决这个问题。根据文档,getActive 应该在已部署的网络应用程序中工作,但它绝对不适合我。
  • 文档中的哪个页面说 getActive 应该可以工作?我会放一张票来解决这个问题。除非您使用 setActive 设置活动或从文档启动脚本,否则它将不起作用。
猜你喜欢
  • 2014-03-14
  • 2020-11-05
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多