2017-02-18 17 views
0

У меня есть таблица с двумя листами внутри с именем «Sheet1» и «Sheet2». У меня есть сценарий, работающий на выберите пункт меню: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 

Я выбираю в браузере в Лист1 первый диапазон, а затем нажмите на Лист2 и выберите второй диапазон, отличный от первого. Я нажимаю элемент меню, запускаю foo(). Logger просматривает тот же результат для oSheet1 и oSheet2. Зачем? И как я могу получить выбранный диапазон на неактивных листах?

Вот таблица с полным доступом https://docs.google.com/spreadsheets/d/1lfQl9H1PW2lKL-4YJir7uxl-ZMnDR6Zn1_FndG07WGY/edit#gid=1264703349

+0

Первый Range Image - https://i.stack.imgur.com/GBdtF.png Второй Range Image - https://i.stack.imgur.com/Qcivq.png – roskoshinsky

+0

Это работает, если вы ставите ';' точка с запятой после строки 1 и var в начале строки 2. Конечно, вам придется просматривать журналы, и вы будете смотреть на пару двухмерных массивов. Таким образом, он не будет выглядеть точно так же, как ваша электронная таблица. Но вы должны использовать, чтобы перемещать ваши данные таким образом, потому что это по крайней мере на порядок быстрее, чем возиться с ячейками. – Cooper

+0

Cooper, вы имеете в виду function 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 - Я был бы удивлен, если бы точка с запятой спасла ситуацию. И этот журнал событий показывает два одинаковых результата с разными вариантами листа. – roskoshinsky

ответ

0

Я предполагаю, что я был неправ. Похоже, что он работал, но он принимал активный диапазон в любом листе, сидящем сверху, когда функция работает. Я попробовал это, избегая использования активного диапазона, как показано ниже, и он работает. Я поставил там Sheet1 и Sheet2 со всеми звездочками, чтобы я мог видеть начало каждого набора данных, чтобы гарантировать, что они являются правильными данными. Но даже если на каждом листе выделены диапазоны, функция повторяет выбранные данные на верхнем листе (в зависимости от того, какой из них активен) и не сообщает о каких-либо ошибках.

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

Если вы хотите сделать что-то подобное, вы можете сделать это в многоступенчатой ​​операции. Сначала выберите диапазон на первой странице и сохраните эту информацию в PropertyService.DocumentProperties, затем получите второй диапазон и сохраните его, а затем соберите данные, используя эти сохраненные диапазоны. – Cooper