我有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
}
我相信你的目标如下。
在这种情况下,作为一种解决方法,使用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”的脚本编辑器上运行此流程。详细信息可以在官方文档中看到。
请将以下脚本复制并粘贴到电子表格“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
的值。所以请注意这一点。