0

Je tente de créer une fonction d'archivage automatique qui prend la date d'une entrée de feuille, la première colonne de chaque ligne, et la compare à date actuelle et la déplace vers une feuille d'archivage si la date actuelle est n semaines à partir de l'entrée. Le code que j'ai fonctionne sur certaines lignes, mais sur certaines lignes, il renvoie "Les coordonnées de la gamme source sont en dehors des dimensions de la feuille." Erreur. Certaines lignes de la feuille de calcul ont une entrée dans la dernière colonne active, tandis que d'autres sont laissées vides, donc je ne sais pas si cela pourrait provenir de l'erreur, mais j'ai essayé de lancer le programme sans ces colonnes et j'ai toujours une erreur. Toute aide serait très appréciée! Ceci est ma fonction:Google Script hors limites Erreur lors de la tentative de transfert de lignes d'une feuille à une autre

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

Répondre

0

Essayez ceci:

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