希望这是一个非常简单的问题!
我制作了一个Google脚本,用单独的表格“MasterSheet”写入单元格(由几个有用的Q& As帮助)。这将最终部署到我给个人用户的多个不同表格中。
当用户对“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可以像我一样运行脚本,但是如果我是诚实的话,我会努力寻找使其成功的方法。
对不起,如果我问一个简单的问题 - 我已经给了它一个很好的搜索,但无法弄清楚。
非常感谢! 亚历
N.B。这个Running a google script from within a spreadsheet, but as a different user?看起来像一个类似的问题,但我真的想将评论系统保留在用户的电子表格中。
答案 0 :(得分: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以“Me”运行。
已发布的Web App有两个版本; “dev”版本和“exec”版本。 “dev”版本始终存在最新的更改,但绝不能用于生产。每次再次发布脚本时,“exec”版本都有一个新版本。要在生产中使用最新的“exec”版本,您必须继续发布最新代码。