2014-07-13 45 views
0

我正在使用谷歌电子表格作为成员的简单数据库,我想要创建一个用户界面来搜索他们(主要用户在技术上不是很熟练,并且有相当的分配与每个成员相关的数据,因此查看它作为电子表格可以有点tedius)谷歌应用程序脚本非常非常慢

我已经写了下面的脚本昨晚工作,但似乎运行如此之慢,今天超时了,我不知道为什么。

function findMember() { 
    // set spreadsheet variable 
    var SS = SpreadsheetApp.getActiveSpreadsheet(); 

    // set sheet variables 
    var memberSearchSheet = SS.getActiveSheet(); 
    var memberDataSheet = SS.getSheetByName("Member Data"); 

    // get the search variables 
    var searchFirstName = memberSearchSheet.getRange('C2').getValue(); 
    var searchLastName = memberSearchSheet.getRange('C3').getValue(); 

    // get last row of data 
    var lastRow = memberDataSheet.getLastRow(); 
    for (var i = 2;lastRow;i=i+1){ 
    if (searchFirstName == memberDataSheet.getRange('R'+i+'C2').getValue() && searchLastName == memberDataSheet.getRange('R'+i+'C3').getValue()){ 
     memberSearchSheet.getRange('C5').setValue(memberDataSheet.getRange('R'+i+'C5').getValue()); 
     //throw new Error("ouch") 
    } 
    } 

    // small pop up notification in bottom right corner .toast(message, title, display time) 
    //var message = "Your search for " + searchFirstName + " " + searchLastName + " is complete."; 
    //SS.toast(message,"Search Complete",15); 

}; 
+0

我会改变你的For循环:'用于(ⅰ= 2;我

+0

干杯固定该环的组合,并且答案我选择帮助配发:) –

回答

1

您可能试图在一个步骤中获取数组中的所有数据,然后快速将您的值与数组中的值进行比较。是这样的:

var sheet = SpreadsheetApp.getActive().getSheetByName("Member Data"); 
    var data = sheet.getDataRange().getValues(); 
    for (var i = 1; i < data.length; i++) { 
    if (data[i][0] == firstName && data[i][1] == secondName) { 
     throw("Found"); 
    } 
    }