提问者:小点点

如何为没有编辑器访问权限的用户通过Google Apps脚本访问不同Google电子表格上的数据?


我有2个电子表格,第一个将使用谷歌脚本功能在第二个电子表格上搜索数据。

我想保留第二个电子表格,其中包含要对用户隐藏的数据(没有编辑器访问权限),但他/她只能通过谷歌脚本功能在其上搜索。

我正在使用google脚本Openbyurl来执行此操作,但它不会让此用户运行Openbyurl,除非他/她具有对第二个电子表格的编辑器访问权限。

我该怎么处理这件事?

下面的函数在第一个电子表格中,openByUrl链接到第二个电子表格:

function onSearch(SN) { 
var ss = SpreadsheetApp.openByUrl('docs.google.com/spreadsheets/...'); 
var sheets = ss.getSheets(); 

// search for data in ss sheets . . .
// return array of found data

 }

共1个答案

匿名用户

我相信你的目标如下。

  • 您有2个Google电子表格“A”和“B”。
  • 您想让用户使用电子表格“A”的脚本从电子表格“B”中检索值。
  • 当电子表格“A”与用户共享时,您不想共享电子表格“B”。

在这种情况下,作为一种解决方法,使用Web应用程序访问电子表格“B”怎么样?通过这一点,您可以让用户访问电子表格“B”,而无需与用户共享电子表格。当这反映在您的脚本中时,如下所示。

请将以下脚本复制并粘贴到电子表格“B”的脚本编辑器。

function doGet(e) {
  var SN = e.parameter.sn; // You can use the value of SN here.
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // Your 2nd Spreadsheet.
  var sheets = ss.getSheets();

  // search for data in ss sheets . . .
  // return array of found data

  var returnValues = ["sample"]; // Please replace this value for your actual script.

  return ContentService.createTextOutput(JSON.stringify(returnValues));
}

请在电子表格“B”的脚本编辑器上运行此流程。详细信息可以在官方文档中看到。

  • 在脚本编辑器上,在脚本编辑器的右上角,请单击“单击部署”-
  • 在这种情况下,用户不需要使用访问令牌。所以请将其用作测试用例。
  • 当然,您也可以使用访问令牌访问您的Web应用程序。请查看此报告。
  • 当您修改Google Apps脚本时,请将部署修改为新版本。因此,修改后的脚本会反映在Web Apps中。请注意这一点。
  • 您可以在“重新部署Web Apps而不更改IDE的Web AppsURL”报告中看到详细信息。

请将以下脚本复制并粘贴到电子表格“A”的脚本编辑器中。并且,将您的Web应用程序设置为URL。在这种情况下,请将值指定为SN

function onSearch(SN) {
  var url = "https://script.google.com/macros/s/###/exec"; // Please set your Web Apps URL here.
  var res = UrlFetchApp.fetch(`${url}?sn=${SN}`);
  var ar = JSON.parse(res.getContentText()); // This is the returned value from Spreadsheet "B".
  
  // do something.

}

当您运行onSearch的脚本时,SN的值被发送到电子表格“B”并运行电子表格“B”的脚本,并返回结果值。通过此流程,您可以从电子表格“B”中检索值,而无需与用户共享电子表格“B”。

  • 在这个示例脚本中,当您直接运行onSearch时,没有声明SN的值。所以请注意这一点。
  • 当您修改Google Apps脚本时,请将部署修改为新版本。因此,修改后的脚本会反映在Web Apps中。请注意这一点。
  • 您可以在“重新部署Web Apps而不更改IDE的Web AppsURL”报告中看到详细信息。
  • 我建议的脚本是一个简单的脚本。所以请根据您的实际情况进行修改。
  • 网络应用程序
  • 使用Google Apps脚本利用Web Apps