Wie kann ich ein Skript nur auf ein bestimmtes Blatt in einer Tabelle anwenden?

9

Ich habe eine Tabelle mit zwei Blättern namens Robinund Lucy. Ich habe ein Skript erstellt / gefunden / entstellt, um die Daten auf dem Blatt jedes Mal zu sortieren, wenn ich Daten zu Spalte A hinzufüge:

function onEdit(event){

  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "a2:I30";
    if(editedCell.getColumn() == columnToSortBy){   
   var range = sheet.getRange(tableRange);
   range.sort( { column : columnToSortBy } );
  }
}

Dieses Skript funktioniert gut, aber ich möchte nur, dass es auf das erste Blatt angewendet wird Robin. Die Daten im zweiten Blatt Lucysind nicht die gleichen, daher werde ich ein anderes Skript für einen anderen Bereich für diesen erstellen, sobald ich mich mit diesem Problem befasst habe.

Ich denke, ich muss das verwenden, getSheetByName("Robin")aber ich kann es scheinbar nicht zum Laufen bringen.

oohrogerplamer
quelle

Antworten:

12

Es gibt verschiedene Möglichkeiten, dies zu tun. Zunächst müssen Sie die Tabelle deklarieren:

var ss = SpreadsheetApp.getActiveSpreadsheet();  

Zweitens deklarieren Sie das erste Blatt wie folgt:

var sh0 = ss.getSheets()[0];

oder so:

var sh0 = ss.getSheetByName("Robin");

Stellen Sie dann die aktive Zelle ein und rufen Sie den Spaltenindex ab:

var editedCell = sh0.getActiveRange().getColumnIndex();

Und machen Sie die Logik für die Sortierung:

var columnToSortBy = 1;
var tableRange = "a2:I30";

if(editedCell == columnToSortBy){   
  var range = sheet.getRange(tableRange);
  range.sort( { column : columnToSortBy } );
}

Vollständiger Code, etwas gekürzt:

function onEdit(){
  var sh0 = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var editedCell = sh0.getActiveRange().getColumnIndex();

  if(editedCell == 1) { 
    var range = sh0.getRange("A2:I30");
    range.sort({column: 1});
  }
}
Jacob Jan Tuinstra
quelle
@oohrogerplamer Sie können die Antwort akzeptieren, indem Sie sie markieren. Siehe diesen FAQ- Bereich. Bitte.
Jacob Jan Tuinstra
Wie kann ich dies tun, um nach einer Spalte zu sortieren, aber auch nach den anderen Spalten, damit alle Daten in den Zeilen noch übereinstimmen?
Moobot
1

Holen Sie sich das zugehörige Blatt (Tabellenkalkulation) und geben Sie an, auf welche Registerkarte (Blatt) Sie sich konzentrieren möchten:

var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Robin");
// do the thing
var theSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Lucy"); 
// do the other thing

Referenz: https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#getSheetByName(String)

Andy Roberts
quelle