2014-09-19 3 views
1

Google 스프레드 시트를 2 매로 만들려고합니다. link 첫 번째 시트 "주문"은 주문을하고 "저장"버튼을 누르면 "데이터"시트를 업데이트하고 다음 페이지에 (마지막에) 다음을 삽입합니다.Google 스프레드 시트의 특정 시트를 다른 시트에 복사하는 스크립트

주문 번호, 날짜, 번호, 설명 및 가격.

주문 번호와 날짜는 제품마다 동일합니다.

나는이에 대해 쓴 스크립트입니다 :

function saveData() { 
    var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('order');    
    var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('data');    
    var lastRow = sheet2.getLastRow()+1; 


    if (sheet1.getRange('B6') != " ") 
     sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow,1), {contentsOnly:true}); 
     sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow,2), {contentsOnly:true}); 
     sheet1.getRange('b6').copyTo(sheet2.getRange(lastRow,3), {contentsOnly:true}); 
     sheet1.getRange('c6').copyTo(sheet2.getRange(lastRow,4), {contentsOnly:true}); 

    if (sheet1.getRange('B7') != " ") 
     sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow+1,1), {contentsOnly:true}); 
     sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow+1,2), {contentsOnly:true}); 
     sheet1.getRange('b7').copyTo(sheet2.getRange(lastRow+1,3), {contentsOnly:true}); 
     sheet1.getRange('c7').copyTo(sheet2.getRange(lastRow+1,4), {contentsOnly:true}); 

    if (sheet1.getRange('B8') != " ") 
     sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow+2,1), {contentsOnly:true}); 
     sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow+2,2), {contentsOnly:true}); 
     sheet1.getRange('b8').copyTo(sheet2.getRange(lastRow+2,3), {contentsOnly:true}); 
     sheet1.getRange('c8').copyTo(sheet2.getRange(lastRow+2,4), {contentsOnly:true}); 

} 

내 문제는 경우에도 항목 2와 3은 아직도 주문 번호와 날짜를 얻을 "데이터"시트에 비어 있다는 것입니다. 더 좋은 방법이 있나요?

+1

을 스크립트를 편집 한 사람에게 감사합니다. 그것은 위대한 작품. – Yannis

답변

1

당신은 몇 가지 잊어 버린 :

  1. getRange()를 당신이 직접 사용할 수 있습니다 아무것도하지 않는다; 말하자면 범위의 로컬 프록시입니다. 포함 된 데이터를 얻으려면 .get Range(). getValue()을 사용하여 범위의 왼쪽 위 셀 내용을 가져와야합니다.
  2. 블록이 블록이 아닌 경우! 모든 문장을 괄호로 묶어야합니다.
  3. 널 셀이 이 될지 확신 할 수 없습니다! = ""! 그러나, 나는, getValue() 자체가 목적에 부합한다고 생각합니다. getValue(). length> 0도 작동합니다.

또한 증분 카운터를 사용하면 "데이터"에서 빈 줄을 피할 수 있습니다.

그래서 코드는 다음과 같이 수 :

cntr = 0 
if (sheet1.getRange('B6').getValue()) { 
    sheet1.getRange('a2').copyTo(sheet2.getRange(lastRow + cntr,1), {contentsOnly:true}); 
    sheet1.getRange('b2').copyTo(sheet2.getRange(lastRow + cntr,2), {contentsOnly:true}); 
    sheet1.getRange('b6').copyTo(sheet2.getRange(lastRow + cntr,3), {contentsOnly:true}); 
    sheet1.getRange('c6').copyTo(sheet2.getRange(lastRow + cntr,4), {contentsOnly:true}); 
    cntr++; 
} 
/* next row */ 
if (. . . ) { 
    etc. 
    etc. 
    cntr++; 
} 
관련 문제