2017-10-18 21 views
0

J'essaie d'écrire cette fonction qui, idéalement, retournera la plage d'une cellule dans une feuille de calcul google. Je pense que le code que j'ai trouvé est correct et fonctionnerait normalement, mais malheureusement, à cause de ce code, le script dépasse les limites de temps. Par conséquent, je me demande s'il existe une meilleure façon (et surtout la plus rapide) d'obtenir la position de la cellule en question.Comment obtenir la première cellule dans la plage dont la valeur est égale à une valeur spécifique

Voici le code que j'ai:

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

Répondre

2

vous devriez lire l'ensemble des données de la feuille et la boucle dans le tableau résultant au lieu d'obtenir des données de chaque cellule, un par un. La différence de vitesse sera vraiment perceptible. Cela devrait faire le travail:

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