Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用GoogleAppScript,是否可以通过编程方式将GoogleSheets文档中的单个页面发布到web?_Google Apps Script_Google Sheets_Google Drive Api_Google Sheets Api_Web Publishing - Fatal编程技术网

Google apps script 使用GoogleAppScript,是否可以通过编程方式将GoogleSheets文档中的单个页面发布到web?

Google apps script 使用GoogleAppScript,是否可以通过编程方式将GoogleSheets文档中的单个页面发布到web?,google-apps-script,google-sheets,google-drive-api,google-sheets-api,web-publishing,Google Apps Script,Google Sheets,Google Drive Api,Google Sheets Api,Web Publishing,我希望通过Google Appscript(a)以编程方式将Google sheets文档中选定的工作表发布到web上,(b)以编程方式获取每个工作表发布的URL,以及(c)在更新相应工作表时自动更新每个工作表的发布版本(这应该是自动发生的,对吧?)。现在,我只能通过文件/发布到Web来实现这一点 以下问题和答案与此问题高度相关: 但是,它似乎只适用于发布整个Google Sheets文档,而不适用于发布Google Sheets文档中的单个页面。任何解决方案想法都将不胜感激。看起来您可以根据

我希望通过Google Appscript(a)以编程方式将Google sheets文档中选定的工作表发布到web上,(b)以编程方式获取每个工作表发布的URL,以及(c)在更新相应工作表时自动更新每个工作表的发布版本(这应该是自动发生的,对吧?)。现在,我只能通过文件/发布到Web来实现这一点

以下问题和答案与此问题高度相关:


但是,它似乎只适用于发布整个Google Sheets文档,而不适用于发布Google Sheets文档中的单个页面。任何解决方案想法都将不胜感激。

看起来您可以根据以下对话框发布单个页面:

它确实会更新已发布的工作表,尽管我偶尔会注意到在这个过程中有相当多的延迟

由于“发布到Web”只是显示包含工作表值的html表格的只读版本,因此您可以使用一个Web应用程序执行此操作。下面的示例以表格形式显示所有工作表

显示所有图纸的Web应用程序:
函数publishAllSheets()
{
var ss=SpreadsheetApp.getActive();
var allShts=ss.getSheets();
var s='我所有的床单';

对于(var i=0;i而言,您似乎可以根据以下对话框发布各个工作表:

它确实会更新已发布的工作表,尽管我偶尔会注意到在这个过程中有相当多的延迟

由于“发布到Web”只是显示包含工作表值的html表格的只读版本,因此您可以使用一个Web应用程序执行此操作。下面的示例以表格形式显示所有工作表

显示所有图纸的Web应用程序:
函数publishAllSheets()
{
var ss=SpreadsheetApp.getActive();
var allShts=ss.getSheets();
var s='我所有的床单';

对于(var i=0;i我对这个问题有了一些了解。只需修改用于访问该工作表的URL,就可以获得Google Sheets文档中单个工作表的已发布HTML版本的URL

例如,以下是我在Google Sheets中处理的工作表的URL,直接从浏览器的URL栏复制:

然后,我可以按如下方式修改URL,以获得该单页的已发布HTML版本:

我所做的URL修改摘要:

  • 将“电子表格”之后的“/d”替换为“/u/0/d”
  • 将“编辑”替换为“htmlembed/sheet?” 人们可以作出的其他推论:

  • “/u/0/d”后面的长字符串是Google Sheets文档的ID。
  • “sheet?”后面的较短字符串是该文档中单个工作表的ID。 这些新的见解将我的问题转化为一个新的问题:即,我如何通过编程(通过Google Appscript)获得我正在处理的Google Sheets文档的ID,以及我正在处理的电子表格的ID

    答案如下:

  • 要获取Appscript中当前Google Sheets文档的ID:
    var ss=SpreadsheetApp.getActiveSpreadsheet().getId();

  • 要在当前Google Sheets文档中获取当前工作表的ID:
    var sheet=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetId();

  • 我现在可以通过字符串连接为Google Sheets文档中任何一张表单的已发布html版本构建URL,如下所示:
    var publishedURL=”https://docs.google.com/spreadsheets/u/0/d/“+ss+”/htmlembed/sheet?gid=“+sheet;

    不过,仍然有一个挥之不去的问题:此已发布URL的用户似乎必须手动刷新浏览器,以便将HTML与电子表格同步。目前,我没有解决此问题的方法,只能请求URL用户安装自动URL刷新器或定期手动刷新页面y、 我欢迎对此有任何想法。

    我对这个问题有了一些见解。只需修改用于访问该页面的URL,就可以在Google Sheets文档中获得单个页面的已发布HTML版本的URL

    例如,以下是我在Google Sheets中处理的工作表的URL,直接从浏览器的URL栏复制:

    然后,我可以按如下方式修改URL,以获得该单页的已发布HTML版本:

    我所做的URL修改摘要:

  • 将“电子表格”之后的“/d”替换为“/u/0/d”
  • 将“编辑”替换为“htmlembed/sheet?” 人们可以作出的其他推论:

  • “/u/0/d”后面的长字符串是Google Sheets文档的ID。
  • “sheet?”后面的较短字符串是该文档中单个工作表的ID。 这些新的见解将我的问题转化为一个新的问题:即,我如何通过编程(通过Google Appscript)获得我正在处理的Google Sheets文档的ID,以及我正在处理的电子表格的ID

    答案如下:

  • 要获取Appscript中当前Google Sheets文档的ID:
    var ss=SpreadsheetApp.getActiveSpreadsheet().getId();

  • 要在当前Google Sheets文档中获取当前工作表的ID:
    var sheet=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetId();

  • 我现在可以通过字符串连接为Google Sheets文档中任何一张表单的已发布html版本构建URL,如下所示:
    var publishedURL=”https://docs.google.com/spreadsheets/u/0/d/“+ss+”/htmlembed/sheet?gid=“+sheet;
    不过,仍然有一个挥之不去的问题:这个已发布URL的用户似乎必须手动刷新浏览器,以便将HTML与电子表格同步
    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);
    }
    
    <!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>
    
    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;
    }
    
    <!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>