Page 1 sur 1

Fichier PDF endommagé à la lecture

Publié : 06 févr. 2024 20:25
par S C transcontinental
Bonsoir à tous, 

mon code est le suivant :

function exportAndSendPDF() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TABLEAU ETAT DE STOCK");
  var range = sheet.getActiveRange();
  var values = range.getValues();
  var dataString = values.toString();
  var blob = Utilities.newBlob(dataString, "application/pdf");
  var date = new Date();
  var year = date.getFullYear();
  var month = String(date.getMonth() + 1).padStart(2, '0'); // Zero-pad for consistency
  var day = String(date.getDate()).padStart(2, '0');
  var fileName = 'ETAT DE STOCK' + year + month + day + '.pdf';
  // Create the file with correct argument order:
  var file = DriveApp.createFile(fileName, blob); // Pass fileName first, then blob
  // Envoyer l'e-mail
  var message = 'Votre fichier PDF est joint à cet e-mail.';
  MailApp.sendEmail('*********@gmail.com', 'Sujet de l\'e-mail', message, {
    attachments: [file]
  });
}

il marche parfaitement, il enregistre le fichier pdf dans drive, il envoie l'email, mais à la reception le fichier est endommagé et ne s'ouvre pas.

veuillez me corriger ce code .

merci
 

Re: Fichier PDF endommagé à la lecture

Publié : 06 févr. 2024 21:43
par Thierry
Hello

Juste choqué par cette phrase : veuillez me corriger ce code .
Ici c'est un forum gratuit. Est ce qu'un minimum de politesse ne serait pas un peu plus sympa à destination des personnes qui vont te lire et te répondre ?
Même avec Chat GPT je suis plus poli.Le problème que vous rencontrez est probablement dû à la manière dont vous créez le fichier PDF. Dans votre script, vous convertissez les données de votre feuille de calcul en une chaîne de caractères, puis vous créez un blob à partir de cette chaîne en spécifiant le type MIME comme

Code : Tout sélectionner

application/pdf
. Cependant, cette approche ne convertit pas réellement vos données en un format PDF valide. Au lieu de cela, elle crée simplement un fichier avec l'extension

Code : Tout sélectionner

.pdf
contenant les données textuelles, d'où l'erreur d'ouverture du fichier comme un PDF valide.Pour générer un PDF à partir d'une feuille de calcul Google Sheets et l'envoyer par email, vous devez d'abord exporter la feuille au format PDF en utilisant les fonctionnalités d'exportation de Google Sheets, puis attacher ce fichier PDF à votre email. Voici une approche corrigée pour votre fonction :function exportAndSendPDF() {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("TABLEAU ETAT DE STOCK");
  var url = spreadsheet.getUrl().replace(/edit$/, '') + 'export?exportFormat=pdf&format=pdf' +
            '&size=letter' + // Taille du papier
            '&portrait=true' + // Orientation du papier
            '&fitw=true' + // Largeur de page ajustée
            '&sheetnames=false&printtitle=false' + // Options d'en-tête
            '&pagenumbers=false&gridlines=false' + // Options de pied de page
            '&fzr=false' + // Répéter les lignes gelées
            '&gid=' + sheet.getSheetId(); // ID de la feuille spécifique à exporter

  var options = {
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    },
    muteHttpExceptions: true
  };

  var response = UrlFetchApp.fetch(url, options);
  var blob = response.getBlob().setName('ETAT DE STOCK' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMdd") + '.pdf');

  // Enregistrement du fichier dans Google Drive (facultatif)
  var file = DriveApp.createFile(blob);

  // Envoyer l'e-mail
  var message = 'Votre fichier PDF est joint à cet e-mail.';
  MailApp.sendEmail('*********@gmail.com', 'Sujet de l\'e-mail', message, {
    attachments: [blob]
  });
}



Cette version modifiée de votre fonction utilise

Code : Tout sélectionner

UrlFetchApp
pour appeler l'URL d'exportation de Google Sheets qui génère le PDF. L'URL est construite avec les options d'exportation pour personnaliser la sortie PDF selon vos besoins (taille du papier, orientation, etc.). Le jeton d'autorisation OAuth est utilisé pour l'authentification. La réponse de

Code : Tout sélectionner

UrlFetchApp.fetch
est un blob PDF que vous pouvez ensuite envoyer par email.Notez que vous devez remplacer

Code : Tout sélectionner

'*********@gmail.com'
par l'adresse email du destinataire. Assurez-vous également que les autorisations nécessaires sont accordées à votre script pour exécuter

Code : Tout sélectionner

UrlFetchApp
et envoyer des emails.

----

PS : évite un ça marche pas, ça me ferait super plaisir vu le temps passé ;-)

 

Re: Fichier PDF endommagé à la lecture

Publié : 07 févr. 2024 20:36
par S C transcontinental
Je vous remercie infiniment pour votre aide précieuse. Je suis profondément désolé(e) si ma phrase "veuillez me corriger ce code" vous a offensé. Je n'avais aucune intention de vous manquer de respect et je vous prie de bien vouloir me pardonner.

Re: Fichier PDF endommagé à la lecture

Publié : 08 févr. 2024 21:47
par Thierry
Bon je te pardonne 😂
Sinon ça fonctionne bien ?