要作为xlsx无效导出的Google脚本

时间:2018-06-05 05:59:52

标签: excel google-apps-script

function exportSpreadsheet() {
  var destination = SpreadsheetApp.create('Temp');
  var dest1 = destination.getActiveSheet().setName('출고입력 거래처정보(상단)');
  var dest2 = destination.insertSheet('출고입력 폼목정보(하단)');  
  var source1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('출고입력 거래처정보(상단)').getDataRange();
  var source2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('출고입력 폼목정보(하단)').getDataRange();
  var source1Data = source1.getValues();
  var source2Data = source2.getValues(); 
  var s1Rows = source1.getNumRows();
  var s1Columns = source1.getNumColumns();  
  var s2Rows = source2.getNumRows();
  var s2Columns = source2.getNumColumns();   

  // Copy Data to Temp file
  for(var i = 0; i<s1Rows; i++){ 
  for(var j = 0; j<s1Columns; j++) {
       dest1.getRange(i+1,j+1).setValue(source1Data[i][j]);
    }
  }  

  for(var i = 0; i<s2Rows; i++){ 
    for(var j = 0; j<s2Columns; j++) {
        dest2.getRange(i+1,j+1).setValue(source2Data[i][j]);
    }
  }

  // Export to xlsx
  var ssID = destination.getId();
  var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export"+"?format=xlsx";

  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};

  var response = UrlFetchApp.fetch(url, params).getBlob();
  // Save to drive
  var folder = DriveApp.getFolderById('1vDFMM2EfRe1unR6hJOsKapfJrcwxRkxy');
  folder.createFile(response).setName('출고.xlsx');

  // Delete Temp file
  DriveApp.getFilesByName('Temp').next().setTrashed(true);

}

我正在尝试从电子表格中导出两个标签,并将其另存为xlsx文件。在这样做时,我已将两个选项卡复制到新的电子表格,然后使用以下代码导出到xlsx。我已经阅读了几乎所有涉及通过Google Script导出到xlsx的帖子,并得出结论它们都是下面代码的变体。它似乎有效,但有两个问题:

  1. 它可以工作,但excel文件不包含数据,只有两个选项卡空。 URL工作正常,xlsx文件在下载时包含数据。

  2. 删除我为导出创建的临时文件的最后一行没有完成它的工作。该文件仍然存在于驱动器中,并且没有任何更改。

  3. 我到处寻找答案,但无法解决这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

尝试此代码

function exportSpreadsheet() {

  var ssID = "yourID";

  var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export"+
                                                        "?format=xlsx&"+
                                                        "size=0&"+
                                                        "fzr=true&"+
                                                        "portrait=false&"+
                                                        "fitw=true&"+
                                                        "gridlines=false&"+
                                                        "printtitle=true&"+
                                                        "sheetnames=true&"+
                                                        "pagenum=CENTER&"+
                                                        "attachment=true";

  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};

  var response = UrlFetchApp.fetch(url, params).getBlob();

  var folder = DriveApp.getFolderById("YourFolder");

  folder.createFile(response);

}

答案 1 :(得分:0)

<3>对于Q 1:

在您的情况下,如何使用SpreadsheetApp.flush()?例如,请将其如下所示。

// Export to xlsx
SpreadsheetApp.flush();
var ssID = destination.getId();
对于问题2,

A:

更新脚本后,我发现DriveApp.removeFile(DriveApp.getFilesByName('Temp').next())已修改为DriveApp.getFilesByName('Temp').next().setTrashed(true)。这样,Temp的文件就会被放入垃圾箱。我想你已经知道了。

如果这不是你想要的,我很抱歉。