Script dupliquer/exporter feuille Google Sheets

Bonjour,

Je cherche à dupliquer puis exporter à l'aide d'un script l'onglet "COMPOS" de ce fichier https://docs.google.com/spreadsheets/d/1wHfuzQUJVDFlYgVgR1HKNFXzjqpDqaKX-X5i35dpJG8/edit#gid=0.

Cependant je ne trouve pas de script.

Vous serait-il possible de m'aider?

Cordialement,

Bonjour,

J'ai une bibliothèque de script préétabli.

Vous souhaitez générer un nouveau fichier sheet ? Un PDF dans le drive ? Un PDF par mail ?

Bonjour,

Alors pour générer une copie dans le même sheet j'ai trouvé.

L'idéal serait que je puisse trouver un script créant une copie PDF qui s'envoi à une adresse mail (avec possibilité de renommer le fichier ce serait l'idéal).

Cordialement,

Et voici :

function savePDF()
{
// Selection de la feuille à PDFiser
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

//générer URL de la feuille
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();

    var url = ssUrl.replace(/\/edit.*$/,'') // ici sont indiquées les caractéristiques de l'impression PDF, il necessite d'adapter les marges, orientation en fonction de vos données.
      + '/export?exportformat=pdf&format=pdf'
      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=-0.95'
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;

  // Création du nom du PDF, dans mon cas une cellule située en A6, vous pouvez y mettre un nom directement, ou bien un autre celulle.
  var docName =  sheet.getRange('A6').getValue();
// CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf').setName(docName);
  var file = DriveApp.createFile(pdf);

  // enregistrement du PDF dans le Drive
  var folder = DriveApp.getFolderById(""LnGXbBWbQNhngfbgfbgf545o5"");/* 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();

  // Envoi du PDF par mail
  var demandeurEmail = sheet.getRange('F5').getValue(); /* ici l'adresse mail de mon destinataire se situe dans une cellule, il est possible de changer directement l'information, ou de mettre une autre cellule */
  var message = ""Bonjour""+""<p>Ci-joint le ""+docName+""</p>""+""<a href='""+docUrl+""'>Cliquez ici pour ouvrir le recap.</a>""; // texte du mail
MailApp.sendEmail({to:demandeurEmail , subject: """"+docName, htmlBody:message}) ;

 // facultatif, cela sert à confirmer à l'utilisateur que le mail à  bien été envoyé
 var demandeur = ""Prénom NOM""; // nom du destinataire
 var ui = SpreadsheetApp.getUi(); 
 ui.alert(""Le ""+ docName +"" a bien été créé\n et été envoyé à ""+ demandeur +"" "");
}
}"

Incroyable merci !

Je débute dans le domaine du coup j'aurais bien voulu un petit coup de main pour remplir le code avec mes éléments.

J'ai encore un peu de mal à le lire.

Cordialement

Alors pour le coup il est relativement bien commenté, je ne peux pas plus mâcher le travail.

2 solutions :

- se former au script : https://www.sheets-pratique.com/fr/apps-script/introduction

- envoie le code à chatGPT et demande-lui de t'aider à l'adapter à ton fichier

image

Bonjour,

Du coup j'ai pu remplir le nécessaire et mettre l'adresse mail souhaitée en F5.

Mais j'ai encore la ligne 36 en erreur. Pourriez-vous m'aider?

Bonjour,

en commentaire j'ai indiqué qu'il faut mettre l'adresse d'un fichier Drive, voici l'élément à copier, à partir de votre dossier Drive cible :

image 2019 02 14 at 11 16 51 am

Bonjour,

Je vous remercie pour votre retour, c'est bien ce que j'avais fait cependant la ligne 36 reste en erreur.

image image

Il y a 4 guillemets, il en faut 2.

Le script que je vous ai transmis avec des guillemets en double, sans doute, car copié de Google Sheet... voici ci-dessous le script "nettoyé"

Concernant l'adresse mail si vous souhaitez la mettre directement dans le script et pas sur votre fichier, vous pouvez remplacer ceci :

 var demandeurEmail = sheet.getRange('F5').getValue();

Par ceci :

 var demandeurEmail = "adressebidon@gmail.com";
function savePDF()
{
// Selection de la feuille à PDFiser
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

//générer URL de la feuille
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();

    var url = ssUrl.replace(/\/edit.*$/,'') // ici sont indiquées les caractéristiques de l'impression PDF, il necessite d'adapter les marges, orientation en fonction de vos données.
      + '/export?exportformat=pdf&format=pdf'
      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=-0.95'
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;

  // Création du nom du PDF, dans mon cas une cellule située en A6, vous pouvez y mettre un nom directement, ou bien un autre celulle.
  var docName =  sheet.getRange('A6').getValue();
// CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf').setName(docName);
  var file = DriveApp.createFile(pdf);

  // enregistrement du PDF dans le Drive
  var folder = DriveApp.getFolderById("17LmzDdzPpHzt_4rufGLnGXbWbQNo5");/* 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 : 0AGuVh09TP00Uk9VA */
  var finalFile = file.moveTo(folder);
  var docUrl = finalFile.getUrl();

  // Envoi du PDF par mail
  var demandeurEmail = sheet.getRange('F5').getValue(); /* ici l'adresse mail de mon destinataire se situe dans une cellule, il est possible de changer directement l'information, ou de mettre une autre cellule */
  var message = "Bonjour"+"<p>Ci-joint le "+docName+"</p>"+"<a href='"+docUrl+"'>Cliquez ici pour ouvrir le recap.</a>"; // texte du mail
MailApp.sendEmail({to:demandeurEmail , subject: ""+docName, htmlBody:message}) ;

 // facultatif, cela sert à confirmer à l'utilisateur que le mail à  bien été envoyé
 var demandeur = "Prénom NOM"; // nom du destinataire
 var ui = SpreadsheetApp.getUi(); 
 ui.alert("Le "+ docName +" a bien été créé\n et été envoyé à "+ demandeur +" ");
}
}

Au top je n'ai plus d'erreur !

Par contre j'ai voulu l'exécuter dans la foulée mais j'ai un message d'erreur :

image

J'ai essayé autrement en affectant le script à un bouton et le message est le même.

J'ai bien modifié en renseignant le nom de l'onglet concerné.

image

J'en profite pour vous demander une dernière modification.

Est-il possible de cibler l'envoi en PDF à une plage donnée et non à l'entièreté de la feuille?

Pouvez-vous copier votre script ?

Et voici.

function savePDF()
{
// Selection de la feuille à PDFiser
  var ss = SpreadsheetApp.getActiveSpreadsheet(FEUILLETEST);
  var sheet = ss.getActiveSheet();

//générer URL de la feuille
    var ssUrl = ss.getUrl();
    var sheetId= sheet.getSheetId();

    var url = ssUrl.replace(/\/edit.*$/,'') // ici sont indiquées les caractéristiques de l'impression PDF, il necessite d'adapter les marges, orientation en fonction de vos données.
      + '/export?exportformat=pdf&format=pdf'
      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=-0.95'
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;

  // Création du nom du PDF, dans mon cas une cellule située en A6, vous pouvez y mettre un nom directement, ou bien un autre celulle.
  var docName =  sheet.getRange('A6').getValue();
// CRÉER LE PDF A PARTIR DE L'URL
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getAs('application/pdf').setName(docName);
  var file = DriveApp.createFile(pdf);

  // enregistrement du PDF dans le Drive
  var folder = DriveApp.getFolderById("1ozAF9xhE24hq_9soMgExLn0g151nc7cG");/* 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 : 0AGuVh09TP00Uk9VA */
  var finalFile = file.moveTo(folder);
  var docUrl = finalFile.getUrl();

  // Envoi du PDF par mail
 var demandeurEmail = "martin.verniers@gmail.com";
  var message = "Bonjour"+"<p>Ci-joint le "+docName+"</p>"+"<a href='"+docUrl+"'>Cliquez ici pour ouvrir le recap.</a>"; // texte du mail
MailApp.sendEmail({to:demandeurEmail , subject: ""+docName, htmlBody:message}) ;

 // facultatif, cela sert à confirmer à l'utilisateur que le mail à  bien été envoyé
 var demandeur = "Prénom NOM"; // nom du destinataire
 var ui = SpreadsheetApp.getUi(); 
 ui.alert("Le "+ docName +" a bien été créé\n et été envoyé à "+ demandeur +" ");
}

Il ne faut rien écrire entre parenthèse dans la ligne 4 :

  var ss = SpreadsheetApp.getActiveSpreadsheet();

Bien vu..

Du coup c'est bon j'ai reçu la copie pdf par mail c'est parfait.

Il me faut juste mettre à l'échelle, je vais me débrouiller.

image

Est-ce possible d'envoyer une plage de la feuille ou c'est obligatoirement fiche complete?

Pour modifier la plage d'impression c'est dans cette partie :

      + '&size=A4'
      + '&portrait=true'
      + '&fitw=true'
      + '&top_margin=-0.95'
      + '&bottom_margin=0.50'          
      + '&left_margin=0.50'             
      + '&right_margin=0.50'           
      + '&sheetnames=false'
      + '&printtitle=false'
      + '&pagenum=false'
      + '&gridlines=false'
      + '&fzr=FALSE'
      + '&gid='+sheetId;

Il est possible d'envoyer qu'une partie mais c'est un autre script.

Je vais modifier tout ça pour avoir le bon format.

Ah mince.. Ce script ne peut pas être ajouté à celui-ci?

Je me débrouillerai sans si ce n'est pas envisageable

J'ai trouvé comment modifier la marge haut/bas/gauche/droite cependant comment puis modifié le format pour que les cellules aient, sur le pdf, plus ou moins le format qu'elles ont dans le fichier afin que ce soit lisible?

Il a énormement de colonnes je prend que c'est cela qui complexifie le bon format de l'extraction.

Voir ci-dessous c'est la partie qui m'intéresse principalement.

image
Rechercher des sujets similaires à "script dupliquer exporter feuille google sheets"