J’ai un fichier sheets qui me permet d’envoyer une feuille en PDF. Par contre lorsque je change d’année, je fait une copie dudit fichier, mais le soucis que j’ai c’est que l’adresse URL du fichier est toujours celle du fichier origine et non celle du fichier actif.
J’aimerai que la ligne située dans mon code s’actualise automatiquement.: const docID = ‹ … ›;
function envoiPDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = ‹ 1UO3KItXuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ›;
const feuilleID = ‹ 1108413420 ›;
J’ai bien un code qui permet de récupérer l’URL complet du document actif,
function getUrl() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
Logger.log(ss.getUrl());
}
et un autre qui permet d’identifier l’ID du document
function getIdFromUrl() {
let ui = SpreadsheetApp. getUi()
let prompt = ui.prompt(« Renseignez l’URL depuis laquelle vous souhaitez récupérer l’identifiant »)
url = prompt.getResponseText()
ui.alert(url.match(/[-\w]{25,}(?!.*[-\w]{25,})/).toString())
}
Mon problème, comment faire pour tout intégrer dans mon code envoiPDF
J’ai un peu avancé. J’ai trouvé une façon de récupérer l’identifiant du fichier et à coller celui-ci dans une cellule.
Par contre comment faire pour ne pas avoir cette étape de manière à avoir directement le résultat
dans le code : function envoiPDF() {,
ligne : const docID =’ ici ’
le code que j’ai réussi à faire:
function getUrl() {
var app = SpreadsheetApp;
var classeur = app.getActiveSpreadsheet();
var feuille = classeur.getActiveSheet();
const cellule = feuille.getRange(‹ A1 ›);
const Cellule2 = feuille.getRange(‹ A2 ›);
var ss = SpreadsheetApp.getActiveSpreadsheet();
cellule.setValue(ss.getUrl());
var url = cellule.getValue();
Cellule2.setValue (url.match(/[-\w]{25,}(?!.*[-\w]{25,})/).toString())
}
Si tu as besoin de récupérer l’ID du fichier auquel ton script est rattaché (désolé si je n’ai pas compris !) tu peux utiliser tout simplement la méthode getId().
Exemple :
let id = SpreadsheetApp.getActive().getId()
Cela te retournera l’ID du Spreadsheet actif
Il y a une manière bien plus simple de récupérer l’ID du Spreadsheet auquel est lié un projet Apps Script. Il suffit tout simplement d’utiliser la fonction getId() de la classe Spreadsheet de SpreadsheetApp. En d’autres termes, changez votre code ainsi :
function envoiPDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
const docID = doc.getId();
const feuilleID = '1108413420';
// reste du code
}
La variable doc contient déjà une instance de la classe Spreadsheet, c’est-à-dire un objet avec des règles et fonctions précises. Elle est obtenue avec SpreadsheetApp.getActive(), équivalente à SpreadsheetApp.getActiveSpreadsheet(), qui retourne, comme son nom l’indique, le classeur lié à votre projet Apps Script sous la forme de cet objet. Il ne reste plus donc qu’à utiliser getId() pour obtenir l’ID, et le tour est joué !
Attention toutefois avec feuilleID, qu’il faut probablement changer aussi. Je conseille de plutôt mettre quelque chose de cette forme :
const feuilleID = doc.getSheetByName(" NOM DE LA FEUILLE VISÉE ").getSheetId()
En mettant le nom de la feuille à exporter au bon endroit, cela permet de garder un code relativement dynamique, pour peu que le nom de la feuille soit bon.
Enfin, si vous vouliez réellement utiliser votre fonction getUrl(), il faudrait changer la fonction pour qu’elle fasse un return, et simplement appeler la fonction et stocker la valeur de retour dans la variable. Par exemple :
function getIdFromUrl(){
// Récupère l’URL du document actif sous la forme d’une chaîne (string)
const docUrl = SpreadsheetApp.getActiveSpreadsheet().getUrl();
// Récupère l’ID du document actif à l’aide d’une regex.
// Attention ! String.prototype.match() renvoie un tableau potentiellement vide, cela peut donc entraîner une erreur en l’état.
const ID = docUrl.match(/[-\w]{25,}(?!.*[-\w]{25,})/)[0]
return ID;
}
function envoiPDF() {
DocumentApp.getActiveDocument();
DriveApp.getFiles();
// variables
const doc = SpreadsheetApp.getActive();
// On appelle la fonction créée précédemment
const docID = getIdFromUrl();
// reste du code
}
Bonjour,
ChristopherH : Merci, je ne connaissais pas cette fonction. J’ai toujours rechercher avec le mot url,
Je vais regarder la doc que tu me suggère.
Oui la fonction getSheetId() correspond exactement à ce que je recherche.
NC Quentin: Merci. Tes solutions sont exactement ce que je recherchais. Tu vas même plus loin avec le nom de la feuille. J’ai intégré cela à mon code final et cela fonctionne à merveille. Aucune ligne supplémentaire dans le code.
Un grand merci à vous deux. Maintenant je vais même pouvoir fournir des copies de fichier sans modification du code d’envoi PDF.
Mon code modifié qui fonctionne: (désolé je n’ai pas trouvé la balise pour mettre les codes, j’ai pris celle de citation).
C’est fantastique de voir comment la résolution collaborative de problèmes peut conduire à des solutions aussi efficaces ! L’intégration de la fonction getSheetId() change la donne pour quiconque cherche à rationaliser son code. Bravo à ChristopherH et NC Quentin pour avoir partagé leurs idées, vos contributions ont vraiment fait la différence !