2017-05-09 3 views
1

Google 시트간에 여러 행을 동시에 이동하려고합니다.다른 행에 여러 행을 동시에 이동하는 Google 스크립트 - 행을 보관하고 삭제 완료

모든 작업을 완료하기 위해 스크립트를 하루에 한 번 실행하고 싶습니다.

대상 셀이 비어 있지 않은 한 한 번에 2 행만 이동하는 스크립트입니다. 이상적으로는 계속 반복되고 '완료'라고 표시된 작업 만 이동합니다.

내가 사용하고 시트는

function onOpen() { 
    var ui = SpreadsheetApp.getUi(); 
    ui.createMenu('Admin') 
     .addItem('Archive', 'archive') 
     .addToUi(); 
} 

function archive() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Scheduled"); 
    var range = sheet.getRange('A5:Q200'); 
    var sheetToMoveTheRowTo = "Archive"; 
    var numRows = sheet.getLastRow(); 
    var row = sheet.getRange(5,1); 

    for (var row = 5; row < numRows; row++) 
    { 
    var status = sheet.getRange(row,1).getValue(); 

     if (status == "Complete") { 

    var targetSheet = ss.getSheetByName(sheetToMoveTheRowTo); 
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
    sheet.getRange(range.getRow(),1,1, sheet.getLastColumn()).moveTo(targetRange); 
    sheet.deleteRow(range.getRow()); 
    } 
    } 
} 

답변

1

here은 아카이브, 구글 시트, 이동, 행, 스프레드 시트,

당신은 한 번의 작업으로 보관하는 모든 데이터를 설정해야합니다 삭제합니다. 한 작업에서 모든 행을 삭제할 수는 없지만 삭제할 행을 저장 한 다음 행 번호를 반복 할 수 있습니다. 내가 코드를 설정했던

Link to Publicly Shared Spreadsheet with Code

은 다음과 같이 구성된다 : 추가

function archive() { 
    var arrayOfRowsToArchive,data,i,lastColumn,L,numRows,range,rowsToDelete, 
     ss,sheet,sheetToMoveTheRowTo,startRow,status,targetSheet,thisRowsData; 

    //USER INPUT: 

    startRow = 5; 

    //END OF USER INPUT 

    ss = SpreadsheetApp.getActiveSpreadsheet(); 
    sheet = ss.getSheetByName("Scheduled"); 
    sheetToMoveTheRowTo = "Archive"; 
    numRows = sheet.getLastRow(); 
    lastColumn = sheet.getLastColumn(); 

    arrayOfRowsToArchive = []; 
    rowsToDelete = []; 

    data = sheet.getRange(startRow, 1, numRows - startRow, lastColumn).getValues();//Get all values except the header rows 

    L = data.length; 

    for (i=0; i < L; i++) { 
    status = data[i][0]; 
    //Logger.log('status: ' + status); 

    if (status === "Complete") { 
     thisRowsData = data[i];//Only get inner array of data 
     //Logger.log('thisRowsData: ' + thisRowsData) 
     arrayOfRowsToArchive.push(thisRowsData);//Push one row of data to outer array 
     rowsToDelete.push(i+startRow);//Get the row number to delete later 
    } 
    } 

    targetSheet = ss.getSheetByName(sheetToMoveTheRowTo); 
    targetSheet.getRange(targetSheet.getLastRow()+1, 1, arrayOfRowsToArchive.length, arrayOfRowsToArchive[0].length) 
    .setValues(arrayOfRowsToArchive); 

    //Logger.log('rowsToDelete: ' + rowsToDelete) 

    for (i=rowsToDelete.length;i>0;i--) {//Delete from bottom up 
    Logger.log((i-1).toString()) 
    Logger.log('rowsToDelete[i-1]: ' + rowsToDelete[i-1]) 
    sheet.deleteRow(rowsToDelete[i-1]); 
    } 
} 
+0

은 당신이 선택하는 경우 시간 기반 트리거 매일의를 설정합니다 스크립트를 @Sandys 할 수 있습니다. https://developers.google.com/apps-script/guides/triggers/installable – OblongMedulla

+0

"반환 키"의 의미를 잘 모르겠습니다. –

+0

도움을 주셔서 감사합니다. 반환 키를 작동하는 방법을 찾는 데 어려움이있었습니다. 은 여전히 ​​문제가 있습니다 - 스크립트가 헤더 행을 두 번씩 삭제합니다. 헤더 행을 삭제 한 후 A5의 상태가 '완료'일 때 처음 두 행을 맨 위에서 이동합니다. A5의 상태가 비어 있거나 '진행 중'이고 헤더 행이 삭제되면 다음 오류가 발생합니다. TypeError : 정의되지 않은 "length"속성을 읽을 수 없습니다. – cmccnn