2011-04-30 57 views
2

當我使用電子表格時,我決定使用Google腳本,只是爲了增加知識。但我沒有受過訓練,很快就卡住了。簡單的Google腳本不能正常工作

我看到YouTube上的一些代碼,不同的腳本,但我想我提取我需要什麼,能得到這個工作...

function y_add_up_function() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var range = sheet.getRange["I2:J15"]; 
    var data = range.getValues(); 
    var sum = 0; 

    for (var i = 0; i < 14; ++i) 
    { 
    var row = data[i]; 
    if(row[1] == "y") 
    { 
     sum = sum + row[0]; 
    } 
    } 
    return sum; 
} 

This is my spreadsheet。我想只是簡單的讓SS加起來,我已經打勾旁邊的一個價格y,但我得到的是一條錯誤:

TypeError: Cannot call method "getValues" of undefined. (Line 5)

請告訴我什麼,我做錯了^ _ ^! !

乾杯!

回答

5

該錯誤意味着您正嘗試在未定義的對象上調用方法。如果你看看你的代碼,你有range.getValues()。這意味着範圍未定義。因此,您需要查看範圍分配:var range = sheet.getRange [「I2:J15」]。這裏是問題,getRange是一個方法,需要用圓括號調用,即getRange(「I2:J15」)。

這裏是工作代碼:

function y_add_up_function() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var range = sheet.getRange("I2:J15"); // <-- fix here 
    var data = range.getValues(); 
    var sum = 0; 



    for (var i = 0; i < 14; ++i) 
    { 
    var row = data[i]; 
    if(row[1] == "y") 
    { 
     sum = sum + parseFloat(row[0].substring(2)); // <-- fix to get floats from "£ <number>" 
    } 
    } 
    return sum; 
} 

還要注意,因爲你必須在你的成本列英鎊的跡象,你需要剝去跡象得到一個數字。這裏我使用了.substring(2),但這不是非常安全的。如果你忘記把「英鎊」放在一個單元格中,數字將被錯誤地讀取。我建議將英鎊符號放在列標題中,或者在解析數字時使用更復雜的方法將其刪除。

你可以例如使用row [0] .replace(/^[0-9。]/g,'')。這將替換所有不是數字或小數點的字符。這沒有錯誤檢查,但我認爲在個人電子表格中就足夠了。

+0

哦男人你的王牌感謝很多(良好的教學技巧隊友!) – 2011-04-30 16:01:52

+0

@RyanTracey https://stackoverflow.com/help/someone-answers – tehhowch 2018-03-05 17:48:59