1
votes

Lien de script google publié avec Google Sheet renvoyant une variable vide d'impression

Puisque j'ai tendance à me promener, commencez par une version courte et si vous avez besoin de plus d'informations, lisez la longue.

TL; DR

Pourquoi: p>

var jobsCreated = 100;
{"number":100}

renvoyant ceci lorsque j'ai publié en tant que site Web, puis ouvert: {"number":""}

quand cela devrait ressembler davantage à ceci {"number":2451}

Version complète:

Tout d'abord, j'ai appris à programmer à l'université pour mon diplôme d'informatique (il y a 10 ans) mais depuis, je n'ai pas fait beaucoup de programmation donc je Je suis fondamentalement un débutant.

Passons maintenant à la question. J'ai un script très simple créé avec l'éditeur de script de Google Sheets

function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}

D'abord, j'obtiens la feuille sur laquelle je travaille

Ensuite, je sélectionne une cellule de cette feuille

maintenant si j'utilise une msgBox pour m'assurer que j'ai le bon numéro et que j'exécute le script, cela fonctionne et il affiche le message.

ensuite, je formate la variable en JSON et enfin je crée juste une sortie texte.

Maintenant, je déploie en tant qu'application Web

  • Exécuter en tant que ME
  • N'importe qui, même anonyme

Et lorsque j'accède au site Web, je ne peux voir que ceci: {"number": ""} Si je change le code et donne à jobsCreated une valeur statique, cela fonctionne bien

function doGet(e) {

var sheet = SpreadsheetApp.getActiveSheet();

var jobsCreated = sheet.getRange(12,2).getValue();

Browser.msgBox(jobsCreated);

var params = JSON.stringify({number:jobsCreated});

return ContentService.createTextOutput(params);

}

Donc ma conclusion est que le problème est d'accéder à la valeur de la cellule lors de l'exécution du script à partir du lien publié comparé à l'exécuter directement à partir de l'éditeur, mais je n'ai aucune idée de comment résoudre ce problème.

Un peu plus d'informations, j'essaie de l'utiliser pour un compteur appelé Smiirl, j'ai eu la plupart des les informations d'ici https://medium.com/@m_nebra/bootstrapping-your-company- counter-22f5d4bc7dd4


6 commentaires

Avez-vous republié une nouvelle version du script après modification?


2. Supprimez Browser.msgbox et essayez


J'ai republié avec de nouvelles versions, je suis maintenant dans la version numéro 16 avec tous les changements que j'ai essayés, et à propos de Browser.msgbox, je l'ai essayé sans lui aussi. Je ne l'ai mis là que pour vérifier que j'obtenais quelque chose mais ensuite je l'ai testé sans


Essayez console.log (jobsCreated) . Et borel affiche les journaux dans stackdriver. Vous devez enregistrer une nouvelle version (en créer une nouvelle v17), puis la publier. Sinon, essayez simplement l'url / dev


@ITVHR voyez si ma réponse fonctionne pour vous.


@TheMaster j'ai essayé cela et j'ai obtenu les journaux Stackdriver 21 février 2020, 8:58:05 AM Debug 5000 (la valeur de la cellule est 5000)


3 Réponses :


0
votes

essayez ceci:

function doGet(e) {
  return ContentService.createTextOutput(Utilities.formatString('number: %s',SpreadsheetApp.getActiveSheet().getRange(12,2).getValue());

}


1 commentaires

Merci pour la réponse mais cela n'a pas fonctionné. il manquait une parenthèse mais j'ai corrigé cela mais le résultat que j'ai obtenu était un numéro:



0
votes

Votre problème est lié à l'utilisation de JSON.stringify

Dans JSON, les fonctions ne sont pas autorisées en tant que valeurs d'objet. p>

Le JSON La fonction .stringify () omettra ou changera en null toutes les fonctions d'un objet JavaScript.

Cela dit, vous pouvez faire ce qui suit:
function doGet(e){
  
  // Get the value of the range
  var sheet = SpreadsheetApp.getActiveSheet();
  var jobsCreated = sheet.getRange(12,2).getValue();
  
  // JSON Stringify it
  var params = JSON.stringify({"number" : number=jobsCreated});
  
  // Return JSON string
  return ContentService.createTextOutput(params);
  
}

Renvoie:

  • {"number": 123} si jobsCreated est le numéro 123, ou
  • {"number": "Mangos"} si jobsCreated est la chaîne "Mangos".
  • Ul>

    Voir le script déployé ici , et le pour jouer avec.


    Remarque:

    Vous devriez éviter d'utiliser des fonctions en JSON, les fonctions perdront leur portée, et vous devrez utiliser eval () pour les reconvertir en fonctions.



12 commentaires

Tout d'abord merci pour la réponse. Je l'ai essayé et il renvoie le même que l'original.Aussi avec la version originale si j'imprime les paramètres avec le même Browser.msgBox, il montre la chaîne correcte pour les paramètres, c'est juste au moment où j'exécute le script publié qui ne fonctionne pas


Je n'ai aucun problème avec le script déployé


Aussi pour clarifier la raison pour laquelle j'essaie d'obtenir un JSON à la fin est parce que j'essaie de lier cela avec un appareil, un compteur personnalisé de Smiirl qui ne prend que des valeurs sous forme JSON


c'est pourquoi je suis si frustré, car je ne pense pas que je devrais avoir un problème non plus et cela fonctionne bien quand un nombre statique est uniquement lorsque vous utilisez le script publié avec la valeur de la cellule que cela ne fonctionne pas


@ITVHR J'ai laissé des liens vers l'application Web, vous pouvez y jeter un œil, et la feuille + le script


ok encore plus étrange, j'ai créé une nouvelle feuille, donné un numéro à la cellule 1 1 et essayé à nouveau le code indiquant cela, et cela fonctionne ... donc je ne suis pas sûr de ce qui n'allait pas avec l'autre feuille


Avez-vous testé l'application Web que j'ai liée dans la réponse?


Oui, je l'ai vérifié et cela fonctionne bien, il semble que le problème soit lorsque la valeur de la cellule provient d'un module complémentaire (google analytics) que je trouve le problème


Vérifiez la fréquence d'actualisation GA de votre feuille et essayez une vérification booléenne pour ne pas imprimer de valeurs vides


jobsCreated est un nombre. Je ne vois pas comment le problème est dans JSON.stringify. Le script de op devrait fonctionner correctement.


Je n'exécute le rapport qu'une seule fois, je n'ai pas prévu de le rafraîchir, du moins pour le moment. Et je suis très nouveau dans la programmation, à propos de la vérification booléenne parlez-vous de .isBlank ()? si j'imprime simplement la valeur, cela renvoie quelque chose.


oui, Boolean renvoie True ou False, donc isBlank () est une vérification valide. Ok, peut-être, essayez de poser une nouvelle question, en partageant les étapes pour la reproduire



0
votes

Ok comme j'ai répondu à @Aerials, merci encore pour votre aide btw. Voyant d'autres codes qui ne devraient pas fonctionner avec mon script, j'ai décidé de créer une nouvelle feuille et un nouveau script à titre de test et avec exactement le même code que cela fonctionne.

Mais maintenant je vérifie un peu plus, quelque chose que je ne pensais pas que c'était un problème car il obtenait le numéro sans aucun problème. La cellule est remplie par un module complémentaire GoogleAnalytics. Désormais, lors de la configuration du module complémentaire pour obtenir les informations, le script du site Web renvoie à nouveau une valeur vide. Donc, il semble que le problème vient du fait que le script récupère les informations de la feuille (uniquement la version publiée) lorsqu'il est rempli par le module complémentaire


0 commentaires