J'ai écrit une fonction personnalisée [= ROUTEPLAN (origine, destination, mode, departuretime)] dans l'éditeur de script Google Sheets. La fonction attribue un identifiant unique à la requête, appelle l'API Google Maps Directions, transmet en paramètre les arguments listés dans la fonction, analyse le JSON et extrait la durée, la latitude finale et la longitude de fin pour chaque étape du trajet, puis ajoute une ligne pour chaque étape, le numéro d'étape séquentielle, la durée, la latitude de fin et la longitude de fin avec l'ID de la demande pour tout le voyage:Comment appendRow (ou écrire des données plus généralement) à Google Sheets à partir d'une fonction personnalisée
function ROUTEPLAN() {
//Call the google route planner api
//(variables for api declared here but removed for brevity)
var routeResponse = UrlFetchApp.fetch("https://maps.googleapis.com/maps/api/directions/json?origin=" + origin
+ "&destination=" + destination
+ "&mode=" + mode +
"®ion=uk&departure-time=" + departuretime
+ "&key=MYAPIKEY")
//Assign a unique ID to this request
var requestID = Date.now() + Math.random();
//Parse JSON from routeResponse
var json = routeResponse.getContentText();
var data = JSON.parse(json);
//Insert the RequestID, step number, duration, end Latitude and end Longitude for each step of the journey into the RouteDetails sheet
var steps = data["routes"][0]["legs"][0]["steps"];
for (i = 0; i < steps.length; i++) {
var stepID = i + 1;
var duration = steps[i]["duration"]["value"];
var endLat = steps[i]["end_location"]["lat"];
var endLng = steps[i]["end_location"]["lng"];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("RouteDetails")
sheet.appendRow([requestID,stepID,duration,endLat,endLng]);
}
}
Ou du moins ce que je veux faire. Cela a bien fonctionné jusqu'à ce que je le bricole, et maintenant je reçois une erreur quand j'appelle la fonction dans la feuille de calcul, en me disant que je n'ai pas la permission d'appeler appendRow. Je sais pourquoi cela se produit (même si je ne comprends pas pourquoi ça ne se passait pas avant), mais je ne peux pas savoir ce que je suis censé faire à ce sujet. Si appendRow existe, il doit y avoir des circonstances dans lesquelles il peut être utilisé pour écrire des données sur la feuille, mais je ne peux pas comprendre les circonstances dans lesquelles l'autorisation d'écrire sur la feuille serait accordée.
Le but de la feuille est de fournir des données à un chatbot (l'application de chatbot a lu & des permissions d'écriture sur la feuille). Je n'ai pas l'intention de fournir un accès au-delà (c'est-à-dire que je n'ai pas l'intention de le publier pour une utilisation plus large). J'ai essayé de descendre la route de déclenchement installable, mais en dépit de suivre toutes les instructions qui n'ont fait absolument aucune différence pour le résultat. De la compréhension limitée que j'ai acquise en lisant sur API Executables, cela ne semble pas être une option non plus.
Quelqu'un peut-il me dire comment résoudre ce problème? Merci :-)
Sans voir votre code, 'appendRow()' est une méthode 'Sheet', ce qui signifie que vous devez modifier la feuille elle-même, pas les données de la feuille. Publiez du code pertinent et vous aurez plus de chances d'obtenir une réponse. – Brian