Google листы, чтобы сжать с помощью скрипта приложений - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь создать zip-файл из листов Google, используя следующий код в скриптах приложения Google:

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);  

}

Я могу получить zip с 4 файлами. Один файл в формате 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.

Подскажите, пожалуйста, как мне достичь желаемого результата.

1 Ответ

0 голосов
/ 14 марта 2019

Я только начал играть с этим вчера, когда потерял интернет. Так что это то, что я в итоге сделал, и это работает хорошо для меня. Спасибо за код, который мне понравится, так как я решил немного больше узнать о программировании в 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);  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...