我想通过访问私人表网址为公共网站运行google awesome table小工具。这是为了保护数据,否则公众可以看到工作表网址,他们可以复制整个工作表。我希望用户只能通过网站获取信息。
我怎样才能做到这一点。有没有办法运行像我自己运行的应用程序脚本小工具。
我是否需要修改小工具xml以访问我的私人工作表,例如应用程序脚本?
答案 0 :(得分:3)
您可以在私人工作表和公共网站之间使用代理脚本。这不会隐藏工作表网址,但无需共享工作表本身。
在Awesome Tables的文档中,请参阅“Use row-level permissions”,其中介绍了如何设置代理脚本。但是,这个简单的代理不是控制特定行的显示,而是为整个表提供服务,同时隐藏公众的基础电子表格。
设置您的Awesome Table电子表格&小工具通常。您的数据无需特殊配置。
将Simple Proxy脚本部署为Web应用程序。
在Awesome Table小工具的“高级参数”标签上,将简单代理的公共网址粘贴到“应用脚本代理网址”字段中。
此脚本改编自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页面的电子表格的网址。如果您已启用共享,则电子表格可以向他们敞开。
单个简单代理可以投放您帐户有权访问的所有电子表格。这是你应该注意的一个特征和风险。