Усеченный ответ сервера при создании PDF-файлов - PullRequest
0 голосов
/ 11 июля 2020

У меня есть скрипт, который экспортирует все мои листы в отдельные PDF-документы в папку с именем Invoices, однако он создает 6 документов, и после этого я получаю код ошибки ниже, это было опробовано в учетной записи Gsuite также, и я получаю ту же ошибку:

Исключение: запрос не выполнен для https://docs.google.com возвращен код 429. Усеченный ответ сервера:

1 Ответ

3 голосов
/ 11 июля 2020

См. Мой очень длинный ответ с более сложным обходным решением, если время выполнения является важным фактором здесь

Более простая работа:

В нижней части мой ответ в приведенной выше ссылке, вы увидите ссылку на количество секунд, на которые я смог отложить рекурсивную часть функции для извлечения любого количества PDF-файлов из листа на неопределенный срок в 8 секунд, поэтому все, что вам нужно сделать добавить в код в конце for l oop следующее:

Utilities.sleep(8000)

Весь код будет:

function savePDFs( optSSId, optSheetId ) {
  var ss = (optSSId) ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet();
  var url = ss.getUrl().replace(/edit$/,'');
  var parents = DriveApp.getFileById(ss.getId()).getParents();
  
  var folders = DriveApp.getFoldersByName('Invoices');  
  var folder = folders.hasNext() ? folders.next() : parents.next(); 

  var sheets = ss.getSheets();
  for (var i=0; i<sheets.length; i++) {
    var sheet = sheets[i];
    if (optSheetId && optSheetId !== sheet.getSheetId()) continue; 
    var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf
      + '&gid=' + sheet.getSheetId()   //the sheet's Id
      // following parameters are optional...
      + '&size=letter'      // paper size
      + '&portrait=true'    // orientation, false for landscape
      + '&fitw=true'        // fit to width, false for actual size
      + '&sheetnames=false&printtitle=false&pagenumbers=false'  //hide optional headers and footers
      + '&gridlines=false'  // hide gridlines
      + '&fzr=false';       // do not repeat row headers (frozen rows) on each page
    var options = {headers: {'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()}}
    var response = UrlFetchApp.fetch(url + url_ext, options);
    var valor = sheet.getRange('D5').getValue();  // Modified
    var blob = response.getBlob().setName(valor + '.pdf');
    folder.createFile(blob);
    Utilities.sleep(8000);
  }
}
...