Sauvegarde Lien Drive
Bonjour j'ai
créé une application par Appsheet et les personnes rentrent leur heures de présence
Cela me crée un "contrat" sur Sheet et sur appscript j'envoie automatiquement par un script leur contrat
Voici le Script
function envoiCopieFeuillePDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = '1Xwhn7zQWKev5IzX2R5FgFcMdoJzAWCNZYMri3rGfQzc';
const feuilleID = '663218714';
var email = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('A58').getValue()
const dossier = DriveApp.getFolderById('1Xwhn7zQWKev5IzX2R5FgFcMdoJzAWCNZYMri3rGfQzc');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = 'Contrat' + "_" + d + ".pdf"
const objet = 'Votre Contrat';
const corps = "Veuillez trouver ci joint Votre Contrat";
// 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=true' + // 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,
name : "Votre Contrat",
cc : 'je cache les contacts lol',
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
}
Maintenant je souhaiterai aller plus loin... mais surtout ajouter un lien de téléchargement de leur contrat dans sheet
Je me doute qu'il faut créer une sauvegarde et faire un renvoie de cette sauvegarde du drive sur le sheet
Je souhaiterais que comme sur cette capture de video ca me permette de télécharger leur contrat
Merci de votre Aide
Bonjour,
Il vous faut trouver l'ID du dossier Google Drive où vous souhaitez les stocker
Puis vous pouvez ajouter le code suivant :
var token = ScriptApp.getOAuthToken();
var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' + token } });
var pdf = docurl.getAs('application/pdf').setName(fichier);
var file = DriveApp.createFile(pdf);
var folder = DriveApp.getFolderById("17LmzDRdzPpH3zt_4rufGLnGXbBWbQNo5");/* Important ! > Ici on doit mettre l'adresse du dossier drive où on veut sauvegarder le PDF, allez dans votre dossier et dans la barre d'URL en haut copier le code qui ressemble à ça : 0AGuVhN09TP00Uk9PVA */
var finalFile = file.moveTo(folder);
var docUrl = finalFile.getUrl();
La variable docURL contient la nouvelle URL de votre fichier, vous pouvez ensuite l'inserer dans votre fichier.
Merci pour votre réponse
J'ai insérer le code mais j'ai une erreur
ReferenceError: Cannot access 'url' before initialization
Pourriez vous me guider?
Merci milles fois
Bonjour,
Pouvez-vous noter votre code complet ?
Bien Sur
Merci a vous
function envoiCopieFeuillePDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = '1Xwhn7zQWKev5IzX2R5FgFcMdoJzAWCNZYMri3rGfQzc';
const feuilleID = '663218714';
var email = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('A58').getValue()
const dossier = DriveApp.getFolderById('1Xwhn7zQWKev5IzX2R5FgFcMdoJzAWCNZYMri3rGfQzc');
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichier = 'Contrat' + "_" + d + ".pdf"
const objet = 'Votre Contrat';
const corps = "Veuillez trouver ci joint Votre Contrat";
// 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=true' + // 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,
name : "Votre Contrat",
cc : 'academie.ic.lyon@gmail.com',
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
}
Bonjour,
J'ai fais le test de mon côté, j'ai mis dans la variable docID l'iD du fichier sheet.
J'ai changé la ligne : const feuilleID = '663218714';
par const feuilleID = doc.getSheetId();
J'ai bien mis un ID de dossier dans la variable dossier
J'ai retiré le mail en cc
Tout semble fonctionner, le mail est bien envoyé avec la PJ.
Bonjour,
Vous pouvez faire une nouvelle variable qui correspond au lien :
const lienUrl = 'https://docs.google.com/spreadsheets/d/' + docID
Par contre, comment savoir quel url correspond à qui dans votre tableau ?