如何将Google脚本作为电子表格的“所有者”执行,用户无法查看

时间:2016-11-15 16:49:24

标签: google-apps-script google-sheets

希望这是一个非常简单的问题!

我制作了一个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?看起来像一个类似的问题,但我真的想将评论系统保留在用户的电子表格中。

1 个答案:

答案 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”版本,您必须继续发布最新代码。