2016-12-01 3 views
1

Ich habe diesen Code, der Daten in ein Formular eingegeben analysiert, wie es in die verknüpfte Tabelle eingefügt wird. Ich habe auch einen Teil am Ende, um eine Zelle auf einen bestimmten Wert auf Formular senden zu setzen. Jede Formel oder bedingte Formatierung, die ich in der Zeile hatte, in der die Eingabe eingegeben wurde, wird jedoch gelöscht. Zum Beispiel habe ich eine Farbkodierung für die Zelle, die den oben erwähnten spezifischen Wert erhält. Aber wenn ich mir den bedingten Formatierungsabschnitt meines Blattes anschaue, wird der Wertebereich nach unten verschoben. ZB: Original I2: I50; Post-Submission I3: I51Google Formular/Blatt Skript löscht Formeln, bedingte Formatierung in Zeile

Es gibt eine Formel, die ich einige Berechnungen durchführen muss, die auch vollständig gelöscht wird. Hier ist mein Skript:

function onSubmit(e) { 
    Logger.log("onSubmit() called with data:"); 
    Logger.log(e); 

    var category = e.namedValues[ 'Location' ]; 
    Logger.log("category from onSubmit is " + category); 
    Logger.log("range in sheet was:" + e.range.getA1Notation()); 

    var rowNum = e.range.getRow(); 
    Logger.log("row in range in sheet was " + rowNum); 

    var columnNum = 3; 
    Logger.log("last column in range in sheet was " + columnNum); 

    var pieces = category.toString().split(" > "); 
    Logger.log("split up category: "); 
    Logger.log(pieces); 


    var arrayLength = pieces.length; 
    for (var i = 0; i < arrayLength; i++) { 

    var targetColumnNum = columnNum + i; 

    Logger.log("target Column " + targetColumnNum); 
    Logger.log("setting row " + rowNum + " Column " + targetColumnNum + " to value " + pieces[i]); 

    SpreadsheetApp.getActiveSheet().getRange(rowNum, targetColumnNum).setValue(pieces[i]); 

    } 
    targetColumnNum = 9; 
    SpreadsheetApp.getActiveSheet().getRange(rowNum, targetColumnNum).setValue("(1)Open"); 
} 

Gibt es etwas, wie die for-Schleife arbeitet, dass es klar, alle die bedingte Formatierung und Formeln aus anderen Zellen in der Reihe machen würde?

Antwort

0

Jedes Mal, wenn Daten über das Formular gesendet werden, wird eine neue Zeile in das Blatt eingefügt (unter der neuesten Vorlage), und die Daten werden in dieser neuen Zeile platziert. Aus diesem Grund haben Sie keine Formatierung oder Formeln in dieser Zeile.

Hier sind einige Möglichkeiten, diesen Effekt zu bekämpfen: 1-2 sind alternative Möglichkeiten, um Formeln zu erhalten, 3-4 Formatierung.

  1. Haben sie eine arrayformula, die die Berechnung für die gesamte Spalte behandelt (die Logik Ihrer Formel vorausgesetzt, kann auf diese Art und Weise ausgedrückt werden).
  2. Verwenden Sie setFormula in onSubmit, um die Formel in jede neue Zeile mit übermittelten Daten einzufügen.
  3. Kopieren Sie die bedingte Formatierung von, sagen wir, der oberen Reihe des Blattes auf die neue Reihe: zum Beispiel

    var range = sheet.getRange("A1:Z1"); 
    range.copyTo(newRow, {formatOnly: true}); 
    
  4. Format Zellen direkt durch das Skript, setBackground auf der Grundlage der vorgelegten Werten.

+0

5. Legen Sie die bedingte Formatierung auf einen Bereich fest, der die erste und letzte Zeile im Blatt enthält. Da die Zeile eingefügt wird, sollte sie immer noch die bedingte Formatierung erhalten. Zumindest war dies meine Erfahrung, aber zugegebenermaßen betrafen die Bedingungen in meinem Fall alle Zellen, die über die eingereichten Daten hinausgingen, die später auf einen Wert gesetzt wurden, der den Bedingungen für die Formatierung entsprach. –

Verwandte Themen