it-swarm.com.de

Wie ersetzt man eine Formel durch ihr Ergebnis?

Ich habe eine Google-Tabelle erstellt, die aus mehr als 20 Blättern besteht (alle gleich formatiert). Die Firma, für die ich arbeite, lädt Container. Eines dieser Blätter berechnet einen bestimmten Parameter für jedes dieser über 20 Blätter (countifs Formel) und gibt mir einen Gesamtwert für die Anzahl der Container, die an diesem Tag geladen wurden. Angenommen, am 20.11.14 haben wir 5 Container auf Blatt 1, Blatt 2 = 6 Container, Blatt 3 = 7 Container usw. geladen. Es wird berechnet, wie viele Container insgesamt am 20.11.14 geladen wurden. 14 und spucke eine Nummer aus. Bis zu diesem Teil bin ich OK.

Das Problem ist, dass diese Blätter gelöscht und wiederverwendet werden müssen, sobald das Laden auf einem Blatt abgeschlossen ist. Dies bedeutet, dass beim Verarbeiten und Löschen eines Bogens alle Werte, die mit dem oben genannten Parameter verknüpft sind, entfernt werden. Wenn also mein Gesamtwert 20 Container beträgt, die am 20.11.14 geladen wurden, und ich 5 Container auf Blatt 1 lösche, wird mein Wert auf 15 Container gesenkt. In Wirklichkeit waren es 20.

Ich habe versucht, den Endwert zu Beginn des nächsten Tages zu kopieren und einzufügen, bevor ein Blatt verarbeitet und gelöscht wird. Manchmal kommt es jedoch zu einer Synchronisierung, wenn ein Blatt vor Beginn des nächsten Tages verarbeitet und gelöscht wird.

Gibt es eine Möglichkeit, einen Wert automatisch nach "Heute" setzen zu lassen und nicht mehr mit der Formel verknüpft zu werden?

Wieder mit Google Spreadsheet arbeiten. Ich benötige schrittweise Hilfe bei der Implementierung eines Skripts, wenn dies die Antwort ist.

6
Edward

Um die Formelausgabe auf einem Zusammenfassungsblatt mit einem Skript "einzufrieren", können Sie die Methode copyTo mit der Option contentsOnly:true verwenden. Dies kann verwendet werden, um die Werte an eine andere Stelle oder in genau dieselben Zellen zu kopieren (wodurch die Formeln mit ihrer Ausgabe überschrieben werden). Hier ist ein einfaches Skript, das dies für die Zellen A1: A10 des Blattes "SummarySheet" ausführt.

Damit ein solcher Prozess regelmäßig ausgeführt werden kann, müssen Sie entscheiden, welche Zellen an jedem Tag eingefroren werden müssen. Dies ist etwas Besonderes für ein bestimmtes Arbeitsblatt.

function freezeOutput(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SummarySheet");
  var range = sheet.getRange("A1:A10");     
  range.copyTo(range, {contentsOnly:true});
}
5
user79865
function RunReplaceInSheet(){
    var sheet = SpreadsheetApp.getActiveSheet()
    replaceInSheet(sheet,"'§'","");
}

function replaceInSheet(sheet, to_replace, replace_with) {
  //get the current data range values as an array
  var values = sheet.getDataRange().getValues();

  //loop over the rows in the array
  for(var row in values){

    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value){
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }

  //write the updated values to the sheet
  sheet.getDataRange().setValues(values);
}
1
Zs András