2017-02-18 3 views
0

Ich habe eine Tabelle mit zwei Blättern namens "Sheet1" und "Sheet2". Ich habe ein Skript, auf klicken Sie auf den Menüpunkt ausgeführt wird:Google Script getActiveRange

function foo(){ 

var oSheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"), 
oSheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); 
Logger.log(oSheet1.getActiveRange().getValues()); 
Logger.log(oSheet2.getActiveRange().getValues()); 

} // foo 

ich in Browser in Sheet1 wählen Sie den ersten Bereich, und klicken Sie dann auf Tabelle2, und wählen Sie den zweiten Bereich, andere auf der ersten. Ich klicke auf den Menüpunkt, starte foo(). Logger zeigt dasselbe Ergebnis für oSheet1 und oSheet2 an. Warum? Und wie kann ich die Auswahl auf inaktiven Blättern treffen? Hier

ist der Tisch mit vollem Zugang https://docs.google.com/spreadsheets/d/1lfQl9H1PW2lKL-4YJir7uxl-ZMnDR6Zn1_FndG07WGY/edit#gid=1264703349

+0

der erste Bereich Bild - https://i.stack.imgur.com/GBdtF.png Das Bild Zweite Bereich - https://i.stack.imgur.com/Qcivq.png – roskoshinsky

+0

Es funktioniert, wenn du legst ein ';' Semikolon nach Zeile 1 und eine Var am Anfang von Zeile 2. Natürlich müssen Sie Protokolle anzeigen und Sie werden ein paar zweidimensionale Arrays betrachten. So wird es nicht genau wie Ihre Tabelle aussehen. Aber Sie sollten sich daran gewöhnen, Ihre Daten auf diese Weise zu verschieben, weil sie um mindestens eine Größenordnung schneller ist, als wenn Sie mit Zellen herumhantieren. – Cooper

+0

Cooper, meinen Sie Funktion foo() { var oSheet1 = SpreadsheetApp.getActiveSpreadsheet(). GetSheetByName ("Sheet1"); var oSheet2 = SpreadsheetApp.getActiveSpreadsheet(). GetSheetByName ("Sheet2"); Logger.log (oSheet1.getActiveRange(). GetValues ​​()); Logger.log (oSheet2.getActiveRange(). GetValues ​​()); SpreadsheetApp.getUi(). Alert (oSheet1.getActiveRange(). GetValues ​​()); SpreadsheetApp.getUi(). Alert (oSheet2.getActiveRange(). GetValues ​​()); } // foo - Ich wäre überrascht, wenn ein Semikolon die Situation gerettet hätte. Und dieses Fallprotokoll zeigt zwei gleiche Ergebnisse mit verschiedenen Blattauswahlmöglichkeiten. – roskoshinsky

Antwort

0

Ich glaube, ich war falsch. Es sah aus, als ob es funktionierte, aber es nahm den aktiven Bereich in jedem Blatt, das oben saß, wenn die Funktion ausgeführt wird. Ich habe es versucht, indem ich aktive Reichweite wie unten vermieden habe und es funktioniert. Ich legte die Sheet1 und Sheet2 mit allen Sternchen hinein, so dass ich den Anfang jedes Datensatzes sehen konnte, um sicherzustellen, dass sie die richtigen Daten waren. Aber obwohl in jedem der Blätter ausgewählte Bereiche vorhanden sind, wiederholt die Funktion die ausgewählten Daten auf dem oberen Blatt (je nachdem, was aktiv ist) und meldet keine Fehler.

function foo(){ 

var oSheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getDataRange(); 
var oSheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2").getDataRange(); 
Logger.log('**************************Sheet1**********************' + oSheet1.getValues()); 
Logger.log('********************Sheet2**************************' + oSheet2.getValues()); 

} // foo 
+0

Wenn Sie so etwas tun möchten, können Sie dies in einem mehrstufigen Vorgang tun. Wählen Sie zuerst den Bereich auf der ersten Seite aus, und speichern Sie diese Informationen in PropertiesService.DocumentProperties. Rufen Sie dann den zweiten Bereich ab und speichern Sie ihn. Sammeln Sie dann die Daten unter Verwendung dieser gespeicherten Bereiche. – Cooper