2017-03-06 65 views
0

我想循環遍歷google表格中的整行,並將一些數據從一個表格複製到另一個表格。隨着時間的推移,名單會變得更長。使用Google Apps腳本遍歷整個列

更具體地說:如果在列B中輸入等於「藍色」,則將列A和C中的值複製到另一個表中。 對列中的所有列執行此操作。

鏈接到我的電子表格:https://docs.google.com/spreadsheets/d/1xnLygpuJnpDfnF6LdR41gN74gWy8mxhVnQJ7i3hv1NA/edit?usp=sharing

  • 當顏色不等於藍色的循環停止。爲什麼?
  • 正如你所看到的,我使用了一個for循環。那是甚至要走的路嗎?
  • 我可以做任何關於代碼執行的速度嗎?

任何意見,提示或幫助,高度讚賞。

問候!

回答

3

您已輸入板命名爲「列表「,我命名輸出表」輸出「。這是代碼。

function condCopy() 
{ 
    var s = SpreadsheetApp.getActiveSpreadsheet(); 
    var sht = s.getSheetByName('List') 
    var drng = sht.getDataRange(); 
    var rng = sht.getRange(2,1, drng.getLastRow()-1,drng.getLastColumn()); 
    var rngA = rng.getValues();//Array of input values 
    var rngB = [];//Array where values that past the condition will go 
    var b = 0;//Output iterator 
    for(var i = 0; i < rngA.length; i++) 
    { 
    if(rngA[i][1] == 'blue') 
    { 
     rngB[b]=[];//Initial new array 
     rngB[b].push(rngA[i][0],rngA[i][2]); 
     b++; 
    } 
    } 
    var shtout = s.getSheetByName('Output'); 
    var outrng = shtout.getRange(2,1,rngB.length,2);//Make the output range the same size as the output array 
    outrng.setValues(rngB); 
} 
1

您有2個選項。首先是使用Google表格中的標準query()函數來獲取值。這裏的缺點是它只是價值的參考。所以,你不能對它們重新排序等。爲了利用這一點,把這個單元格A1,它會拉頭和檢索從A列中的值和C:

=QUERY(A:C, "select A, C where B = 'blue'", 1) 

對於谷歌Apps腳本答案: 這將遍歷您的清單表,每一行,其中列B是藍色將保存在列A和列A和新的工作表和B的值C:

function doIt(){ 
    var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet4"); 
    var lastRow = activeSheet.getLastRow(); 
    var lastCol = activeSheet.getLastColumn(); 
    var targetValues = []; 

    var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("List"); 
    var lastSourceRow = sourceSheet.getLastRow(); 
    var lastSourceCol = sourceSheet.getLastColumn(); 

    var sourceRange = sourceSheet.getRange(1, 1, lastSourceRow, lastSourceCol); 
    var sourceData = sourceRange.getValues(); 

    var activeRow = 0; 

    //Loop through every retrieved row from the Source 
    for (row in sourceData) { 
    //IF Column B in this row has 'blue', then work on it. 
    if (sourceData[row][1] === 'blue') { 
     //Save it ta a temporary variable 
     var tempvalue = [sourceData[row][0], sourceData[row][2]]; 
     //then push that into the variables which holds all the new values to be returned 
     targetValues.push(tempvalue); 
    } 
    } 

    //Save the new range to the appropriate sheet starting at the last empty row 
    activeSheet.getRange(lastRow + 1, 1 , targetValues.length, 2).setValues(targetValues); 
} 

當然,你可以通過通過替換2行來測試函數的值。第一,限定功能:

function doIt(testingvar){ 

傳遞變量稱爲testingvar,和測試線替換與傳遞的變量硬編碼的測試:

if (sourceData[row][1] === testingvar) {