Google App Script - Creation de document en utilisant un template

75 views
Skip to first unread message

Matthieu Verneau

unread,
Apr 20, 2020, 3:32:40 AM4/20/20
to Google Apps Script Community
Bonjour à tous,

J'ai créé un script google app script qui me permet de dupliquer des templates google docs en utilisant les données d'un fichier google sheets. Tout fonctionne parfaitement, cependant j'ai un petit soucis.
Le script créé toujours les templates google docs a partir de la premiere ligne du document google sheets.
Par exemple, si le script a été lancé et a traité 100 lignes du google sheets, lors de la seconde utilisation, il va recréer les 100 premiers templates. Cependant, j'aimerai que le script créé uniquement les templates pour les nouvelles lignes ajoutées au google sheets.

Je ne sais pas si ma demande est claire mais voici le script ci-dessous :

function createDocument() {
  var headers = Sheets.Spreadsheets.Values.get('1tkcP1lA8QKIuAnur7WnGrHiVI1hrXdzRZPwp3ruSjrI', 'A1:I1');
  var tactics = Sheets.Spreadsheets.Values.get('1tkcP1lA8QKIuAnur7WnGrHiVI1hrXdzRZPwp3ruSjrI', 'A2:I1000');
  var templateId = '170TkGYOQCegZWe5ude1ODPewLeyE1HsxasONhsIDY4I';
  
  for(var i = 0; i < tactics.values.length; i++){
    Logger.log(tactics);
    var fpn = tactics.values[i][0];
    var nom = tactics.values[i][1];
    var cp = tactics.values[i][2];
    var tel = tactics.values[i][3];
    var email = tactics.values[i][4];
    var type = tactics.values[i][5];
    var prog = tactics.values[i][6];
    var date = tactics.values[i][7];
    var time = tactics.values[i][8];
    
    var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
    DriveApp.getFileById(documentId).setName('N° ' + fpn + ' ' + nom);
    
    var head = DocumentApp.openById(documentId).getHeader();
    head.replaceText('##FP##', fpn);
    
    var body = DocumentApp.openById(documentId).getBody();
    body.replaceText('##NOM##', nom);
    body.replaceText('##CP##', cp);
    body.replaceText('##EMAIL##', email);
    body.replaceText('##TEL##', tel);
    body.replaceText('##TYPE##', type);
    body.replaceText('##PROG##', prog); 
    body.replaceText('##DATE##', date);
    body.replaceText('##TIME##', time);
  }
  
}

En espérant que quelqu'un puisse me venir en aide.

Cordialement,
Matthieu

Andrew Roberts

unread,
Apr 20, 2020, 5:37:05 AM4/20/20
to google-apps-sc...@googlegroups.com
I think what you need to do is record how many rows were used last time in persistent storage - PropertiesService.DocumentProperties.setProperty('numberOfRows', numberOfNewRows) - and then use that as your starting point in the next run.

--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-apps-script-community/c0d28f65-0c19-4272-8e77-04d516dd6992%40googlegroups.com.

Matthieu Verneau

unread,
Apr 20, 2020, 7:08:31 AM4/20/20
to Google Apps Script Community
Hi Andrew,
Thank you so much for your prompt answer. I'll try this idea.
Do you have any ideas of who and where I need to add this code line ?

And, at the moment, I don't know which rows they are going to have in the document...
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-community+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages