谷歌工作表使用应用程序脚本压缩

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (14)

我正在尝试使用谷歌应用程序脚本中的以下代码从谷歌工作表制作zip文件:

var blobs = [];

function myFunction(){
   var file = DriveApp.getFileById("fileId");
   var blobObject = file.getBlob();
   var blobObject1 = file.getBlob().setContentType("application/vnd.google-apps.spreadsheet").setName("blob1.xlsx");
   var blobObject2 = file.getBlob().setContentType('application/vnd.ms-excel').setName("blob2.xlsx");
   var blobObject3 = file.getBlob().setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet").setName("blob3.xlsx");

   blobs.push(blobObject)
   blobs.push(blobObject1)
   blobs.push(blobObject2)
   blobs.push(blobObject3)

   Logger.log(file.getMimeType());    // output : application/vnd.google-apps.spreadsheet
   Logger.log(blobObject.getContentType())   // output : application/pdf

   Logger.log(blobObject1.getContentType()) // output : application/vnd.google-apps.spreadsheet
   Logger.log(blobObject2.getContentType()) // output : application/vnd.ms-excel
   Logger.log(blobObject3.getContentType()) // output : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet


   var timestamp = new Date().toISOString().split("T")[0];
   var zip = Utilities.zip(blobs, "FolderName"+timestamp+".zip");
   var folder = DriveApp.getFolderById("FolderId");
   folder.createFile(zip);  

}

我能够获得4个文件的zip。一个文件是pdf格式。重置3是.xlsx格式。

但不幸的是,所有.xlsx文件都已损坏。

打开.xlsx时出现此错误:

Excel cannot open the file because the file format or file extension is not valid.
Verify that the file has not been corrupted and that the file extension matches the format of the file.

请建议我如何才能达到理想的效果。

提问于
用户回答回答于

我昨天刚丢失互联网时才开始玩这个游戏。所以这就是我最终做的事情,对我来说没问题。感谢代码我会喜欢这个,因为我决定学习更多关于Excel编程的知识。

function myFunction(){
  var ss=SpreadsheetApp.openById('ssId');
  var shts=ss.getSheets();
  var blobs = [];
  var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export?format=xlsx&access_token=" + ScriptApp.getOAuthToken();
  for(var i=0;i<shts.length;i++) {
    var sh=ss.getSheetByName(Utilities.formatString('Sheet%s', i + 1));
    sh.showSheet();
    switch (i) {
      case 0:
        var jA=[1,2,3];
        for(var j=0;j<jA.length;j++){shts[jA[j]].hideSheet();}//hide other sheets
        shts[i].showSheet();
        blobs.push(ss.getBlob().getAs('application/pdf'));
        break;
      case 1:
        var jA=[0,2,3];
        for(var j=0;j<jA.length;j++){shts[jA[j]].hideSheet();}//hide other sheets
        blobs.push(UrlFetchApp.fetch(url).getBlob().setName("blob1.xlsx")); 
        break;
      case 2:
        var jA=[0,1,3];
        for(var j=0;j<jA.length;j++){shts[jA[j]].hideSheet();}//hide other sheets
        blobs.push(UrlFetchApp.fetch(url).getBlob().setName("blob2.xlsx"));
        break;
      case 3:
        var jA=[0,1,2];
        for(var j=0;j<jA.length;j++){shts[jA[j]].hideSheet();}           
        blobs.push(UrlFetchApp.fetch(url).getBlob().setName("blob3.xlsx"));
        break;
    }
  }
  var timestamp = new Date().toISOString().split("T")[0];
  var zip = Utilities.zip(blobs, "FolderName"+timestamp+".zip");
  var folder = DriveApp.getFolderById("folderId");
  folder.createFile(zip);  
}

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券