Domanda Salva PDF in foglio orizzontale su Driver

Babel

Nuovo utente
Original poster
4 Settembre 2022
14
1
3
Google Sheets
Utilizzando il codice qui sotto riesco a salvare il file in PDF in una cartella specifica di Driver però non riesco a farlo salvare in un Foglio orizzontale e adattare la tabella all'intera pagina

Salva in PDF:
function Backup_PDF() {
  const folderName = "Backup_PDF";
  const fileNamePrefix = "Fonogrammi";
  var timeZone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();

  DriveApp.getFoldersByName(folderName)
    .next()
    .createFile(SpreadsheetApp.getActiveSpreadsheet()
                  .getBlob()
                  .getAs("application/pdf")
                  .setName(`${fileNamePrefix} - ${Utilities.formatDate(new Date(), timeZone, `dd/MM/yyyy - HH:mm:ss`)}`)); 
}


Ho trovato quest'altro codice che salva in orizzontale ma solo su allegato email

Salva in PDF orizzontale:
 function creatPDF() {
  SpreadsheetApp.flush();

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  //Date set with format in EST (NYC) used in subject and PDF name
  var period = Utilities.formatDate(new Date(), "GMT+5", "yyyy.MM.dd");
  var url = ss.getUrl();

  //remove the trailing 'edit' from the url
  url = url.replace(/edit$/, '');

  //additional parameters for exporting the sheet as a pdf
  var url_ext = 'export?exportFormat=pdf&format=pdf' + //export as pdf
    //below parameters are optional...
    '&size=letter' + //paper size
    '&portrait=false' + //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
    '&gid=' + sheet.getSheetId(); //the sheet's Id

  var token = ScriptApp.getOAuthToken();

  var response = UrlFetchApp.fetch(url + url_ext, {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });

  var blob = response.getBlob().setName(ss.getName() + " " + period + '.pdf');

  //from here you should be able to use and manipulate the blob to send and email or create a file per usual.
   var email = '[email protected]';
   var subject = "subject line " + period ;
    var body = "Please find attached your Daily Report.";
//Place receipient email between the marks
    MailApp.sendEmail( email, subject, body, {attachments:[blob]});


}
 

Andrea Guerri

Utente assiduo
19 Febbraio 2019
3.314
623
145
www.youtube.com
2021 + G Fogli
Per me hai altri problemi perché lo script funziona benissimo....

Ti allego i due pdf che mi sono inviato tramite il tuo script...uno in verticale e l'altro in orizzontale...così da capire se il risultato fosse stato perché era già impostato così il foglio...
 

Andrea Guerri

Utente assiduo
19 Febbraio 2019
3.314
623
145
www.youtube.com
2021 + G Fogli
Ti ho reso lo script più leggero e leggebile:

Ho messo timeZone per identificare automaticamente la zona di invio dell'email, se ti va bene. Ho tolto qualche riga per semplificarla incorporando alcune variabili.

JavaScript:
function creatPDF() {

  var sheet = ss.getActiveSheet();
  var timeZone = ss.getSpreadsheetTimeZone();
  var period = Utilities.formatDate(new Date(), timeZone, "yyyy.MM.dd");
 
  var url_ext = 'export?exportFormat=pdf&format=pdf' + // export pdf
    '&size=A4' + // paper size
    '&portrait=false' + // true = verticale / false = orizzontale
    '&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
    '&gid=' + sheet.getSheetId(); //the sheet's Id

  var url = ss.getUrl().replace(/edit/, url_ext);
  var token = ScriptApp.getOAuthToken();

  var response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + token
    }
  });

  var blob = response.getBlob().setName(ss.getName() + " " + period + '.pdf');

   var email = '[email protected]';
   var subject = "subject line " + period ;
    var body = "Please find attached your Daily Report.";

    MailApp.sendEmail( email, subject, body, {attachments:[blob]});

}