iframe - Embed specific range from Google Sheets in website so that it is editable by website users -
i want embed specific range of cells google docs spreadsheet (or if doesn't work whole sheet without header , toolbar) in website, website visitor can input data.
i know how embed specific range of cells html table, doesn't allow website users edit sheet.
a similar question asked several years ago here suggested solution doesn't seem work anymore.
i called htmlspreadsheet can use dialog or deploy webapp doget go. it's still pretty simple app. there's lot of romm customization.
here's code.gs file:
function onopen() { spreadsheetapp.getui().createmenu('html spreadsheet') .additem('run spreadsheet in dialog', 'htmlspreadsheet') .addtoui(); } var ssid='spreadsheetid'; var sheetname='sheet1'; 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' + + j + '">' + '<input id="txt' + + j + '" type="text" value="' + rnga[i][j] + '" size="10" onchange="updatess(' + + ',' + j + ');" />' + '</th>'; } else { s+='<td id="cell' + + j + '">' + '<input id="txt' + + j + '" type="text" value="' + rnga[i][j] + '" size="10" onchange="updatess(' + + ',' + 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 ' + 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; }
this htmlss.html file:
<!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>
Comments
Post a Comment