2017-08-04 220 views
2

我想在游乐场模式的网页上发布Google Spreadsheet,这将使访问者能够编辑内容,更改公式等,但所有这些更改必须保持本地化,不会保存在原始Google电子表格中。谷歌电子表格:任何人都可以编辑但无法保存更改

是否可以发布和嵌入Google电子表格,如禁用最终用户的“保存”功能,即无法自动保存更改并且无法手动保存?

即使涉及Google Apps脚本,任何解决方案都会这样做!请指教。谢谢。

回答

1

可以在电子表格中放置电子表格的某些功能。这个例子是你想要的一个微不足道的开始。至于通过创建您想要的电子表格的副本可能实现的禁用保存以及在离开Web应用程序时通过DriveApp删除它(不知道该怎么做)。这可能是可能的,但我的猜测是,这是很多工作,我不确定它会像使用标准电子表格一样好用。布赖恩班纳特的解决方案可能是一个更好的主意,但该用户保留一份您无法控制的电子表格副本。所以这可能不是你想要的。

Code.gs:

var SSID='SpreadsheetID'; 
var sheetName='Sheet Name'; 
function htmlSpreadsheet(mode) 
{ 
    var mode=(typeof(mode)!='undefined')?mode:'dialog'; 
    var br='<br />'; 
    var s=''; 
    var hdrRows=1; 
    var ss=SpreadsheetApp.openById(SSID); 
    var sht=ss.getSheetByName(sheetName); 
    var rng=sht.getDataRange(); 
    var rngA=rng.getValues(); 
    s+='<table>'; 
    for(var i=0;i<rngA.length;i++) 
    { 
    s+='<tr>'; 
    for(var j=0;j<rngA[i].length;j++) 
    { 
     if(i<hdrRows) 
     { 
     s+='<th id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="10" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>'; 
     } 
     else 
     { 
     s+='<td id="cell' + i + j + '">' + '<input id="txt' + i + j + '" type="text" value="' + rngA[i][j] + '" size="10" onChange="updateSS(' + i + ',' + j + ');" />' + '</th>'; 
     } 
    } 
    s+='</tr>'; 
    } 
    s+='</table>'; 
    //s+='<div id="success"></div>'; 
    s+='</body></html>'; 
    switch (mode) 
    { 
    case 'dialog': 
     var userInterface=HtmlService.createHtmlOutputFromFile('htmlss').setWidth(1000).setHeight(450); 
     userInterface.append(s); 
     SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Spreadsheet Data for ' + ss.getName() + ' Sheet: ' + sht.getName()); 
     break; 
    case 'web': 
     var userInterface=HtmlService.createHtmlOutputFromFile('htmlss').setWidth(1000).setHeight(450); 
     return userInterface.append(s).setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 
    } 
} 

function updateSpreadsheet(i,j,value) 
{ 
    var ss=SpreadsheetApp.openById(SSID); 
    var sht=ss.getSheetByName(sheetName); 
    var rng=sht.getDataRange(); 
    var rngA=rng.getValues(); 
    rngA[i][j]=value; 
    rng.setValues(rngA); 
    var data = {'message':'Cell[' + Number(i + 1) + '][' + Number(j + 1) + '] Has been updated', 'ridx': i, 'cidx': j}; 
    return data; 
} 

function doGet() 
{ 
    var output=htmlSpreadsheet('web'); 
    return output; 
} 

htmlss.html:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <script> 
    $(function() { 

    }); 
    function updateSS(i,j) 
    { 
     var str='#txt' + String(i) + String(j); 
     var value=$(str).val(); 
     $(str).css('background-color','#ffff00'); 
     google.script.run 
     .withSuccessHandler(successHandler) 
     .updateSpreadsheet(i,j,value) 
    } 
    function successHandler(data) 
    { 
     $('#success').text(data.message); 
     $('#txt' + data.ridx + data.cidx).css('background-color','#ffffff'); 
    } 
    console.log('My Code'); 
    </script> 
    <style> 
     th{text-align:left} 
    </style> 
    </head> 
    <body> 
    <div id="success"></div> 
4

一个简单的方法来保持主电子表格的完整性,同时允许人们编辑是正义的力量副本的时候,他们点击链接。

您的电子表格至少需要在共享设置中查看权限。然后,抢网址:

https://docs.google.com/spreadsheets/d/SOME_BIG_LONG_KEY/view

改变“视图”末到“复制”:

https://docs.google.com/spreadsheets/d/SOME_BIG_LONG_KEY/copy

用户将被要求签署并保存一份到自己的驾驶。您的主人保持原状,每个人都拥有工作表的工作副本,并且您不需要一个大脚本来管理更改。这就是说,如果您对主人进行更改,他们不会反映在副本中,因为这是一个新文档。

+0

这是记录在哪里?我想了解更多。 – Cooper

+0

@cooper不知道它是否正式记录......我在几年前的某个地方了解了它,并定期使用它。 – Brian

+0

您是否与其他用户分享,然后将该链接上的视图更改为/ copy? – Cooper