Bonjour,
J'ai créé un document Google Sheets, que j'appellerai "Devis", qui va servir de "modèle".
Sur mon site web, je mets un lien (bouton) vers ce document, qui au clic a pour but de créer une copie du Devis original et d'ouvrir cette copie dans une nouvelle fenêtre (ou nouvel onglet). Cela passe donc par un script qui crée cette copie de "Devis" et l'ouvre.
N'y connaissant pas grand chose en programmation, j'ai récupéré et ajusté des bouts de code, et cela fonctionne presque :
Au clic sur le bouton de mon site web, cela ouvre une page html avec un bouton qui, lui, crée la copie de mon document et l'ouvre.
Cela n'est pas idéal, car 1) la page html est inutile d'un point de vue utilisateur, 2) elle n'est pas du tout sexy, 3) les temps de réponse sont très (trop longs).
J'aimerais donc ajuster mon code pour :
- Idéalement : créer à copie directement sans passer par cette page html
- Si cela n'est pas possible, faire en sorte que la page html soit juste une redirection (de façon à ce que l'utilisateur n'ait pas à cliquer sur le bouton de la page html)
- Si cela n'est pas possible, afficher une boîte de dialogue au clic sur le bouton de la page html pour informer "chargement en cours" (car actuellement il faut compter 5 secondes après le clic bouton page html avant qu'il se passe quelque chose de façon visible pour l'utilisateur)
Voici mon code actuel (qui mérite sans doute une optimisation) :
Code GS :
Code html (page):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function doGet(e) { return HtmlService.createHtmlOutputFromFile('page');} function fctOpenForm(idForm){ // fonction qui va faire une copie du formulaire pour ensuite l'ouvrir (on préserve ainsi l'original) // 1 - on va chercher en fonction de l'id du formulaire le répertoire où il doit être copié // 1.1 - on "ouvre" le fichier de configuration var ssConfigId="[mon fichier]"; var ssConfig=SpreadsheetApp.openById(ssConfigId); var idForm ="[id de mon fichier]"; // 1.3 - on cherche l'id du répertoire de destination de la copie var idRepDest="[id de mon dossier de destination]"; // 1.4 - on cherche le nom du formulaire var nomForm="Devis"; // 2 - on copie le formulaire var folderDest=DriveApp.getFolderById(idRepDest); var newForm=DriveApp.getFileById(idForm).makeCopy("Nouveau"+nomForm,folderDest); var newFormId=newForm.getId(); return newForm.getUrl() }
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <!DOCTYPE html><html> <body onload='fctOpenFile()'> <h1>mon titre</h1> <button value="[id de mon fichier]" onclick="fctGo(this)">Démarrer mon devis</button> </body> <script> function fctGo(element){ var idForm=element.value; google.script.run.withSuccessHandler(fctOpenByUrl).fctOpenForm(idForm); } function fctOpenByUrl(url){ window.open(url); } </script> </html>
Pouvez-vous m'aider svp ?
Merci d'avance !
Kano
Partager