It looks like you can publish individual sheets according to these dialogs:


It does update the published sheets although I've noticed quite a bit of delay in the process occasionally.
Since the Publish to the Web simply shows a readonly version of an html table that contains sheet values then you could do that with one webapp. Here's an example below that displays all sheets in tabular form.
A Webapp to display all sheets:
function publishAllSheets() { var ss=SpreadsheetApp.getActive(); var allShts=ss.getSheets(); var s='All my Sheets'; for(var i=0;i<allShts.length;i++) { var sh=allShts[i]; var rg=sh.getDataRange(); var vA=rg.getValues(); s+=Utilities.formatString('Sheet: %s <br /><table border="1">',allShts[i].getName()); for(var j=1;j<vA.length;j++) { s+='<tr>'; for(var k=0;k<vA[j].length;k++) { s+=Utilities.formatString('<td>%s</td>', vA[j][k]); } s+='</tr>'; } s+='</table>'; } return s; } function showAllMySheets() { var ui=HtmlService.createHtmlOutputFromFile('allsheets').setWidth(1000); SpreadsheetApp.getUi().showModelessDialog(ui, 'All My Sheets') } function doGet() { var ui=HtmlService.createHtmlOutputFromFile('allsheets'); return ui.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); }
allsheets.html
<!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> $(function(){ google.script.run .withSuccessHandler(updateDiv) .publishAllSheets(); }); function updateDiv(hl) { document.getElementById('c1').innerHTML=hl; } </script> </head> <body> <div id="c1"></div> </body> </html>
Here's the code for getting any one of your sheets:
function getSheetNames() { var ss=SpreadsheetApp.getActive(); var allShts=ss.getSheets(); var shts=[]; for(var i=0;i<allShts.length;i++) { shts.push(allShts[i].getName()); } return shts; } function getOneSheet(name) { var ss=SpreadsheetApp.getActive(); var sh=ss.getSheetByName(name); var rg=sh.getDataRange(); var vA=rg.getValues(); var s=''; s+=Utilities.formatString('Sheet: %s <br /><table border="1">',sh.getName()); for(var j=1;j<vA.length;j++) { s+='<tr>'; for(var k=0;k<vA[j].length;k++) { s+=Utilities.formatString('<td>%s</td>', vA[j][k]); } s+='</tr>'; } s+='</table>'; return s; }
onesheet.html
<!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script> $(function(){ google.script.run .withSuccessHandler(updateSelect) .getSheetNames(); }); function updateDiv(hl) { document.getElementById('c1').innerHTML=hl; } function updateSelect(vA) { var select = document.getElementById("sel1"); select.options.length = 0; for(var i=0;i<vA.length;i++) { select.options[i] = new Option(vA[i],vA[i]); } } function getSelectedSheet() { var name=$('#sel1').val(); google.script.run .withSuccessHandler(updateDiv) .getOneSheet(name); } console.log('MyCode'); </script> </head> <body> <select id="sel1"> <option value="" selected></option> </select> <input type="button" value="Select" onClick="getSelectedSheet();" /> <div id="c1"></div> </body> </html>