Archive ou nom dans le Script
Bonjour a tous j'utilise le code ci dessous afin que mes collaborateurs puissent saisir leur journée de travail
A la fin cela leur envoie un mail avec leur contrat
Je souhaiterai savoir si il existe un complément de code afin d'archiver leur contrat en fonction de leur nom de famille dans Google Drive
Ou sinon d'ajouter leur nom de famille dans l'objet du mail afin de créer une règle dans Gmail pour les archiver
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 = "Bonjour, 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 : 'email@gmail.com',
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
}Bonjour,
Oui vous pouvez ajouter un script, qui vérifie si dans un dossier drive il existe un dossier avec le nom, si oui, met le PDF à l'intérieur, sinon, créer le dossier et met le PDF à l'intérieur.
Ce que tu peux faire c'est ajouter quelque chose comme ceci :
let dossierParent = DriveApp.getFolderById('mettre ici l\'ID du dossier parent'); // compléter ici
let nomCollab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('mettre ici CELL nom de famille').getValue() // compléter ici + pour + de sécurité mettre une nom + prénom ?
let dossierCollab = ouvrirDossierParNom(nomCollab, dossierParent);
if (!dossierCollab) {
dossierCollab = dossierParent.createFolder(nomCollab);}
fichier.moveTo(dossierCollab)
function ouvrirDossierParNom(nomCollab, dossierParent) {
var dossiers = dossierParent.getFolders();
while (dossiers.hasNext()) {
var dossier = dossiers.next();
if (dossier.getName() === nomCollab) {
return dossier;}}
return null;
}Bonjour et Merci
Ca crée bien un dossier mais ca n'enregistre pas le PDF dans le Dossier
Aurriez vous une idée ?
Milles Mercis a vous
Bonjour,
Pouvez vous coller ici votre script complet ?
Bonjour Oui bien sur
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 = "Bonjour, 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 : 'email@gmail.com',
attachments: [{
fileName: fichier,
content: reponse.getBytes(),
mimeType: "application/pdf"
}]
});
}
let dossierParent = DriveApp.getFolderById('14uEtdxTmpZfL78JCaBoCrRpD0NolqV6X');
let nomCollab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('B9').getValue() ;
let dossierCollab = ouvrirDossierParNom(nomCollab, dossierParent);
if (!dossierCollab) {
dossierCollab = dossierParent.createFolder(nomCollab);}
fichier.moveTo(dossierCollab)
function ouvrirDossierParNom(nomCollab, dossierParent) {
var dossiers = dossierParent.getFolders();
while (dossiers.hasNext()) {
var dossier = dossiers.next();
if (dossier.getName() === nomCollab) {
return dossier;}}
return null;
}J'ai une erreur en gs:49
la variable fichier est une chaîne de caractère, par un objet fichier, il faut utiliser le blob + il y avais quelques autres petit soucis (mauvais } + attachement) à tester :
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 fichierName = 'Contrat' + "_" + d + ".pdf"
const objet = 'Votre Contrat';
const corps = "Bonjour, 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().setName(fichierName);
// Envoi email avec fichier attaché
GmailApp.sendEmail(email, objet, corps, {
htmlBody: corps,
name : "Votre Contrat",
cc : 'academie.ic.lyon@gmail.com',
attachments: [reponse]
});
let dossierParent = DriveApp.getFolderById('14uEtdxTmpZfL78JCaBoCrRpD0NolqV6X');
let nomCollab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('B9').getValue() ;
let dossierCollab = ouvrirDossierParNom(nomCollab, dossierParent);
if (!dossierCollab) {
dossierCollab = dossierParent.createFolder(nomCollab);}
DriveApp.createFile(reponse).moveTo(dossierCollab);}
function ouvrirDossierParNom(nomCollab, dossierParent) {
var dossiers = dossierParent.getFolders();
while (dossiers.hasNext()) {
var dossier = dossiers.next();
if (dossier.getName() === nomCollab) {
return dossier;}}
return null;
}GENIAL
TOUT SIMPLEMENT GENIAL
MILLES MERCI
Puis je abuser ?
Est il possible que les contrats changent de nom dans le drive en étant classé par Date ?
La date est déjà dans une cellule
Cellule C26
Merci a vous encore Milles fois
Bonjour,
Les fichiers ne comportent-ils pas déjà la date de création dans leur nom ?
const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd")
const fichierName = 'Contrat' + "_" + d + ".pdf"Bonjour
Je sais pas si vous avez une solution du fait ?
Merci
les pro me corrigerons mais je pense avoir une piste a toi de tester
let nomCollab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Contrat').getRange('B9').getValue() ;
ajout ceci avec la ligne
const fichierName = 'Contrat' + "_" + d + nomCollab + ".pdf"
je me demande si ca dois rester une const"ante" et pas plutot une var"iable"
Merci mais ca ne fonctionne pas
J'ai une erreur
Merci d'avoir essayé c'est tellement gentil
quelle erreur imprime écran
Bonjour Oui tout a fait
Mais il s'agit de la date d'enregistrement dans le dossier
Je souhaiterai que cette date soit celle qui est noté dans la colonne H
Si c'est possible


