Как мне перебрать все строки в моем листе, чтобы найти совпадение? - PullRequest
0 голосов
/ 24 сентября 2019

Я создаю сценарий с google appscript для

  • чтения файлов в папке
  • парсинга имени файла в папке
  • проверьте, чтоимя уже существует на листе
  • , если не добавить его в список
  • , если оно существует, проверьте другой столбец, чтобы увидеть, отправлено ли электронное письмо
  • , если да, ничего не делатьесли нет, отправьте электронное письмо.

Я пробовал индексировать, чтобы цикл перебрал диапазон.getValues ​​() Ни один из них не работает должным образом, как ожидалось.Данные имеют длину 3.

function myFunction() {
  getFileNameFromFolders('1TcR5oUKwH9hUG9xHBA6HuXQOr40etS5z');
}

function getFileNameFromFolders(folderID) {
  var folder = DriveApp.getFolderById(folderID);
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    var fileName = file.getName();
    var agentDetails = fileName.split("-");
    var agentID = agentDetails[0];
    var fileType = agentDetails[1];
    var fileUrl = file.getUrl();
    var fileDate = agentDetails[2];
    locateAgent(agentID, fileType, fileDate, fileUrl, fileName);
  }
}

function locateAgent(agentID, fileType, fileDate, url, uniqueKey) {
  Logger.log('locating ' + uniqueKey);
  var spreadSheet = SpreadsheetApp.openByUrl(SpreadsheetApp.getActiveSpreadsheet().getUrl());
  var sheet = spreadSheet.getSheets()[0];
  var range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 6)
  var data = range.getValues();
  for (var i in data) {
    if (data[i][5] == uniqueKey) {
      Logger.log('yes');
      break;
    }
    else { Logger.log('no');
    var newRange = sheet.appendRow([agentID,fileType, fileDate, url, 'r', uniqueKey]);}
  }
}

function sendEmails(email, fileUrl) {
  var asPDF = DriveApp.getFileById(getIdFromUrl(fileUrl));
  MailApp.sendEmail(email, 'test-email-with-agent-stuff-thing-i-dont-know-the-name', 'you should recieve a file named AID-2 as you are registered as 2', {
    name: 'Automatic Emailer Script from DOER',
    attachments: asPDF.getAs(MimeType.PDF)
  });
}

function getIdFromUrl(url) {
  return url.match(/[-\w]{25,}$/);
}

Цикл добавляется в список, даже если он существует.Возможно, я получаю концепцию.Если у вас есть другой способ, которым я могу это сделать, я был бы очень признателен.

1 Ответ

2 голосов
/ 24 сентября 2019

Вы можете реализовать логическую переменную, которая будет иметь значение true, если uniqueKey существует alredy

Измените свой код следующим образом:

function locateAgent(agentID, fileType, fileDate, url, uniqueKey) {
  Logger.log('locating ' + uniqueKey);
  var spreadSheet = SpreadsheetApp.openByUrl(SpreadsheetApp.getActiveSpreadsheet().getUrl());
  var sheet = spreadSheet.getSheets()[0];
  var range = sheet.getRange(2, 1, sheet.getLastRow()-1, 6)
  var data = range.getValues();
 var exists=false;
  for (var i in data) {
    if (data[i][5] == uniqueKey){
      exists=true;
      var row=i;
      break;
    }
 }
  if(exists==false){
    Logger.log('it does not exist yet');
    var insertRange = sheet.getRange(sheet.getLastRow()+1, 1, 1, 6); 
    //adapt according to your needs:
    insertRange.setValues([[agentID],[fileType],[fileDate],[url],[],[uniqueKey]]);
  }else{
   //implement here your statement to check status column, e.g.:
    if(data[row][status column]!="Sent"){
          sendEmails(...);
     }
  } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...