自动将Google电子表格导出到Excel

时间:2016-07-03 13:14:24

标签: google-apps-script google-sheets export-to-excel

我想要一个Google Apps脚本,通过使用触发器自动将我在Google云端硬盘上的Google电子表格导出到.xls.xlsx 时间驱动(比方说每30分钟)或事件驱动(每次编辑都存档)。我基于Stack Overflow上的旧问题here,但因为函数oAuthConfig是 停止了,我想我会打开一个基于OAuth1库的新线程。

以下是我遵循的所有步骤:

  1. 文件打开后,我转到Tools -> Script Editor...然后我按照这些instructions安装了最新的OAuth1库(第12版和图书馆) 我使用的项目密钥是Mb2Vpd5nfD3Pz-_a-39Q4VfxhMjh3Sh48)。我也试过Development mode启用或禁用。

  2. 然后,我尝试根据Google API的所有更改更改上述脚本(请参阅herehereherehere

  3. 我运行了除googleOAuth_(...)之外的所有功能,并授予了他们要求的任何权限。

  4. 最后,我从Resources -> Current project's triggers创建了一个触发器,在每次编辑电子表格时调用函数myOnEdit,如果失败则通过电子邮件通知我。

  5. 这是脚本:

    function myOnEdit() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = ss.getActiveSheet();
      var r = s.getActiveCell();
      if( r.getColumn() != 1 ) { //checks the column
        var row = r.getRow();
        var time = new Date();
        time = Utilities.formatDate(time, ss.getSpreadsheetTimeZone(), "MM/dd/yy, hh:mm:ss");
        var id = ss.getId();
        s.getRange('A' + row.toString()).setValue(time); 
        var url = 'https://docs.google.com/feeds/';
        var doc = UrlFetchApp.fetch(url+'download/spreadsheets/Export?key='+id+'&exportFormat=xls',
                                    googleOAuth_('docs',url)).getBlob()
        DriveApp.createFile(doc).setName('newfile.xls')
      }
    }
    
    function authorise(){
      // function to call to authorize googleOauth
      var id=SpreadsheetApp.getActiveSpreadsheet().getId();
      var url = 'https://docs.google.com/feeds/';
      var doc = UrlFetchApp.fetch(url+'download/spreadsheets/Export?key='+id+'&exportFormat=xls',
                                googleOAuth_('docs',url)).getBlob()
    }
    
    function googleOAuth_(name,scope) {
      var service = OAuth1.createService(name);
      service.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
      service.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
      service.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
      service.setConsumerKey('anonymous');
      service.setConsumerSecret('anonymous');
      return {oAuthServiceName:name, oAuthUseToken:"always"};
    }
    

    因此,代码似乎没有产生任何错误,但有2个问题:

    1. 即使创建了文件newfile.xls,也不是我想要的。基本上,当我在Excel上打开它时,我得到了消息"" newfile.xls"的文件格式和扩展名。不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你想打开它吗?",然后等待一段时间,当文件打开时,它似乎是Excel格式的Google登录页面。

    2. 每次我对一行进行编辑时,与该行第一列对应的单元格会更改为当前时间戳,例如" 07/03 / 16,03:58:30&#34 ;在...上 原始电子表格。

2 个答案:

答案 0 :(得分:1)

要定期在Google云端硬盘上生成XLSX文件,您可以设置一个定时触发器,根据How to convert a Google Docs-File to an Excel-File (XLSX)中引用的要点调用test_downloadXLS()函数。

答案 1 :(得分:0)

部分简答

Google表格/ Google云端硬盘不支持XLS。

解释

当前版本的Google表格不支持AFAIK .XLS。无论如何,我只是直接在浏览器的地址栏上尝试了具有以下结构的URL:

https://docs.google.com/spreadsheets/d/spreadsheet-key/export?exportFormat=xls

得到了

Sorry, unable to open the file at this time error message