2017-12-16 3 views
0

Ist es möglich, mit dieser Art von Code, der Werte in mehreren Zellen setzt, zu verbessern?Vereinfachen Sie einen Apps Script-Code für Google Sheet für mehrere .getRange(). SetValue()

var depart = ligne.filter(String).length; 
    if (depart < 27) { 
     var partence = depart + 2 
    } else { 
     var partence = depart + 13 
    } 

    commande.getRange(partence, 2).setValue(designation); 
    commande.getRange(partence, 15).setValue(designation); 
    commande.getRange(partence, 26).setValue(designation); 
    commande.getRange(partence, 37).setValue(designation); 
    commande.getRange(partence, 49).setValue(designation); 
    commande.getRange(partence, 61).setValue(designation); 
    commande.getRange(partence, 73).setValue(designation); 
    commande.getRange(partence, 85).setValue(designation); 
    commande.getRange(partence, 97).setValue(designation); 
    commande.getRange(partence, 109).setValue(designation); 

Es ist möglich, so etwas zu tun? :

commande.getRange(partence, 2 And 15 And 26 And 37 And 49 And 61 And 73 And 85 And 97 And 109).setValue(designation);

+0

Bei der Benennung von Variablen beachten Sie bitte, dass es sinnvoll ist, Namen zu wählen, die in Englisch sinnvoll sind, damit andere Ihren Code besser verstehen. Außerdem ist 'partence' in keiner Sprache ein Wort, auch kein Französisch. Vielleicht ist Partance das, was du meintest? In jedem Fall kann das Kombinieren von Sprachen im Code das Lesen erschweren. –

+0

Ok, Danke. Ich werde beim nächsten Mal darauf achten. – Arnaud

Antwort

1

A Bereich in Anwendungen Script ist immer ein rechteckiger Teil eines Blattes. Wenn Sie die Werte in mehreren Zellen ändern müssen, die nicht nebeneinander liegen, handelt es sich um separate Bereiche, und Sie müssen eine Menge getRange setValue-Aufrufe ausführen, genau wie Sie es getan haben. Es gibt nichts wie getRange(partence, 2 And 15).

Aber wenn Ihre Zeile "parence" keine Formeln enthält, können Sie mit einem einzigen Bereich arbeiten, der alle Zellen enthält, die gesetzt werden müssen. Die anderen Werte in diesem Bereich gelesen werden und stellen dann unverändert zurück (diese jedoch alle Formeln in den Zellen entfernen würde):

var ix = [2, 15, 26, 37, 49, 61, 73, 85, 97, 109]; 
var range = commande.getRange(partence, ix[0], 1, ix[ix.length-1] - ix[0] + 1); 
var values = range.getValues(); 
for (i in ix) { 
    values[0][ix[i] - ix[0]] = designation; 
} 
range.setValues(values); 
+0

Vielen Dank! Es funktioniert perfekt. Ich dachte auch, dass mit Ihrem Vorschlag (der kürzer ist) der Code schneller ausgeführt wird, aber seltsamerweise ist es nicht der Fall. Wie auch immer, vielen Dank. – Arnaud

0

Sie können so etwas wie dies versuchen: Erstens ein Array der Werte, die Sie wollen In das Blatt einfügen/setzen und dann in Single-Shot das Array einfügen.

var depart = ligne.filter(String).length; 
    if (depart < 27) { 
     var partence = depart + 2 
    } else { 
     var partence = depart + 13 
    } 
var values = []; 
var values = commande.getRange(partence, 1, 110, 1).getValues(); 
var i; 
for (i = 1; i <= values.length; i++) { 
    if(i == 2 || i == 15 || i == 26 || i == 37 || i == 49 || i == 61 || i == 73 || i == 85 || i == 97 || i == 109) { 
    values[i-1][0] = designation; 
} 
} 

commande.getRange(partence, 1, 110, 1).setValues(values); 

Dies ist ein nicht getesteter Code. Lassen Sie mich wissen, wenn es einige Bugs gibt, ich werde glücklich sein, uns zu helfen, zu sortieren.

Danke

+0

Danke. Ihr Funktionscode in Teilen. Tatsächlich werden die Daten in den Zeilen, aber nicht in den Spalten übertragen. Ich verstehe nicht, warum ... – Arnaud

+0

Ich versuchte zu beantworten, basierend auf welche Informationen in Ihrer Frage verfügbar war, bitte erzählen Sie mehr, was Sie genau dann wollen, vielleicht kann ich Ihnen mehr helfen. – Umair

Verwandte Themen