Возможно ли сделать ImportRange в Google Apps Script?

Сегодня я играю со скриптом Google Apps и пытаюсь кодировать некоторые пользовательские функции электронных таблиц. Я провел некоторый поиск, но не могу найти ответ на свой запрос.

Я знаю, что в электронной таблице Google вы можете использовать ImportRange в ячейке электронной таблицы, например:

=ImportRange(spreadsheet_key;sheet!range_of_cells)

Мои вопросы: возможно ли сделать что-то подобное в скрипте Google Apps, и если да, то как?

Я хочу импортировать диапазон ячеек из листа в другой электронной таблице (а не листа в электронной таблице, где будет находиться сценарий).

Ответы на вопрос(3)

Решение Вопроса

Да, это вполне возможно. Вам просто нужно позвонитьSpreadsheetApp.openById а затем получить желаемый лист и диапазоны обычно.

Пожалуйста, посмотрите надокументация : range.getValues() а такжеrange.setValues() очень простые методы ГАЗА и довольно хорошо описаны.

Читатьучебник также.

 user146440923 июн. 2012 г., 08:14
Спасибо Сержу и Энрике, теперь я вижу, как это сделать. Отличная помощь еще раз.
 22 июн. 2012 г., 18:01
Привет Серж, я позволил себе отредактировать твой ответ, чтобы ответить на его сомнения в комментарии :)
 user146440922 июн. 2012 г., 07:35
Я знаю об этих функциях, но не вижу, как я могу сказать ему выбрать диапазон изanother электронные таблицы. Может быть, я просто снова глуп.
 22 июн. 2012 г., 18:05
@Henrique: спасибо за «редактировать», вы совершенно правы, у меня все еще есть определенный прогресс в форматировании некоторых ответов и «полноте»; Я позабочусь об этом ;-)
 17 окт. 2016 г., 17:21
Google Apps Script

Похоже, Google в своей бесконечной мудрости изменил поведение openById и подобных функций. Они больше не разрешены в контексте пользовательских функций.

Увидетьhttps://code.google.com/p/google-apps-script-issues/issues/detail?id=5174 Больше подробностей.

Они предлагают использовать IMPORTRANGE в качестве обходного пути, но, как упоминалось ранее, это нужно вызывать внутри ячейки.

Нашим решением было использовать IMPORTRANGE на листе и передавать полученные данные в нашу пользовательскую функцию, так как набор данных был небольшим. Я надеюсь, что эта информация поможет!

Мне нужно было сделать это недавно. Это то, что я придумал, просто жестко запрограммировав ключ электронной таблицы и указав диапазон в ahab.myImportRange функция

// to be used in the spreadsheet like so:  = myScriptedImportRange( GoogleClock() )
// no need to include key or range because they are in the script here
// 
// the third parameter - GoogleClock() - triggers an automatic update every minute.
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes
// updated 2013-01-27 (ben) to hard-code key and range 
function myScriptedImportRange(  ) { 
 var key = "PUT YOUR DATA_SPREADSHEET_ID IN HERE"
 var sheetrange = "PUT YOUR SHEET AND CELL RANGE IN HERE"
 var shra = sheetrange.split("!") ;
 if (shra.length==1) shra[1]=shra[0], shra[0]="";  

 var sheetstring = shra[0].replace( /^'(.*)'$/g , "$1") // was: replace( /'/g , "") ; updated 2011-07-17 (ahab)
 var rangestring = shra[1] 

 var source = SpreadsheetApp.openById( key )    
 if ( sheetstring.length==0 ) sheet = source.getSheets()[0] ;
 else sheet = source.getSheetByName( sheetstring ) ;

 return  sheet.getRange( rangestring ).getValues(); 
}

В моем случае у меня есть набор личных листов, промежуточный лист, который использует обычныеmyImportRange и VMERGE с некоторым SQL, чтобы объединить выборки из частных листов в промежуточный лист, а затем открытый лист, который просто имеет одну ячейку, содержащую= myScriptedImportRange( GoogleClock() )

Обратите внимание, что здесь есть похожий подход:https://stackoverflow.com/a/11857014

Обратите внимание также, чтоImportRange функция и связанные с ней функции часто имеют проблему с тем, что не отображаются импортированные данные, когда исходная рабочая книга (-ы) открыта / не открыта. Простой способ обойти это был описан в комментарии здесь:https://stackoverflow.com/a/11786797

 25 мар. 2014 г., 21:34
Функция часов Google больше не работает в новых листах Google, и она не позволяет использовать альтернативную функцию & quot; NOW () & quot; в основную функцию в пределах листа. Он просто говорит загрузка и ничего не происходит.

Ваш ответ на вопрос