2012-06-21 7 views
5

Oggi gioco con Google Apps Script e sto provando a codificare alcune funzioni del foglio di calcolo personalizzato. Ho fatto qualche ricerca ma non riesco a trovare una risposta alla mia domanda.È possibile eseguire ImportRange in Script di Google Apps?

So che su un foglio di calcolo di Google è possibile utilizzare ImportRange in una cella di un foglio di calcolo come questo:

=ImportRange(spreadsheet_key;sheet!range_of_cells) 

Le mie domande sono è possibile fare qualcosa di simile in un Apps Script Google e, in caso affermativo, Come?

Desidero importare un intervallo di celle da un foglio su un altro foglio di calcolo (non un foglio sul foglio di calcolo in cui risiede lo script).

risposta

5

Sì, questo è perfettamente possibile. Hai solo bisogno di chiamare SpreadsheetApp.openById e quindi ottenere normalmente il foglio e gli intervalli desiderati.

Si prega di dare un'occhiata al documentation: range.getValues() e range.setValues() sono metodi GAS molto semplici e sono abbastanza ben descritti.

Leggi anche the tutorial.

+0

Sono a conoscenza di queste funzioni, ma non vedo come posso dirlo per selezionare l'intervallo da un ** altro foglio di calcolo. Forse sono solo di nuovo stupido. – user1464409

+1

Ciao Serge, mi sono preso la libertà di modificare la tua risposta per risolvere il suo dubbio sul commento :) –

+0

@ Henrique: grazie per la 'modifica', hai perfettamente ragione, ho ancora qualche progresso da fare su alcune risposte di formattazione e 'completezza' Mi prenderò cura di questo ;-) –

1

Avevo bisogno di farlo di recente. Questo è ciò che mi è venuta, semplicemente hard-codifica la chiave foglio di calcolo e la gamma in funzione di Achab 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(); 
} 

Nel mio caso ho una serie di fogli privati, un foglio intermedio che utilizza il normale myImportRange e VMERGE con alcuni SQL combinare selezioni dai fogli privati ​​nel foglio intermedio e un foglio pubblica che ha semplicemente una cella contenente = myScriptedImportRange(GoogleClock())

noti che esiste un approccio simile qui: https://stackoverflow.com/a/11857014

noti inoltre che ilLa funzionee le funzioni correlate hanno spesso il problema di non visualizzare i dati importati quando le cartelle di lavoro di origine sono/non sono aperte. Un modo semplice per aggirare questo problema è stato descritto in un commento qui: https://stackoverflow.com/a/11786797

+0

La funzione orologio Google non funziona più nei nuovi fogli Google e non consente di inserire la funzione alternativa "NOW()" nella funzione principale all'interno del foglio. Continua a dire caricamento e non succede nulla. – Courtney

2

Sembra che Google, nella loro infinita saggezza, abbia alterato il comportamento di openById e funzioni simili. Non sono più consentiti nel contesto di funzioni personalizzate.

Vedere https://code.google.com/p/google-apps-script-issues/issues/detail?id=5174 per ulteriori dettagli.

Essi suggeriscono di utilizzare IMPORTRANGE come soluzione alternativa, ma come accennato in precedenza, questo deve essere chiamato all'interno di una cella.

La nostra soluzione era utilizzare IMPORTRANGE nel foglio e trasferire i dati acquisiti nella nostra funzione personalizzata, poiché il set di dati era ridotto. Spero che questa informazione aiuti!