2013-07-16 126 views
0

我試圖使用腳本在Google文檔中將數據從一張表複製到另一張。兩張紙都是同一張電子表格文檔的一部分。如果列A中的值是「名稱」,我想將第一張表格中的信息複製到第二張表格中。 我有JavaScript的基本知識,並且到目前爲止設法提出以下內容。基於特定鍵值將數據從一張表複製到另一張

function copytoo(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);// selects the first sheet in  your spreadsheet 
    var data = sh.getDataRange().getValues();// data is a 2D array, index 0 = col A 
    var target = new Array();// this is a new array to collect data 
    for(n=0;n<data.length;++n){ // iterate in the array, row by row 
    if (data[n][0]=="Name"){ ;// if condition is true copy the whole row to target 
    taget.push(data[n]);// copy the whole row 
    }//if 
    }//for 
    var sh2=SpreadsheetApp.setActiveSheet(ss.getSheets()[1]); //second sheet of your spreadsheet 
    sh2.getRange(1,1,target.length,target[0].length).setValues();// paste the selected  values in the 2cond sheet in one batch write 
}//function 

當我運行上面 - 我得到如下:

TypeError: Cannot read property "length" from undefined. (line 13, file "Code")

+2

錯誤不清楚,或者您有什麼問題?哪一條是第13行? –

回答

1

問題的可能的來源:

taget.push(data[n]);// copy the whole row 
^^^^^ 

你大概就是這個意思target。正因爲如此,你會碰到一個問題:

target[0].length 

因爲你從來沒有推什麼target,沒有定義target[0],所以當然它沒有length財產。

即使你修復taget,你有這種錯誤的風險,除非你要麼保證有一個target[0]具有length財產,或當target.length === 0忽略操作。

+0

嗨@Mogsdad,我知道這是一箇舊帖子。但我只想問你是什麼意思「除非你保證有一個具有長度屬性的目標[0],或者當target.length === 0時跳過操作。」。我的意思是你如何做到這一點? – novice

+0

@novice請參閱[hasOwnProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty)。然後你可以使用if(target [0] && target [0] .hasOwnProperty(「length」)){..}'。 – Mogsdad

+0

謝謝@Mogsdad!我現在明白了。 :) – novice

相關問題