0

Ich arbeite an einem Projekt, bei dem ich versuche, jeden Tag ein Blatt mit Informationen aus einem neuen Blatt zu autoupdieren, um ein wöchentliches Datenaggregat zu bilden. Das neue Blatt wird im selben Ordner abgelegt und erhält jeden Tag den gleichen Namen. Derzeit funktioniert der Prozess, wenn ich ein neues Blatt in den Ordner lege, erhält es die Schlüssel-ID und importiert die neuen eindeutigen Daten von diesem Blatt.ImportRange am unteren Rand eines bereits vorhandenen Bereichs

Ich bin fast fertig und mein letztes Problem ist es, es so zu machen, dass der Code die Daten vom vorherigen Tag nicht überschreibt. Ich muss es so machen, dass der Code das Blatt liest, den aktiven Bereich sieht (wie viele Zeilen es gibt) und dann die Importbereich-Funktion in der Zelle direkt unter dem letzten Eintrag auf dem Blatt platziert (dh wenn die Daten des vorherigen Tages enden) Zeile 166, die Import-Range-Funktion für heute geht weiter A: 167).

Was ist der beste Weg, um diese Bereichsfunktion jeden Tag zu erreichen? Ich weiß, dass es wahrscheinlich so einfach ist, +1 zu einer Variablen für den Importbereich hinzuzufügen, aber wie kann ich diese Bereichslesefunktion ausführen? Wird getRange den Trick machen oder gibt es etwas Spezifischeres mit der Zeilennummer zu tun?

Hier ist der Code:

//trigger from user action upload new sheet 
// get sheet key from new sheet 
//specify new cell in monthly for import range 
// put new key in import range function in sheet 
//execute import range 
//var counter = 0; 



//var import= "IMPORTRANGE""(""1K7Rj4QK-EVjf8lZ0BSew7iDeCtktqWjzgjoaVPe5jSc""," "sheet1!A1:G6"")" 

var counter = 0; 

function test() { 
    var files = []; 
    var keyID = []; 

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()) { 
    var file = filesN.next(); 
    keyID.push(file.getId()) 
    files.push(file.getName()); 
    } 
    Logger.log(keyID) 

    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 < keyID.length; i++) { 
     var range = s.getRange(1,i+1); //sets range in target. ONLY CHOOSE ONE 
     range.setValue('=IMPORTRANGE("'+keyID[i]+'","sheet1!A1:167")') 
    } 
    autoUpdate(keyID); 
} 

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 CELL FOR IMPORTRANGE- IF MORE THAN 1 IS CHOSEN YOU WILL GET A #REF ERROR BECAUSE IT WILL PUT IMPORTRANGE IN ALL CELLS 
range.activate; // activates range 
//range.setValue('=IMPORTRANGE("1hVv6ldHEaCCI_uptr0MpzAyP60x7on8YR_brWwWXTWo","sheet1!A1:167")'); 
    range.setValue(('=IMPORTRANGE("'+keyID+'","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

betrachten Sie können mehrere imporrange mit einer einzigen Formel verketten. Sie können das verwenden, um Ihren Fall zu lösen. http://stackoverflow.com/q/38924637/2213940 –

Antwort

0

Wenn Sie zu einem Zeitpunkt, in dem Ordner immer nur eine Datei ist nicht durch die Schlüssel-ID-Array-Schleife müssen ... Sie einfach die ersten bekommen (und nur element) by keyID [0] ... um die nächste Zeile für den Importbereich zu erhalten, können Sie s.getLastRow() verwenden. Informationen zur Dokumentation finden Sie unter here. Ihr vollständiger Code würde sich wie folgt ändern. Beachten Sie die Änderung, wo die zweite Schleife war.

//trigger from user action upload new sheet 
// get sheet key from new sheet 
//specify new cell in monthly for import range 
// put new key in import range function in sheet 
//execute import range 
//var counter = 0; 



//var import= "IMPORTRANGE""(""1K7Rj4QK-EVjf8lZ0BSew7iDeCtktqWjzgjoaVPe5jSc""," "sheet1!A1:G6"")" 

var counter = 0; 

function test() { 
    var files = []; 
    var keyID = []; 

    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()) { 
     var file = filesN.next(); 
     keyID.push(file.getId()) 
     files.push(file.getName()); 
    } 
    Logger.log(keyID) 

    var ss = SpreadsheetApp.openById("1lH9Y12P2Q2OFndIJoAU48ePggXFc9WGcWjolZMcABoc");  //defines target spreadsheet ie monthly 
    SpreadsheetApp.setActiveSpreadsheet(ss); //sets target spreadsheet as active 
    var s = ss.getSheetByName('Sheet1'); 
    s.getRange(s.getLastRow()+1,1).setValue('=IMPORTRANGE("'+keyID[0]+'","sheet1!A1:167")') 

    autoUpdate(keyID); 
    } 

    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 CELL FOR IMPORTRANGE- IF MORE THAN 1 IS CHOSEN YOU WILL GET A #REF ERROR BECAUSE IT WILL PUT IMPORTRANGE IN ALL CELLS 
     range.activate; // activates range 
     //range.setValue('=IMPORTRANGE("1hVv6ldHEaCCI_uptr0MpzAyP60x7on8YR_brWwWXTWo","sheet1!A1:167")'); 
     range.setValue(('=IMPORTRANGE("'+keyID+'","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

du bist mein Held !!!! –

Verwandte Themen