如何使用Awesome Table小工具在公共站点上共享私人电子表格

时间:2014-10-20 17:17:11

标签: google-apps-script google-sheets google-gadget

我想通过访问私人表网址为公共网站运行google awesome table小工具。这是为了保护数据,否则公众可以看到工作表网址,他们可以复制整个工作表。我希望用户只能通过网站获取信息。

我怎样才能做到这一点。有没有办法运行像我自己运行的应用程序脚本小工具。

我是否需要修改小工具xml以访问我的私人工作表,例如应用程序脚本?

1 个答案:

答案 0 :(得分:3)

您可以在私人工作表和公共网站之间使用代理脚本。这不会隐藏工作表网址,但无需共享工作表本身。

在Awesome Tables的文档中,请参阅“Use row-level permissions”,其中介绍了如何设置代理脚本。但是,这个简单的代理不是控制特定行的显示,而是为整个表提供服务,同时隐藏公众的基础电子表格。

  1. 设置您的Awesome Table电子表格&小工具通常。您的数据无需特殊配置。

  2. 将Simple Proxy脚本部署为Web应用程序。

    • 将以下脚本复制到您帐户中的新脚本中。
    • 运行一次以对其进行授权。
    • 将其部署为网络应用“执行为我”,访问“任何人,包括匿名”。
    • 复制应用的公开网址。

  3. 在Awesome Table小工具的“高级参数”标签上,将简单代理的公共网址粘贴到“应用脚本代理网址”字段中。

  4. Simple Proxy.gs

    此脚本改编自Romain原创,删除了提供用户级数据过滤的仅限域功能。

    // Simple proxy for AwesomeTables
    // Adapted from https://script.google.com/d/1UfKnjB6jcemv5-BRP-ckaI5UCoEQI2KuvFdjNzmLpyadelNLCwpvaFsO/edit
    function doGet(e) {
      var ssUrl =  e.parameter.url;
      var sheetName = e.parameter.sheet;
      var a1Notation = e.parameter.range;
      var sheet = SpreadsheetApp.openByUrl(ssUrl).getSheetByName(sheetName); 
      var range = sheet.getRange(a1Notation); 
      var data = range.getValues();
      var dt = {cols:[], rows:[]};
      for(var i = 0; i < data[0].length; i++) {
        dt.cols.push({id:i, label:data[0][i] + ' ' + data[1][i], type: 'string', isNumber:true, isDate:true});
      }
      for(var i = 2; i < data.length; i++) {
          var row = [];
          for(var j = 0; j < data[i].length; j++) {
            if(isNaN(data[i][j])) dt.cols[j].isNumber = false;
            if(data[i][j] instanceof Date == false) dt.cols[j].isDate = false;
            else if(data[i][j].getFullYear() == 1899) {
              dt.cols[j].isDate = false;
              data[i][j] = data[i][j].getHours()+':'+(data[i][j].getMinutes()<10?'0':'')+data[i][j].getMinutes();
            }
            else data[i][j] = "Date("+data[i][j].getTime()+")";
            row.push({v:data[i][j]});
          }
          dt.rows.push({c:row});
      }
      for(var i = 0; i < data[0].length; i++) {
        if(dt.cols[i].isDate) dt.cols[i].type = 'datetime';
        else if(dt.cols[i].isNumber) dt.cols[i].type = 'number';
      }
      var output = e.parameters.callback + '(' + JSON.stringify({
        dataTable: dt
      }) + ')';
      return ContentService.createTextOutput(output).setMimeType(ContentService.MimeType.JAVASCRIPT);
    }
    

    注意事项

    • 用户可以在HTML源代码中查看托管Awesome Tables页面的电子表格的网址。如果您已启用共享,则电子表格可以向他们敞开。

    • 单个简单代理可以投放您帐户有权访问的所有电子表格。这是你应该注意的一个特征和风险。