Скрипты Google, которые преобразуют лист в PDF и отправляют его по электронной почте в виде вложения после нескольких успешных запусков - PullRequest
0 голосов
/ 30 апреля 2018

Я реализовал скрипт Google, чтобы изолировать конкретный лист в электронной таблице, а затем преобразовать лист в формат PDF и отправить его по электронной почте. Код извлекает адрес электронной почты для отправки электронного письма из самого листа.

Общее количество листов в электронной таблице равно 9. Код работает до листа 6/7 (он несовместим с местом возникновения первой ошибки).

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

Электронные письма отправляются на все адреса, но прикрепленные файлы PDF не открываются и содержат ошибку «Упс! Возникла проблема с предварительным просмотром этого документа» после листа 6/7.

var d = new Date();
var month = new Array();
month[0] = "January";
month[1] = "February";
month[2] = "March";
month[3] = "April";
month[4] = "May";
month[5] = "June";
month[6] = "July";
month[7] = "August";
month[8] = "September";
month[9] = "October";
month[10] = "November";
month[11] = "December";
var n = d.getMonth() +1;
var Year = d.getYear();
if (n == 12) { n = 0; Year += +1;} 
var m = month[n];


var subject = m + " " + Year; 
var body = 'body text.'
var Clients_No = 9;

function sendEmailWithPdfAttach() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssID = SpreadsheetApp.getActiveSpreadsheet().getId();
  var source = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = source.getSheets();
  var SpreadsheetName = source.getName();

  SpreadsheetApp.flush();



  for (var no_sent = 0; no_sent < Clients_No; no_sent++){
    var sheetNum = no_sent;//no_sent;    
    var SheetName = sheets[sheetNum].getName();
    var SheetID = sheets[sheetNum].getSheetId();
    var Sheet = source.getSheetByName(SheetName);
    var range = Sheet.getRange(1, 9); //change to 7, 2
    var email = range.getValue();
    var range_account_open = Sheet.getRange(14, 2);
    var Account_open = range_account_open.getValue();

    if (Account_open !== "Account Closed") {
      var url = ss.getUrl();
      url = url.replace(/edit$/,'');
      url = url + 'export?exportFormat=pdf&format=pdf' +
        '&size=A4' + //paper size
        '&portrait=true' + 
        '&fitw=true' +
        '&gridlines=false' + 
        '&fzr=false'; 

      var request = {
        "method": "GET",
        headers: {
        'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken()
      },
        "muteHttpExceptions": true
      };
      var url = Drive.Files.get(ssID)
      .exportLinks['application/pdf'] + "&gid="+SheetID;
      var blob = UrlFetchApp.fetch(url , request).getBlob();
      blob.setName(sheets[sheetNum].getName() + ".pdf"); 
      MailApp.sendEmail(email, subject, body, {attachments:blob});


      //Utilities.sleep(1000);
    }
  }
};

Что я должен изменить, чтобы все отправленные электронные письма имели открытые и функциональные PDF-файлы?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете попробовать предложенные действия по этой ссылке :

Надеюсь, это поможет!

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