2013-01-31 5 views
0

Google Apps Script에 한 시트의 셀 정보를 가져 와서 다른 시트에 복사하는 스크립트를 작성하려고합니다. 두 번째 시트에 표시 할 특정 열을 잡는 것뿐 아니라 조건 특정 열의 셀 내부 값을 기반으로합니다.Google Apps Script로 데이터 복사

function onMyEdit() { 
    var myMaster = SpreadsheetApp.openById("xxxxx"); 
    var masterSheet = myMaster.setActiveSheet(myMaster.getSheets()[0]); 
    var myNames  = SpreadsheetApp.openById("xxxxx"); 
    var namesSheet = myNames.setActiveSheet(myNames.getSheets()[0]); 
    var row1  = masterSheet.getRange(1, 1, masterSheet.getLastRow(), 1); 
    var rowV  = row1.getValues(); 
    var firstArray = masterSheet.getDataRange().getValues(); 
    var dataList = []; 
    for (var i = 1; i < rowV.length; i++) { 
    dataList.push(firstArray[i][0]); 
    dataList.push(firstArray[i][1]); 
    dataList.push(firstArray[i][2]); 
    dataList.push(firstArray[i][3]); 

    } 
    for (var j = 0; j < rowV.length - 1; j++) { 
    namesSheet.getRange(2, j + 1, 1, 1).setValue(dataList[j]); 
    } 
} 

그래서 지금은 두 번째 행에서 시작하여, 한 행에서 작동의로 (열 머리글 수 있도록) : 여기에 지금까지 가지고있는 것입니다. 그리고 셀 데이터를 기반으로 조건부로 행을 가져 오려고 할 때 'for'루프 내부의 조건에 'if'문을 사용하지만 데이터를 두 시트의 다음 사용 가능한 행으로 복사하려고합니다. 나는 같은 것을 사용한다고 가정합니다 : 'getLastRow + 1' 또는 그와 비슷한 것. 이 코드는 데이터의 양과 그 목적 때문에 가능한 한 효율적이어야합니다. 나는 프로그래밍에 익숙하지 않으므로 자세히 설명해 주시고 다시 한 번 감사드립니다.

+0

코드 검토를 확인 했습니까? –

+0

행에 대해 이야기하고 변수 '행'을 호출하지만 코드에서 열을 가져 오는 중 ... 어느 것이 맞습니까? 코드 또는 텍스트? getRange()를 사용하면 행 인덱스, 열 인덱스, 행 높이, 열 너비와 같은 매개 변수가 있습니다. 귀하의 가치와 함께 그것은 확실히 열입니다 ... 왜 그것을 행이라고 부릅니까? 그것은 모호하고 위험스럽게 혼란스럽게 만듭니다. :-) –

+0

@ Sergeinsas 주목 해 주셔서 고마워요, 시작입니다. 열 기능을 사용할지 또는 행을 전환할지 여부는 내가 생각해야 할 사항입니다. 그러나 Google에서 2D 배열을 만드는 'getValues'를 사용했기 때문에 이러한 배열을 정확하게 작성하는 방법과 대상 페이지로 인쇄하는 방법을 알아야합니다. 나는 아직도 이것에서 조금 잃어버린 ... – davo2323

답변

0

나는 당신이 할 원하는 것을 정확히 이해 모르겠지만 -from 나는이 코드는 당신에게

(나는에 몇 가지 의견을 추가 ...로 시작하는 더 나은 방법을 제공한다을 이해할 수 무엇을 코드 자체에서 설명하십시오)

function onMyEdit() { 
    var myMaster = SpreadsheetApp.openById("MasterSheet ID"); 
    var masterSheet = myMaster.getSheets()[0]; // get 1rst sheet 
    var myNames  = SpreadsheetApp.openById("NamesSheet ID"); 
    var namesSheet = myNames.getSheets()[0]; // get 1rst sheet 
    var firstArray = masterSheet.getDataRange().getValues(); 
    var dataList = []; 
    for (r = 1; r < firstArray.length; r++) { // iterate the first col of masterSheet 
     if(firstArray[r][0]=='some condition'){ // if value in the first column == 'some condition get the second column cell in the new array (here you could change what you want to get) 
     dataList.push([firstArray[r][1]]) 
    } 
    } 
    Logger.log(dataList) 
    if(dataList.length>0){ 
namesSheet.getRange(1,namesSheet.getLastColumn()+1,dataList.length,1).setValues(dataList);//copy data in a column after last col 
} 
} 
관련 문제