【问题标题】:How to access data on different Google Spreadsheet through Google Apps Script for user without Editor access?如何通过 Google Apps 脚本为没有编辑权限的用户访问不同 Google 电子表格上的数据?
【发布时间】:2021-12-21 00:45:32
【问题描述】:

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

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

我正在使用 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

 }

【问题讨论】:

  • 您能提供您当前的I have 2 Spreadsheets, the 1st will Search on the 2nd spreadsheet with data using a google script function. 脚本吗?
  • function onSearch(SN) { var ss = SpreadsheetApp.openByUrl('docs.google.com/spreadsheets/...'); var sheet = ss.getSheets(); // 在 ss sheet 中搜索数据。 . .返回 arr; } @Tanaike
  • 感谢您的回复。当您显示脚本时,请将其添加到您的问题中。这样,可读性就会很高。顺便说一句,在你的脚本中,arr 没有被声明。所以,不幸的是,我无法理解你的脚本。我为此道歉。你能解释一下你的脚本的细节吗?
  • 感谢您更新它。从您更新的问题中,我提出了一个答案。你能确认一下吗?如果我误解了您的问题并且没有用处,我深表歉意。

标签: google-apps-script google-sheets


【解决方案1】:

我相信你的目标如下。

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

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

流程:

1。对于电子表格“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));
}

2。部署 Web 应用程序。

请在电子表格“B”的脚本编辑器上运行此流程。详细信息可以在the official document查看。

  1. 在脚本编辑器上,在脚本编辑器的右上角,请点击“点击部署”->“新建部署”。
  2. 请点击“选择类型”->“Web App”。
  3. 请在“部署配置”下的字段中输入有关Web App的信息。
  4. 请为“执行为”选择“我”
    • 这是此解决方法的重要性。
  5. 请为“谁有权”选择“任何人”
    • 在这种情况下,用户不需要使用访问令牌。所以请将此作为测试用例。
    • 当然,您也可以使用访问令牌访问您的 Web 应用程序。请查看this report
  6. 请点击“部署”按钮。
  7. 复制 Web 应用程序的 URL。就像https://script.google.com/macros/s/###/exec

3。对于电子表格“A”:

请将以下脚本复制并粘贴到电子表格“A”的脚本编辑器中。并且,设置您的 Web Apps 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.

}

4。测试:

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

注意:

  • 在此示例脚本中,当您直接运行onSearch 时,不会声明SN 的值。所以请注意这一点。
  • 当您修改 Google Apps 脚本时,请将部署修改为新版本。这样,修改后的脚本就会反映在 Web Apps 中。请注意这一点。
  • 您可以在“Redeploying Web Apps without Changing URL of Web Apps for new IDE”的报告中查看详细信息。
  • 我提议的脚本是一个简单的脚本。所以请根据您的实际情况进行修改。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多