2012-06-21 21 views
5

Ich habe heute mit Google Apps Script herumgespielt und versuche, einige benutzerdefinierte Tabellenkalkulationsfunktionen zu programmieren. Ich habe ein wenig gesucht, kann aber keine Antwort auf meine Frage finden.Ist es möglich, ImportRange in Google Apps Script zu verwenden?

Ich weiß, auf einer Google-Tabelle, dass Sie Importrange in einer Zelle auf einer Tabelle wie folgt verwenden können:

=ImportRange(spreadsheet_key;sheet!range_of_cells) 

Meine Fragen sind, ist es möglich, etwas ähnliches in einem Google Apps Script und wenn dies zu tun, Wie?

Ich möchte einen Bereich von Zellen aus einem Blatt in einer anderen Tabelle importieren (kein Blatt in der Tabelle, in dem sich das Skript befindet).

Antwort

5

Ja, das ist perfekt möglich. Sie müssen nur SpreadsheetApp.openById anrufen und dann das gewünschte Blatt und die gewünschten Bereiche abrufen.

Bitte beachten Sie die documentation: range.getValues() und range.setValues() sind sehr grundlegende GAS-Methoden und sind ziemlich gut beschrieben.

Lesen Sie auch the tutorial.

+0

Ich bin mir dieser Funktionen bewusst, aber ich sehe nicht, wie ich es sagen kann, um den Bereich von ** einer anderen ** Tabelle auszuwählen. Vielleicht bin ich nur wieder dumm. – user1464409

+1

Hallo Serge, ich habe mir die Freiheit genommen, Ihre Antwort zu bearbeiten, um seine Zweifel auf den Kommentar zu richten :) –

+0

@Henrique: danke für die 'bearbeiten', du hast vollkommen Recht, ich habe noch ein paar Fortschritte auf einige Antworten Formatierung und "Vollständigkeit" Ich werde mich darum kümmern ;-) –

1

Ich musste dies in letzter Zeit tun. Das ist, was ich kam mit, einfach hart Codierung der Tabellenschlüssel und Bereich in myImportRange Funktion des ahab

// 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(); 
} 

In meinem Fall habe ich eine Reihe von privaten Platten haben, ein Zwischenblatt, das die regelmäßige myImportRange und VMERGE verwendet mit einige SQL zu kombinieren Auswahl aus den privaten Blättern in das Zwischenblatt, und dann einem öffentliches Blatt, das einfach eine Zelle = myScriptedImportRange(GoogleClock())

Hinweis enthält, hat, dass es ein ähnlicher Ansatz ist hier: https://stackoverflow.com/a/11857014

Beachten Sie auch, dass die ImportRange Funktion und verwandte Funktionen haben oft ein Problem, die importierten Daten nicht anzuzeigen, wenn die Ursprungsarbeitsmappe (n) nicht geöffnet ist (sind). Ein einfacher Weg darum wurde in einem Kommentar hier beschrieben: https://stackoverflow.com/a/11786797

+0

Die Google-Uhr funktioniert nicht mehr im neuen Google Tabellen. Sie können die alternative Funktion "JETZT()" nicht in die Hauptfunktion des Blattes einfügen. Es sagt immer nur Laden und nichts passiert. – Courtney

2

Es scheint, Google hat in ihrer unendlichen Weisheit das Verhalten von openById und ähnlichen Funktionen verändert. Sie sind nicht länger im Zusammenhang mit benutzerdefinierten Funktionen zulässig.

Weitere Details finden Sie unter https://code.google.com/p/google-apps-script-issues/issues/detail?id=5174.

Sie schlagen vor, IMPORTRANGE als Workaround zu verwenden, aber wie bereits erwähnt, muss dies innerhalb einer Zelle aufgerufen werden.

Unsere Lösung war, IMPORTRANGE in das Blatt zu verwenden und die erfassten Daten in unsere benutzerdefinierte Funktion zu übergeben, da der Datensatz klein war. Ich hoffe diese Information hilft!

Verwandte Themen