2013-01-31 136 views
0

我試圖寫在谷歌Apps腳本在腳本,由一個片,並將其複製到另一個工作表需要小區信息,都只是抓住某些列顯示在第二片,也是一個條件基於特定列中單元格內的值。以下是我迄今爲止:數據複製與谷歌Apps腳本

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」循環裏面,但我想要的數據複製到下一個可用行的兩個片。我想我會用這樣的: 'getLastRow + 1' 或類似的東西。由於數據量及其目的,我需要此代碼儘可能高效。我對編程相當陌生,所以請詳細解釋一下,再次感謝。

+0

你檢查代碼審查? –

+0

你談論行並調用你的變量'Row',但是你的代碼抓住了一列......哪一個是正確的?代碼或文本?使用getRange()時,它具有以下參數:行索引,列索引,行高,列寬。有了你的價值觀,它肯定是一個專欄......你爲什麼稱它爲Row?它讓事情變得模棱兩可,並且令人感到困惑,你不覺得嗎? :-) –

+0

@Sergeinsas感謝您注意到這是一個開始。是否要堅持列功能或切換到行是我需要考慮的事情。但是,因爲我用「的GetValues」,而根據谷歌創建了一個二維數組,我需要弄清楚究竟如何正確地構建這些陣列以及如何將它們打印到目標頁面。我仍然有點失落...... – davo2323

回答

0

我不知道我的理解正是你想做的事,但 - 從我誤 - 此代碼段應該給你一個更好的方式開始與...

(我加了幾點意見在代碼本身解釋)

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 
} 
}