Google Script для экспорта как xlsx не работает - PullRequest
0 голосов
/ 05 июня 2018
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, используя следующий код.Я прочитал почти все сообщения, связанные с экспортом в xlsx через Google Script, и пришел к выводу, что все они представляют собой варианты кода ниже.Кажется, что работает, но с двумя проблемами:

  1. Он работает, но файл Excel не содержит данных и просто пуст с двумя вкладками.URL работает нормально, и файл xlsx содержит данные, когда я его скачиваю.

  2. Последняя строка, которая удаляет временный файл, который я создал для экспорта, не выполняет свою работу.Файл все еще существует на диске и ничего не изменилось.

Я искал ответы везде, но не могу понять это.Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Попробуйте этот код

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

}
0 голосов
/ 07 июня 2018

A для Q 1:

В вашем случае, как насчет использования SpreadsheetApp.flush()?Например, укажите это следующим образом.

// Export to xlsx
SpreadsheetApp.flush();
var ssID = destination.getId();

A для Q 2:

После того, как вы обновили свой скрипт, я заметил, что DriveApp.removeFile(DriveApp.getFilesByName('Temp').next()) изменен на DriveApp.getFilesByName('Temp').next().setTrashed(true).При этом файл Temp помещается в корзину.Я думаю, что вы уже знали об этом.

Если это не то, что вы хотите, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...