2016-11-15 29 views
0

希望这是一个相当简单的问题!如何执行谷歌脚本作为用户无法查看的电子表格的“所有者”

我制作了一个Google脚本,它写入单独的工作表“MasterSheet”中的单元格中(由以下几个有用的Q &提供帮助)。这将最终被嵌入到我为个人用户提供的多个不同工作表中。

当用户对“MasterSheet”有编辑权限时,它可以很好地工作,但我需要保持私密 - 即使除我以外的任何人都看不到。

作为背景:在每个'用户表'中,IMPORTRANGE用于从允许该用户查看的'MasterSheet'中导入列,然后脚本允许用户向MasterSheet添加注释。 我可以查看MasterSheet以查看来自各个用户在一张统一工作表上的评论的所有列,但个别用户应该无法查看此列。

写在纸张上的特定的脚本是很普通的:

function saveCommentToMasterSheet(form){ 
    var company = form.company, 
     contact = form.contactselect, 
     comment = form.message , 
     ss = SpreadsheetApp.openById("MASTERSHEET_ID").getSheetByName('MasterSheet'); 
    if(company=="all"){ 
    var row = findCell(contact); 
    } else { 
     var row = findCell2(contact,company); 
    } 
    //^The above finds the specific row number relating to the entry the user wants to comment on. 
    var cell2 = ss.getRange(row,11); 
    // ^In this case '11' is the column related to this sheet's specific user, I've made separate sheets for each user that are identical except this column number 
    cell2.setValue(comment); 
} 

我相信我可以做MasterSheet编辑与此链接的人,但我宁愿避免这种情况,尤其是在脚本嵌入到每个电子表格中,所以如果用户只是看着它,他们会发现MasterSheet ID。

我知道使用执行API可以像我一样运行脚本,但如果我诚实地说,我会努力一点,以弄清楚这个工作。

对不起,如果我问一个简单的问题 - 我已经给它一个很好的搜索,并无法弄清楚。

非常感谢! Alex

N.B.这Running a google script from within a spreadsheet, but as a different user?看起来像一个类似的问题,但我真的想保持评论系统在用户的电子表格。

+0

将'doPost(e)'函数放入绑定到主电子表格的项目中。然后将该脚本作为Web App发布。将原始函数保留在将分发给用户的电子表格中,但保留将要去除的所有当前代码,并将其放入绑定到主电子表格的项目中的函数中。目前将数据写入主电子表格的当前函数不会直接做到这一点。分布式电子表格中的当前函数将调用主电子表格中的'doGet(e)'函数,并发送数据,这些数据将在'e'中。 –

回答

1

你可以做一个POST请求,以便从电子表格中的主电子表格分发给用户:

Apps Script Documentation - UrlFetchApp.fetch()

function saveCommentToMasterSheet(form) {//Function in the 
    //spreadsheets distributed to the users 
    var options,responseCode,url; 

    url = "https://script.google.com/macros/s/File_ID/exec";//Get from publishing 

    options = {}; 
    options.method = 'post'; 
    options.payload = form; 

    responseCode = UrlFetchApp.fetch(url, options).getResponseCode(); 

    Logger.log('responseCode: ' + responseCode);//View the Logs 
}; 

上面的代码将触发主电子表格的doPost(e)功能,并把数据放入事件对象e

然后,您可以从e中获取数据,并将数据直接写入活动电子表格(这是主电子表格)。发布Web App作为“我”运行。

发布的Web App有两种版本; “dev”版本和“exec”版本。 “dev”版本总是与最新的变化一起存在,但不应该在生产中使用。每次您再次发布脚本时,“exec”版本都会有一个新版本。要在生产中使用最新的“exec”版本,您必须不断发布最新的代码。

+0

非常感谢 - 做到了。当我将用户标识号添加到表单有效内容时,它也有助于简化它。 对于任何人阅读 - 这花了我比我应该更长的时间,因为我没有意识到你必须发布新版本的Web应用程序(而不仅仅是更新当前的版本)以更新表格。 – glynnder

+0

谢谢你让我知道你的工作。我更新了答案以解释“exec”版本。 –

相关问题