Adaptation script
Bonjour,
J'aurais besoin de votre aide ( je suis débutant) sur un script qui fonctionne mais que j'ai besoin d adapter
function envoiCopieFeuillePDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = '________mettre_ici_l_ID___du___fichier_____________';
const feuilleID = '__ID_feuille__';
const email = '___email_destinataire____;
const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = '____nom___du___fichier____suivi_ici_de_sa_date____________' + "_" + d + ".pdf"
const objet = 'Test pdf';
const corps = "Veuillez trouver ci-joint ...";
// Création du fichier pdf
const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
const exportOptions =
'exportFormat=pdf&format=pdf' +
'&size=A4' +
'&portrait=true' + // orientation portrait, false pour paysage
'&fitw=false' + // pas d'ajustement en largeur
'&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
'&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
'&fzr=false' + // frozen rows = pas de répétition de l'en-tête
'&gid=' + feuilleID;
var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
// Envoi email avec fichier attaché
GmailApp.sendEmail(email, objet, corps, {
htmlBody: corps,
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
// Sauvegarde du fichier.
dossier.createFile(reponse.setName(fichier));
}
question 1 :
sur cette ligne
const fichier = '____nom___du___fichier____suivi_ici_de_sa_date____________' + "_" + d + ".pdf"
comment faire pour que le nom du fichier soit
"nom de la cellule Q6" _demande de reservation_nom de la cellule K7 + date
question 2 :
lors de la generation du document je ne voudrais pas que l integralité de ma feuille s' imprimer ( elle comporte 12 pages ) mais que seule les pages 1, 2 et 3 s imprime dans le PDF
Merci infiniment de votre aide
une petite aide svp ?
Merci
Bonjour,
Pour ta première question, remplace dans ton code :
// variables
const doc = SpreadsheetApp.getActive();
const docID = '________mettre_ici_l_ID___du___fichier_____________';
const feuilleID = '__ID_feuille__';
const email = '___email_destinataire____';
const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = '____nom___du___fichier____suivi_ici_de_sa_date____________' + "_" + d + ".pdf"
const objet = 'Test pdf';
const corps = "Veuillez trouver ci-joint ...";
Par :
// variables
const docID = '________mettre_ici_l_ID___du___fichier_____________';
const doc = SpreadsheetApp.openById(docID);
const feuilleID = 'ID_feuille_AU_FORMAT_NUMERIQUE'; // => donc par exemple 123456 et non '123456'
const feuille = doc.getSheets().reduce((a, v) => v.getSheetId() === feuilleID ? v : a);
const email = '___email_destinataire____';
const dossier = DriveApp.getFolderById('__________ID_du_dossier______________');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = feuille.getRange('Q6').getValue() + '_' + feuille.getRange('K7').getValue() + "_" + d + ".pdf"
const objet = 'Test pdf';
const corps = "Veuillez trouver ci-joint ...";
Pour ta seconde question, une solution serait peut-être de dédier une feuille aux exports PDF (une feuille qui afficherait seulement les 3 pages de données utiles).
Cordialement,
Bonjour Sebastien
Merci beaucoup d avoir répondu
toutefois j'ai cette erreur
" 18:27:18ErreurReferenceError: feuille is not definedenvoiCopieFeuillePDF@ macros.gs:11"
il est indiqué ceci
const feuilleID = 'ID_feuille_AU_FORMAT_NUMERIQUE'; // => donc par exemple 123456 et non '123456'
ma feuilleID est 1969076758
que je note
const feuilleID = '1969076758';
ou
const feuilleID = 1969076758;
l erreur se produit ?
je comprend pas
et y a t il une fonction comme celle ci
'&fitw=false' + // pas d'ajustement en largeur
mais pour faire un ajustement en hauteur de la page ?
Merci beaucoup
Comme ça :
ou
const feuilleID = 1969076758;
Pour ton bug, vérifie si tu n'as aucune erreur dans le code (notamment l'ID du document et celui de la feuille).
De mon côté j'avais testé le bout de code fourni et j'avais bien obtenu le nom de fichier correct
Cette erreur signifie que la feuille n'a pas été récupérée et donc tu ne peux pas accéder aux cellules Q6 et K7.
Et puisque feuille
n'est pas définie, ça va déclencher l'erreur à la ligne const fichier
puisque tu vas tenter d'obtenir des données de cette feuille, mais l'erreur n'est pas sur cette ligne, elle est avant cette ligne (d'où ma remarque par rapport aux IDs à vérifier).
Bonsoir Sebastien,
désolé de répondre que maintenant, mais des imprévus m ont éloigné de l ordi
j'ai beau regarder
ma feuille a le bon numero
les cellules ont bien les éléments
Je comprends pas le bug
Essaie avec ces IDs pour tester avec un autre document :
1RwHe88l22jD1fzn1DQLfeyYCgofBWV9MBGSSjvPaFyY
1695694195
voilà ce que j'ai
function envoiCopieFeuillePDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = '1RwHe88l22jD1fzn1DQLfeyYCgofBWV9MBGSSjvPaFyY';
const feuilleID = '1695694195';
const email = 'dupont@duont.fr';
const dossier = DriveApp.getFolderById('1hVoMG6CWeHIknhj0h5pHD9-n_HFFwP_5');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = feuille.getRange('Q6').getValue() + 'demande reservation test2' + feuille.getRange('K7').getValue() + "_" + d + ".pdf"
const objet = 'Test pdf';
const corps = "Veuillez trouver ci-joint ...";
// Création du fichier pdf
const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
const exportOptions =
'exportFormat=pdf&format=pdf' +
'&size=A4' +
'&portrait=true' + // orientation portrait, false pour paysage
'&fitw=false' + // pas d'ajustement en largeur
'&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
'&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
'&fzr=false' + // frozen rows = pas de répétition de l'en-tête
'&gid=' + feuilleID;
var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();
// Envoi email avec fichier attaché
GmailApp.sendEmail(email, objet, corps, {
htmlBody: corps,
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
// Sauvegarde du fichier.
dossier.createFile(reponse.setName(fichier));
}
ca bug
20:12:28AvisExécution démarrée
20:12:29ErreurReferenceError: feuille is not definedenvoiCopieFeuillePDF@ Code.gs:12
C'est normal que tu aies une erreur à propos de feuille
puisque tu n'as pas mis la ligne const feuille = ...
, et ce n'est pas le seul problème ...
Commence par remplacer ENTIEREMENT le bloc de code (comme indiqué) par celui que j'avais mis du temps à écrire pour toi sinon effectivement ça ne fonctionnera pas.
excuse moi infiniment avec tout ca je me suis emmele les pinceaux
ca fonctionne
UN GRAND MERCI et toutes mes excuses encore pour mes merdouilles