2016-07-28 56 views
0

Ich arbeite an einem Projekt, bei dem ich versuche, jeden Tag ein Blatt mit Informationen aus einem neuen Blatt automatisch zu aktualisieren . Das neue Blatt wird im selben Ordner abgelegt und erhält jeden Tag den gleichen Namen. Allerdings muss ich jeden Tag den neuen Blattschlüssel abrufen, damit der Code mit dem neuen Blatt, das die Daten importiert, ausgeführt wird.Ich versuche, eine Variable in eine Zeichenfolge einzufügen, so dass die Funktion einen Schlüssel importiert und dann in einem Blatt ausführt

Ich bin fast fertig, jetzt muss ich nur die Zeichenfolge, die auf variable Schlüssel in die Importbereich-Funktion in Zeile 37 geschoben wurde. Der schwierige Teil darüber ist, dass der Code es in das Zielblatt als Zeichenfolge importiert wo es dann die tatsächliche Importbereichfunktion ausführt, wenn es das Blatt trifft.

Ich brauche einen Weg, um den variablen Schlüssel in diese Zeichenfolge zu erhalten, so dass es noch im Blatt ausgeführt wird ODER die ID, die die Variable irgendwo hält, ablegt und dann automatisch in diese Zeichenfolge einfügt. Vielen Dank im Voraus!

var counter = 0; 

var files = []; 
var key = (" "); 

function searchFolder() { 
var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder 
// Log the name of every file in the folder. 
var filesN = DriveApp.getFolderById(folderId).getFiles(); //log files in folder 
while (filesN.hasNext()) files.push(filesN.next().getName()); 
while (filesN.hasNext()) 
keyID.push(filesN.next().getId()); 


} 

function autoUpdate(){ //updates monthly from newly imported daily 
if (counter == 1){ //counter is made to be 1 when day is uploaded to monthly 
var ss =  SpreadsheetApp.openById("1lH9Y12P2Q2OFndIJoAU48ePggXFc9WGcWjolZMcABoc");  //defines target spreadsheet ie monthly 
SpreadsheetApp.setActiveSpreadsheet(ss); //sets target spreadsheet as active 
var range= ss.getRange("A1:A1"); //sets range in target. ONLY CHOOSE ONE 
range.activate; // activates range 
//HELP HERE PLEASE 
range.setValue('=IMPORTRANGE("1hVv6ldHEaCCI_uptr0MpzAyP60x7on8YR_brWwWXTWo","sheet1!A1:167")'); //Puts in IMPORTRANGE into target as a STRING value (just words). Once it hits the sheet, then SHEETS executes IMPORTRANGE not SCRIPTS. In Source sheet, range is selected to import to target (ie A1:G6) 
counter=(counter-1) 
    } 
} 

function timeStamp(){ 
    if (files == "Daily") { 
    counter= (counter+1) 
    } 
} 

searchFolder(); 
timeStamp(); 
autoUpdate(); 
+0

ich gerade aktualisiert die Zeile in Frage range.setValue ("= IMPORT" + "(" + Taste + " "+ "sheet1 A1: 167" +")") zu sein; Jetzt bekomme ich #REF-Fehler in der Ziel-Google-Tabelle sagen mir, dass es kreisförmige Abhängigkeit ist. Die importrange Formel fehlt, wo der Blattschlüssel gehen würde, aber das Skript in GAS ausgeführt. –

Antwort

1

Haben Sie auf die #REF geklickt? Da normalerweise mit einer IMPORTRANGE-Funktion müssen Sie "Zugriff erlauben", um Daten zu ziehen. Bis Sie dies tun, wird ein #REF angezeigt. Wenn Sie auf die Zelle klicken, sollte ein Popup mit einer Schaltfläche mit dem Titel "Allow Access" angezeigt werden.

Sobald ich dies auf meinem Test Ihren ursprünglichen Befehl, range.setValue('=IMPORTRANGE("1hVv6ldHEaCCI_uptr0MpzAyP60x7on8YR_brWwWXTWo","sheet1!A1:167")') arbeitete.

auch eine Variable verwenden, um Ihren Befehl wie diesen ... Basierend range.setValue(('=IMPORTRANGE("'+key+'","sheet1!A1:167")'))

aktualisieren aussehen würde auf Kommentare

ändern

var files = []; 
    var key = (""); 
    var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder 
    // Log the name of every file in the folder. 
    var filesN = DriveApp.getFolderById(folderId).getFiles(); //log files in folder 
    while (filesN.hasNext()) files.push(filesN.next().getName()); 
    while (filesN.hasNext()) 
    keyID.push(filesN.next().getId()); 

To ...

var files = []; 
    var key = []; 
    var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder 
    // Log the name of every file in the folder. 
    var filesN = DriveApp.getFolderById(folderId).getFiles(); //log files in folder 
    while (filesN.hasNext()) { 
    var file = filesN.next(); 
    key.push(file.getId()) 
    files.push(file.getName()); 
    } 
    Logger.log(key) 

Dadurch wird ein Array von Dateischlüsseln sowie ein Array mit Namen erstellt. Sie können dann das Schlüsselarray durchlaufen, um jeden Schlüssel einzeln zu erhalten, und die Schlüsselvariable im Befehl verwenden, wie zuvor gezeigt. Ich bin mir nicht ganz sicher, was genau Sie tun möchten, damit genauere Hilfe mehr Informationen benötigt.

UPDATE 8-14-2016

Dies ist, was in Bezug auf meinte ich die Schlüssel Array Schleifen. Ich habe getestet und es funktioniert.

function test() { 
    var files = []; 
    var keys = []; 
    var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder 
    // Log the name of every file in the folder. 
    var filesN = DriveApp.getFolderById(folderId).getFiles(); //log files in folder 
    while (filesN.hasNext()) { 
    var file = filesN.next(); 
    keys.push(file.getId()) 
    files.push(file.getName()); 
    } 
    Logger.log(keys) 

    var ss = SpreadsheetApp.openById("1lH9Y12P2Q2OFndIJoAU48ePggXFc9WGcWjolZMcABoc");  //defines target spreadsheet ie monthly 
    SpreadsheetApp.setActiveSpreadsheet(ss); //sets target spreadsheet as active 
    var s = ss.getSheetByName('Sheet1'); 
    for (var i = 0; i < keys.length; i++) { 
     var range = s.getRange(1,i+1); //sets range in target. ONLY CHOOSE ONE 
     range.setValue('=IMPORTRANGE("'+keys[i]+'","sheet1!A1:167")') 
    } 
    autoUpdate(keys); 
} 
+0

Hi, Entschuldigung für die späte Antwort! Ich habe zuvor den Zugriff erlaubt, der Code funktionierte vorher, als ich nicht versuchte, den Schlüssel zu importieren. Ich werde es versuchen und zurück zu dir! –

+0

Hallo Mungo, es funktioniert immer noch nicht. Es gibt mir # N/A Fehler im Code und sagt mir, dass es einen Importfehler gibt. Ich habe die key.push-Funktion so geändert, dass sie keyID.push ist, also würde sie auf die Variable drücken, aber sie hat nicht funktioniert. In der Tabelle liest die Importbereich-Funktion ein leeres "", wo die Schlüssel-ID, die ich zu bekommen versuchte, ist. –

+0

Siehe Update oben ... – mongoose36