2012-09-18 2 views
1

3-15 행의 여러 열에 데이터가 있습니다. 해당 데이터 세트의 모든 고유 한 값을 찾고 하나의 열에 출력하려고합니다.google-apps-script의 문자로 증가

고유 기능은 한 번에 하나의 열만 수행하므로 내 용도로는 작동하지 않습니다.

새 시트를 열고 동일한 열에 값을 복사하여 붙여 넣을 스크립트를 작성 중입니다. 여러 열의 데이터를 하나의 긴 열로 결합합니다. 그런 다음 모든 데이터가 포함 된 단일 열에서 고유 한 데이터 집합을 실행하여 원래 데이터 집합의 모든 고유 값을 출력합니다 (항목! B3 : Z15)

필자는 코드를 작성했지만 작성 방법을 알 수는 없습니다 문자를 증가시킵니다. 이것을 달성하는 더 좋은 방법이 있다면 나는 제안에 개방적이지만 문자를 증가시키는 것이 가능한지 궁금하다.

function uniqueIngredients() { 

    var book = SpreadsheetApp.getActiveSpreadsheet(); 
    var r=1; // starting with row 1 new sheet 
    var d='B'; 
    for (i=1; i<4; i++){ //testing by running 3 iterations 
    var m = 'Ingredients!A'+r; //Intially return Ingredients!A1 then incremented by 11 ex A12 
    var c = 'Items!'+d+'4:'+d+'15'; // Initially return Items!B3:B15 then incremented by letter ex Items!C3:C15 
    r = r+12; // add 12 spaces before next copy (max number of ingredients for each item) 
    d++; 
    book.getRange(c).copyTo(book.getRange(m), {contentsOnly:true}); 
    } 
}; 

답변

6

당신은 오히려 A1 문자열 표기법보다 열 번호를 사용하는 getRange() 메소드에 대한 alternative parameter specification를 사용할 수 있습니다 도움을

덕분에, 여기에 내 현재 코드입니다. 이것은 증가하기 쉬울 것입니다.

값을 복사 할 때 블록 내에서 소스 범위를 가져오고 Javascript를 사용하여 1 열 배열로 변환 한 다음 값을 설정하는 것이 좋습니다 (더 효율적일 수 있음). : 말했다되고

function uniqueIngredients() { 
    var ss = SpreadsheetApp.getActive(); 
    var sourceValues = ss.getSheetByName('Items').getRange('A3:D15').getValues(); 
    var target = ss.getSheetByName('Ingredients'); 
    var result = []; 
    for (var i = 0; i < sourceValues[0].length; i++) { 
    for (var j = 0; j < sourceValues.length; j++) { 
     result.push([sourceValues[j][i]]); 
    } 
    } 
    target.getRange(1, 1, result.length, 1).setValues(result); 
} 

그리고 , 당신은 스프레드 시트 기능을 사용하여 최종 결과를 제공하기 위해 해결의 비트를 사용할 수있는 경우 :

=ArrayFormula(UNIQUE(TRANSPOSE(SPLIT(CONCATENATE('Items'!A3:D15&CHAR(9));CHAR(9))))) 
+0

감사합니다! 구현하기가 가장 쉬운 것처럼 마지막으로 사용하겠습니다. 나는 다른 코드에 대해서도 고맙게 생각한다. 나는 그것을 통해 어떻게 작동 하는지를 배우게 될 것이다. – EpiphanyMachine