2015-07-03 5 views
10

Ich habe mehrere Google Tabellen, die ich verbinde und Zellen zwischen ihnen aktualisiere. Im Moment muss ich Referenzen vom Typ R1C1 oder A1 verwenden, um Zellen zu bestimmen oder zu setzen, die auf bestimmten Spalten basieren.Verwenden einer Spaltenüberschrift zum Verweisen auf eine Zelle in Google Apps Script-Tabelle

Wenn eine neue Spalte hinzugefügt wird, sind alle Referenzen deaktiviert.

Zeile eins jedes Blattes hat Spaltenüberschriften als Werte in diesen Zellen.

Kann ich eine Zelle in einem Format wie [columnHeader] 5 für die Zelle in dieser Spalte, fünfte Zeile, referenzieren?

Ich dachte daran, jede einzelne Spaltenüberschrift als 'benannten Bereich' zu setzen, aber ich bin fest daran, eine Zelle mit [benannter Bereich] 5 referenzieren zu können.

Ich nehme an, ich könnte eine Methode der dynamischen Definition von 100 Variablen zu dem dann aktuellen Spaltennummern (R1C1) -Format (in allen Blättern) verwenden und dann versuchen, diese Pseudo-Header-Variablen in meiner Zelle Referenzen zu verwenden. Aber ich werde wahrscheinlich die Skripte 100 Mal am Tag laufen lassen und diese schreckliche Ineffizienz schmerzt den Ingenieur in mir.

Vielen Dank im Voraus.

Futter

Antwort

12

ich eine kleine Hilfsfunktion verwenden, die den Spaltenindex als eine Zahl zurückgibt, die ich in getRange(row,col)

verwenden können, ist es sehr einfach und geht so:

function getColByName(name){ 
    var headers = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1').getDataRange().getValues().shift(); 
    var colindex = headers.indexOf(name); 
    return colindex+1; 
} 

Test wie folgt:

function testgetColByName(){ 
    Logger.log(getColByName('header string')); 
} 
+0

Danke Serge, ich habe es geändert, um Spaltennummern von multi zu erhalten le Blätter durch Übergabe in der entsprechenden "getSheetByName" und spezifische Spaltenüberschrift. – user1489765

+0

Entschuldigung, triff CR zu früh. Ich wollte hinzufügen, dass ich dies als Antwort akzeptiere. Obwohl es nicht das Beste ist (nichts gegen Serge), funktioniert es für mich. Danke nochmal an Serge. – user1489765

+3

Ahhh, Serge; Ich konnte nicht verstehen, warum Sie den gesamten Bereich gewählt haben und shift() verwendet haben. Dann fand ich endlich einen Verweis auf "Die Methode shift() entfernt das erste Element eines Arrays und gibt dieses Element zurück." Gute Arbeit! Ich ging den Pfad der Einschränkung der Reichweite auf nur die oberste Reihe (ich wollte wirklich nur die Header); aber deine Methode hat das gehandhabt. Hut ab für Dich! – user1489765

Verwandte Themen