2017-01-02 2 views
0

Ich suche ein Problem zu lösen, dass ich in den letzten 2-3 Stunden gearbeitet habe, was ich denke für viele wäre ziemlich einfach. Ich habe die folgende Funktion, die gut funktioniert, wenn auch manchmal etwas langsam.Kombinieren 3 verschiedene Onedit Funktionen in Google Script/Sheet

function onEdit(e) { 
var sheet = e.source.getActiveSheet() 
if (sheet.getName() !== 'Team' || e.range.getA1Notation() !== 'D16') return; 
    e.range.offset(0, 0).getValue() === 'Show' ? sheet.showRows(17, 7) : sheet.hideRows(17, 7) 

Ich habe aber 2 die fast identische Funktionen, die ich zur gleichen Zeit laufen muss. Nämlich

No.2

function onEdit(e) { 
var sheet = e.source.getActiveSheet() 
if (sheet.getName() !== 'Team' || e.range.getA1Notation() !== 'D25') return; 
    e.range.offset(0, 0).getValue() === 'Show' ? sheet.showRows(26, 10) : sheet.hideRows(26, 10) 
} 

No3.

function onEdit(e) { 
var sheet = e.source.getActiveSheet() 
if (sheet.getName() !== 'Team' || e.range.getA1Notation() !== 'D37') return; 
    e.range.offset(0, 0).getValue() === 'Show' ? sheet.showRows(38, 10) : sheet.hideRows(38, 10) 
} 

Was ich versucht seperat alle 3 zum Laufen zu bringen:

  1. einfach alle alle 3 mit unterschiedlichen Funktionsnamen 3
  2. Hinzufügen Hinzufügen
  3. Hinzufügen mehrerer ifs innerhalb des gleichen Code (Funktion) (nicht sicher, ob es richtig gemacht wurde, obwohl es nicht funktioniert hat)
+0

In Bezug auf Nummer 3, fügen Sie bitte ein [mcve]. –

Antwort

2

Sie können auch 'merge' die drei Skripte in einem. Versuchen Sie etwas wie das

function onEdit(e) { 
var sheet, cells, rows, ind; 
sheet = e.source.getActiveSheet(); 
cells = ['D16', 'D25', 'D37']; 
rows = [[17, 7], [26, 10], [38, 10]]; 
ind = cells.indexOf(e.range.getA1Notation()); 
if (sheet.getName() !== 'Team' || ind == -1) return; 
e.value === 'Show' ? sheet.showRows(rows[ind][0], rows[ind][1]) : sheet.hideRows(rows[ind][0], rows[ind][1]) 
} 

und sehen, ob das funktioniert?

+0

dies funktioniert übrigens: D –

0

In Bezug auf 1 und 2

  1. einfach alle 3

den gleichen Namen Das funktioniert nicht, weil die Funktionen Hinzufügen. Nur der letzte wird ausgeführt.

  1. all 3 mit unterschiedlichen Funktionsnamen Hinzufügen Dies könnte funktionieren, aber durch eine einfache auf Bearbeiten Trigger ausgelöst wird, müssen sie durch Funktion mit dem Namen onEdit (e) genannt werden. Beispiel
function onEdit(e){ 
    myFunction1(); 
    myFunction2(); 
    myFunction3(); 
} 
+1

Wenn Sie nicht wissen, welche Funktion zuerst ausgeführt wird, können Sie 3 installierbare Trigger hinzufügen, die alle durch 'onEdit' ausgelöst werden. Ansonsten ist diese Antwort am einfachsten zu implementieren mit dem, was Sie bereits haben. Es scheint auch, dass Sie immer das gleiche '! == 'Team'' haben, aber der einzige Unterschied ist die aktive Zelle. Vielleicht möchten Sie einfach einen 'switch' verwenden, den Sie [hier] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/switch) nachlesen können. – Vytautas

Verwandte Themen