2012-09-18 20 views
1

我有第3-15行的多列數據。我想查找該數據集中的所有唯一值並將其輸出到一列中。谷歌應用程序腳本中的字母增量

獨特的功能一次只能做一列,所以它不適合我的目的。

我正在編寫一個腳本,它將打開一個新工作表並將這些值複製並粘貼到同一列(將多個列的數據合併到一個較長的列中)。然後我將在包含所有數據的單列上運行獨特功能,以獲得我原始數據集中所有唯一值的輸出(Items!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

您可以使用該getRange()方法,它使用列數字,而不是A1串符號的alternative parameter specification。這將更容易增加。這就是說,因爲您只複製了值,所以在塊中獲取源代碼範圍可能會更好(更高效),並使用Javascript轉換爲單列數組,然後設置值:

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

相關問題