0

시트 항목의 날짜와 각 행의 첫 번째 열을 취하는 자동 보관 기능을 생성하려고 시도하고 있습니다. 현재 날짜를 입력하고 현재 날짜가 n 주일 경우 아카이브 시트로 이동합니다. 내가 가지고있는 코드는 일부 행에서 작동하지만 일부 행에서는 "소스 범위의 좌표가 시트의 크기 밖에 있습니다." 오류. 스프레드 시트의 일부 행은 마지막 활성 열에 항목이 있지만 다른 항목은 공백으로 남겨져 오류가 발생한 위치가 될 수 있는지는 알 수 없지만 범위에서이 열없이 프로그램을 실행하려고했습니다. 아직 오류가 있습니다. 어떤 도움을 많이 주시면 감사하겠습니다! 이 제 기능입니다 :한 시트에서 다른 시트로 행을 전송하려고 할 때 Google Script Out of Range 오류가 발생했습니다.

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

답변

0

이 시도 :

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); 
} 
관련 문제