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

image

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 ils apparaissent ainsi dans le drive

image

Si ce n'est pas possible ce n'est pas bien grave

C'est déjà super que je puisse les archiver

Merci

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

Merci a vous

image

Bonjour,

Vous avez déclaré 2 fois la même variable (c'est ce que dit l'erreur), il faut remplacer la variable pas en faire nous nouvelle.(ligne 12 / ligne 40) mais je ne comprends toujours pas votre problem de date vu que la date est bien dans le nom du fichier

image

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

Rechercher des sujets similaires à "archive nom script"