[google-apps-script] Skript zum Zusammenfassen von nicht aktualisierenden Daten



Answers

eine andere Lösung für das Caching-Problem.

haben Sie eine Dummy-Variable in Ihrer Methode. bestehen

Filter(<the cell or cell range>,1=1)

als Wert für diesen Parameter.

z.B

=getValueScript("B1","B4:Z10", filter(B4:Z10,1=1))

Die Ausgabe des Filters wird nicht verwendet. es zeigt jedoch der Tabelle an, dass diese Formel für den Bereich B4: Z10 empfindlich ist.

Question

Ich habe eine Google-Tabelle mit Zeiterfassungsdaten. Es hat ein Blatt für jeden Monat, jedes Blatt ist eine Menge von sechs Spaltenblöcken, ein Block pro Client.

Ich habe ein Übersichtsblatt erstellt, das die Summe für jeden Kunden erhält und in einer Liste anzeigt:

function getClientTotals(sheetname, colcount)
{  
  colcount = colcount ? colcount : 6;
  var res;      
  var ss = SpreadsheetApp.openById('myid_goes_here');
  if(ss)
  {
    res = [];
    var totrow = ss.getRange(sheetname + '!A1:ZZ1').getValues()[0];
    for(var i = 0; i < totrow.length; i += colcount)
    {
      res.push([totrow[i], totrow[i + colcount - 1]]);
    }
  }   
  return res;
}

Ich habe dann meiner Übersichtsseite, die =getClientTotals($C$7,$C$8) enthält, eine Zelle hinzugefügt, die den =getClientTotals($C$7,$C$8) für den Monat und die Anzahl der Spalten für jeden Client (bei "Schema" =getClientTotals($C$7,$C$8) übergibt.

Das alles funktioniert gut, aber es wird nicht aktualisiert, wenn die Quelldaten geändert werden. Ich habe einen onEdit Trigger hinzugefügt. keine Freude. Es wird aktualisiert, wenn Sie zum Skript-Editor gehen und auf Speichern klicken, aber das ist nicht sinnvoll. Bin ich etwas vermisst?




Sie können eine andere Zelle irgendwo in der Tabelle einrichten, die jedes Mal aktualisiert wird, wenn ein neues Blatt hinzugefügt wird. Stellen Sie sicher, dass es nicht für jede Änderung aktualisiert wird, sondern nur, wenn Sie die Berechnung durchführen möchten (in Ihrem Fall, wenn Sie ein Blatt hinzufügen). Sie übergeben dann den Verweis auf diese Zelle an Ihre benutzerdefinierte Funktion. Wie bereits erwähnt, kann die benutzerdefinierte Funktion diesen Parameter ignorieren.




Wie @ Brionius sagte, setzen Sie ein zusätzliches dinamisches Argument auf die Funktion. Wenn Sie now () verwenden, haben Sie möglicherweise Timeout-Probleme, die das Update ein wenig verlangsamen ...

cell A1 = int(now()*1000)
cell A2 = function(args..., A1)





Related