2017-10-18 33 views
0

我想写这个函数,理想情况下会返回一个单元格在谷歌电子表格的范围。我认为我提出的代码是可以的,并且通常可以工作,但不幸的是,由于此代码脚本超出了时间限制。如何获得值的第一个单元格的值等于一个特定的值

因此,我想知道是否有更好的(也是最重要的更快)的方式来获得有问题的单元格的位置。

这里是我已经得到了代码:

function appendNewToDashboardSS (folderId){ 

      var folderName = DriveApp.getFolderById('***').getName(); 


      var latestFileId = getLatestFileId('***');//get the id of the last uploaded file in the folder 
      Logger.log(latestFileId); 

      var formatedName = DriveApp.getFileById(latestFileId).getName().replace(".csv", "");//format the name so it doesn't include the .csv part 

      DriveApp.getFileById(latestFileId).setName(formatedName);//set the name 


      var ss = SpreadsheetApp.openById(latestFileId);//open the file 
      var rangeStart = 0; 
      var rowCount = ss.getLastRow(); 
      for (i=1; i <= rowCount; i++) { 

      var cellValue = ss.getRange("A" + i).getValue(); 

      if(cellValue===formatedName){ 
      rangeStart = i; //this is where the needed range would start 

      break; 
      } 
     } 
     Logger.log("range start" + rangeStart); 
} 

回答

2

你应该阅读整个工作表数据,并循环到结果数组而不是让一个每个单元格的数据之一。速度差异将非常明显。 这应该做的工作:

function appendNewToDashboardSS (folderId){ 
    var folderName = DriveApp.getFolderById('***').getName(); 
    var latestFileId = getLatestFileId('***');//get the id of the last uploaded file in the folder 
    Logger.log('latestFileId='+latestFileId); 
    var formatedName = DriveApp.getFileById(latestFileId).getName().split(".csv")[0];//keep only the part before .csv part 
    DriveApp.getFileById(latestFileId).setName(formatedName);//set the name 
    var ss = SpreadsheetApp.openById(latestFileId);//open the file 
    var rangeStart; 
    var data = ss.getActiveSheet().getDataRange().getValues(); 
    for (i=0; i <= data.lengt-1; i++) { 
    var cellValue = data[i][0]; 
    if(cellValue.split('.csv')[0]==formatedName){ 
     rangeStart = i+1; //this is where the needed range would start 
     break; 
    } 
    } 
    Logger.log("range start" + rangeStart); 
} 
相关问题