2017-11-03 3 views
0

이것은 Google 내 서적의 스크립팅에 대한 첫 번째 게시물입니다. 어떤 도움이라도 대단히 감사합니다.Google 스프레드 시트 - 시트 1에서 시트 2로 행을 복사하고 일치하는 열 값으로 시트 2의 행에 셀 값을 붙여 넣기해야합니다.

제목에 언급 된대로 제출 된 Google 양식의 데이터를 처리하는 데 사용하는 두 개의 시트가있는 Google 스프레드 시트를 작성하고 있습니다. sheet1은 새로운 양식 응답이 입력되는 곳이며 sheet2는 정렬의 "아카이브"이므로 sheet1은 내가 아직 보지 않은 가장 최근의 항목 만 갖습니다.

sheet1 열 8에는 5 자리 숫자가 있고 열 9는 비어 있거나 "Rcvd"라고 표시되며 나머지 열은 복사해야하는 다른 데이터를 보유하지만 고유 값은 보유하지 않습니다. sheet1과 sheet2는 동일한 열 머리글과 구성을 가지고 있지만 sheet2에서는 8 열만 채워집니다.

내가 원하는 것은 sheet1에서 sheet2 로의 모든 값을 복사하는 것입니다. 그 행의 열 9가 "Rcvd"(편집 중)로 변경됩니다. 그런 다음 행의 값을 열 2의 일치하는 값을 가진 행의 동일한 열에서 sheet2에 삽입해야합니다. 그러면 지정된 행을 sheet1에서 삭제해야합니다.

지금까지 나는 sheet1에서 sheet2로 이동하고 sheet1에서 자신을 삭제할 수 있지만 sheet2의 마지막 행에서만 sheet2의 일치하는 열 값을 가진 행에 붙여 넣을 수는 없었습니다.

나는이 스크립트를 사용하고 : 나에게

function onEdit(event) { 
// assumes source data in sheet named "sheet1" 
// target sheet of move to named "sheet2" 
// column with rcvd is col 9 or I 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 

if(s.getName() == "sheet1" && r.getColumn() == 9 && r.getValue() == "Rcvd") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("sheet2"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row); 
} 
} 

, 그것은이 .getRange처럼 보인다 (targetSheet.getLastRow() 1, 1) 올바른 행을 얻기 위해 변경해야 할 것입니다 열 8 값을 기준으로 sheet2의 수를 계산하지만 성공하려면별로 성공하지 못합니다.

감사합니다.

답변

0

이 꽤 볼만했다,하지만 기능은 당신이 원하는 있습니다

function onEdit(event) { 

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 
var columnSearchNum = 3; 
var columnSearchChar = "C"; 
var rcvdColumn = 2; 
var sourceSheetName = "Sheet1"; 
var targetSheetName = "Sheet2"; 

if(s.getName() == sourceSheetName && r.getColumn() == rcvdColumn && r.getValue() == "Rcvd") { 
    var sourceRow = r.getRow(); 
    var targetSheet = ss.getSheetByName(targetSheetName); 
    var targetSheetNumRows = targetSheet.getLastRow(); 
    //console.log(targetSheetNumRows); 
    var sourceSheetNumColumns = s.getLastColumn(); 
    var targetRange = targetSheet.getActiveRange() 
    var targetValue = +s.getRange(columnSeachChar+sourceRow).getValue() 
    //console.log(targetValue); 
    var targetSheetRange = targetSheet.getRange(1,columnSearchNum,targetSheetNumRows,1); 
    //console.log(targetSheetRange.getNumRows() +" " +targetSheetRange.getNumColumns() + " " + targetSheetRange.getValues()); 
    var targetRow = findIndex(targetSheetRange.getValues(), targetValue); 
    //console.log(targetRow); 
    var target = targetSheet.getRange(targetRow, 1); 
    s.getRange(sourceRow, 1, 1, sourceSheetNumColumns).moveTo(target); 
    s.deleteRow(sourceRow); 
} 
} 

function findIndex(array, search){ 
    //console.log(array); 
    if(search == "") return false; 
    for (var i=0; i<array.length; i++){ 
    //console.log("comparing " + +array[i] + " to "+ +search); 
    if (+array[i] == +search){ 
     return i+1; 
    } 
    } 
    return -1; 
} 

당신은 당신의 구체적인

IT 작동
+0

에 맞게 시트 이름과 열을 변경해야합니다 !!!!! 감사합니다. – 1ManRockBand

+0

Google 양식 데이터와 함께 사용하기 때문에 moveTo 명령으로 양식 데이터를 자르지 못했습니다. 나는'moveTo (target)'을'copyTo (target)'로 바꾸고 그 문제를 수정했다. 다시 한 번 감사드립니다! – 1ManRockBand

관련 문제