Search code examples
google-apps-scriptgoogle-sheetsgoogle-sheets-macros

PDF generated but the cells are empty


The GAS generate a pdf that is sent by email, the cells are empty though.

The cells contain formulas.

I have no idea where to look or what to modify.

function emailAsPDF() {
  var emailAddress=Session.getActiveUser().getEmail();
  var mess="Voulez-vous envoyer votre rapport  à l'adresse : " + emailAddress;
  var ans= Browser.msgBox("Courriel", mess, Browser.Buttons.YES_NO);
  if (ans===Browser.Buttons.NO){return;}
  var mess="Votre rapport a été envoyé à l'adresse : " + emailAddress;
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var sheet=ss.getSheetByName("Recherche");
  //var range = sheet.getActiveCell();
  var CandidateName=ss.getRangeByName("Nom.Candidat").getValue();
  var emailSubject="Vérifications pré-emploi complétées" +" - "+ CandidateName;
  var emailMessage="Bonjour," + "\n\n" + "J’ai le plaisir de vous informer que les vérifications sont complétées pour le candidat indiqué au tableau de résultats pré-emploi suivant:" + "\n\n" + "Bonne journée !";
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();//.getSheetByName("Formation");
  var sheet=spreadsheet.getSheetByName("Recherche");
  var newSpreadsheet = SpreadsheetApp.create("Spreadsheet to export");
  sheet.copyTo(newSpreadsheet);
  var sheetNames=newSpreadsheet.getSheets();
  newSpreadsheet.deleteActiveSheet();
  var blob = newSpreadsheet.getAs('application/pdf');
  var folderID = parentFolder(); // Folder id to save the PDF
  Logger.log(folderID);
  var folder = DriveApp.getFolderById(folderID);
  var pdfName = spreadsheet.getName() + " - " + CandidateName + '.pdf';
  var pdfFile = folder.createFile(blob).setName(pdfName);
  MailApp.sendEmail(emailAddress, emailSubject, emailMessage,{attachments:[pdfFile]});
  //DriveApp.getFileById(pdfFile.getId()).setTrashed(true);
  DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(true);  
  DriveApp.getFileById(pdfFile.getId()).setTrashed(true);
  Browser.msgBox("Courriel", mess, Browser.Buttons.OK); 
}


function parentFolder() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var file = DriveApp.getFileById(ss.getId()); 
  var ParentFolder= file.getParents();
  while ( ParentFolder.hasNext() ) {
    var folder = ParentFolder.next();
    folderID=folder.getId();
     Logger.log(folderID);
  }
  return folderID;
}

function test() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var file = DriveApp.getFileById(ss.getId()); 
  var ParentFolder= file.getParents();
  var folder = ParentFolder.next();
   Logger.log(folder);
//  while ( ParentFolder.hasNext() ) {
//    var folder = ParentFolder.next();
//    folderID=folder.getId();
//     Logger.log(folderID);
//  }
//  return folderID;
}

I expect the report shows the information contained in the cells. Below tow screenshots: The spereadsheet view The PDF document result


Solution

  • Try this:

    function emailAsPDF() {
      var emailAddress=Session.getActiveUser().getEmail();
      var mess="Voulez-vous envoyer votre rapport  à l'adresse : " + emailAddress;
      var ans= Browser.msgBox("Courriel", mess, Browser.Buttons.YES_NO);
      if (ans===Browser.Buttons.NO){return;}
      var mess="Votre rapport a été envoyé à l'adresse : " + emailAddress;
      var ss=SpreadsheetApp.getActive();
      var sheet=ss.getSheetByName("Recherche");
      var CandidateName=ss.getRangeByName("Nom.Candidat").getValue();
      var emailSubject="Vérifications pré-emploi complétées" +" - "+ CandidateName;
      var emailMessage="Bonjour," + "\n\n" + "J’ai le plaisir de vous informer que les vérifications sont complétées pour le candidat indiqué au tableau de résultats pré-emploi suivant:" + "\n\n" + "Bonne journée !";
      var shts=ss.getSheets();
      var hdnA=[];
      shts.forEach(function(sht){if(sht.getName()!="Recherche") {sht.hideSheet();hdnA.push(sht.getName());}})
      var blob = ss.getAs('application/pdf');
      var file=DriveApp.getFileById(ss.getId());
      var folder=file.getParents().next();
      var pdfName = ss.getName() + " - " + CandidateName + '.pdf';
      var pdfFile = folder.createFile(blob).setName(pdfName);
      MailApp.sendEmail(emailAddress, emailSubject, emailMessage,{attachments:[pdfFile]});
      DriveApp.getFileById(pdfFile.getId()).setTrashed(true);
      hdnA.forEach(function(name){ss.getSheetByName(name).showSheet();})
      Browser.msgBox("Courriel", mess, Browser.Buttons.OK); 
    }