0

Ich versuche, eine automatische Archivierung-Funktion zu erstellen, die das Datum eines Blatteintrags, die erste Spalte jeder Zeile, und vergleicht es mit dem aktuelles Datum und verschiebt es in ein Archivblatt, wenn das aktuelle Datum n Wochen vom Eintrag entfernt ist. Der Code, den ich habe, funktioniert in einigen Zeilen, aber in einigen Zeilen gibt er zurück "Die Koordinaten des Quellbereichs liegen außerhalb der Dimensionen des Blattes." Error. Einige Zeilen der Kalkulationstabelle haben einen Eintrag in der letzten aktiven Spalte, während andere leer bleiben. Ich weiß also nicht, ob das der Ursprung des Fehlers sein könnte, aber ich habe versucht, das Programm ohne diese Spalten im Bereich auszuführen und ich habe immer noch einen Fehler. Jede Hilfe würde sehr geschätzt werden! Dies ist meine Funktion:Google Skript außerhalb des Bereichs Fehler beim Versuch, Zeilen von einem Blatt zu einem anderen zu übertragen

function compareDates(){ 
     //change variable depending on how many weeks you want before archived 
     var numWeeks = 2; 

     //if sheet names are different change them here 
     var formDataName = "Sheet1"; 
     var archiveName = "Archived"; 

     //gets date 2 weeks from current date 
     var date = new Date()-(3600000*24*7*numWeeks); 

     //gets sheet that form data is on 
     var sheetForm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(formDataName); 
     //gets row & column numbers from form data sheet 
     var columnNum = sheetForm.getLastColumn(); 
     var rowNum = sheetForm.getLastRow(); 

    //gets sheet that archive is on 
    var sheetArchive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(archiveName); 

    var rangeForm = sheetForm.getRange(2,1,rowNum,1); 

    //iterates through rows 
    for(var i = 2; i<=rowNum; i++){ 
    //gets cell with timestamp 
    var cell = rangeForm.getCell(i,1).getValue(); 
    //compares timestamp to two weeks value 
    if(cell.valueOf()<date.valueOf()){ 
     //gets outdated row 
     var range = sheetForm.getRange(i,1,1,columnNum); 
     //gets where the row needs to move in archive 
     var tar = sheetArchive.getRange(sheetArchive.getLastRow()+1, 1, 1, columnNum); 
     //moves row to archive 
     range.copyTo(tar); 
     //deletes row in form data sheet 
     sheetForm.deleteRow(i); 
    } 
    } 
    sheetArchive.sort(1, false); 
} 

Antwort

0

Try this:

function compareDates() 
{ 
    var numWeeks = 2; 
    var formDataName = "Sheet1"; 
    var archiveName = "Archived"; 
    var date = new Date().valueOf()-(numWeeks*7*24*60*60*1000); 
    var sheetForm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(formDataName); 
    var columnNum = sheetForm.getLastColumn(); 
    var rowNum = sheetForm.getLastRow(); 
    var sheetArchive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(archiveName); 
    var rangeForm = sheetForm.getRange(2,1,rowNum-1,1); 
    var vA=rangeForm.getValues(); 
    for(var i=vA.length-1;i>=0;i--) 
    { 
    if(new Date(vA[i][0]).valueOf()<date.valueOf()) 
    { 
     var range = sheetForm.getRange(i+2,1,1,columnNum); 
     var tar = sheetArchive.getRange(sheetArchive.getLastRow()+1, 1, 1, columnNum); 
     range.copyTo(tar); 
     sheetForm.deleteRow(i + 2); 
    } 
    } 
    sheetArchive.sort(1, false); 
} 
Verwandte Themen