Le script des applications Google, onChange, ne peut pas transmettre un objet déclencheur à une variable [duplicate]

Dec 28 2020

Ce poste a été fermé, mais je n'ai pas été en mesure de trouver un problème comparable ailleurs.

J'essaie de travailler sur un script qui masquera les lignes d'un déclencheur onChange (). Lorsqu'une cellule devient "0", je veux que la ligne dans laquelle se trouve la cellule devienne masquée. Les commentaires de mon premier message m'ont appris que l'objet transmis par onChange ne contient pas de plage. Existe-t-il une solution de contournement qui résoudrait ce problème?

Ma feuille de calcul a une feuille d'entrée pour le backend et une feuille de sortie pour le frontend qui va au client. J'ai besoin d'un déclencheur onChange, de sorte que lorsque les données sont envoyées au frontend, elles sont bien formées pour être envoyées par courrier électronique au client. Plus important encore, j'ai besoin de masquer les lignes vides ('0).

Je suis nouveau et j'apprends, donc ce que j'ai écrit ne fonctionne pas car les objets onChange n'incluent pas de plage. Merci.

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.range;
  var VALUE = cell.getValue(); 
  if(VALUE == 0){
        sheet.hideRow(cell);
  }
}

J'ai aussi essayé:

function onChange(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Client");
  var cell = e.getValue(); 
  if(cell == 0){
        sheet.hideRow(cell);
  }
}

Réponses

Cooper Dec 28 2020 at 03:57

Aucune valeur de plage n'est renvoyée par un déclencheur onChange. Voici à quoi ressemble l'objet événement.

{"authMode":"FULL","changeType":"INSERT_ROW","source":{},"triggerUid":"","user": {"email":","nickname":""}}

Gardez également à l'esprit que onChange nécessite un déclencheur installable.

Objet d'événement onChange

joshmeranda Dec 28 2020 at 04:00

Il semble que vous ayez les déclencheurs confus. Le déclencheur se déclenche lorsqu'un changement "plus important" ou structurel se produit, plutôt que les valeurs modifiées. À partir de la documentation :onChange onEditonChange

Un déclencheur de modification installable s'exécute lorsqu'un utilisateur modifie lui-même la structure d'une feuille de calcul, par exemple en ajoutant une nouvelle feuille ou en supprimant une colonne.

Vous pouvez voir à partir des spécifications d'objet d'événement qu'aucune valeur n'est transmise au programmeur à partir du onChangedéclencheur et que le type de fonctionnalité que vous recherchez n'est donc pas facile à réaliser.

Vous souhaitez utiliser le onEditdéclencheur qui fonctionnera plus près de ce que vous recherchez. Il se déclenchera sur tout changement de valeur et vous donnera les nouvelles et anciennes valeurs. onEditest également un " déclencheur simple ", il n'est donc pas nécessaire d'installer des déclencheurs supplémentaires comme vous le faites pour onChange.

L'utilisation de onEditvotre code ressemblera à ceci:

function onEdit(e) {
  val range = e.range;
  val sheet = SpreadsheetApp.getActiveSheet();

  if (e.value == 0) {
    var rowNum = e.range.getRow();
    sheet.hideRow(rowNum);
  }
}