Ben Barsocchini
Ben Barsocchini

Reputation: 9

TypeError: Cannot find function hasNext in object (Folder with date ID)

I'm new to coding in javascript and google apps. I'm making a database that will automatically update new users into an aggregate sheet nightly.

My searchfolder() function won't execute because i keep getting the error "TypeError: Cannot find function hasNext in object Thu Jul 14 09:48:01 PDT 2016 INFO: Target. (line 24, file working daily)"

var files has .getfiles after DriveApp.getFolderById(folderId) so i haven't the slightest idea what the problem is

CODE:

var counter = 0;

function timeStamp(){
counter= (counter+1)
}

var files = "null"

function searchFolder() {
  var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder
  // Log the name of every file in the folder.
 var files = DriveApp.getFolderById(folderId).getFiles(); //log files in      
 folder
  while (files.hasNext()) { //loop log files in folder
  var file = files.next(); //log files in folder
  Logger.log(file.getName()); //logs name of file in folder
  var files = Logger.getLog();
  }
}

function autoUpdate(){ //updates monthly from newly imported daily
  if (counter == 1){ //counter is made to be 1 when day is uploaded to 
  monthly
  var ss =    
  SpreadsheetApp.openById("1lH9Y12P2Q2OFndIJoAU48ePggXFc9WGcWjolZMcABoc"); 
  //defines target spreadsheet ie monthly
  SpreadsheetApp.setActiveSpreadsheet(ss); //sets target spreadsheet as 
  active
  var range= ss.getRange("A1:A1"); 
  range.activate;  // activates range
  range.setValue('=IMPORTRANGE("1K7Rj4QK-  
  EVjf8lZ0BSew7iDeCtktqWjzgjoaVPe5jSc","sheet1!A1:G6")'); //Puts in 
  IMPORTRANGE into target as a STRING value (just words). Once it hits the 
  sheet, then SHEETS executes IMPORTRANGE not SCRIPTS. In Source sheet, 
  range is selected to import to target (ie A1:G6)
  counter=(counter-1)
  }
}

//searchFolder();
timeStamp();
autoUpdate();

Upvotes: 0

Views: 2462

Answers (1)

user6586783
user6586783

Reputation:

You declared variable files two times. Also, pushing into log and then getting logs back is bad practice. Better use array instead. You got an error because variable files where you store file names is changed to log context after first loop, which means that there is no more function hasNext inside your files object (it is not of type string).

var counter = 0;

function timeStamp(){
counter= (counter+1)
}

var files = [];

function searchFolder() {
  var folderId = '0B6wmHZ5c0fzfTjI1bFpKOHI3N3M'; // test folder
  // Log the name of every file in the folder.
 var filesN = DriveApp.getFolderById(folderId).getFiles(); //log files in folder
  while (filesN.hasNext()) files.push(filesN.next().getName());
}

function autoUpdate(){ //updates monthly from newly imported daily
  if (counter == 1){ //counter is made to be 1 when day is uploaded to monthly
  var ss = SpreadsheetApp.openById("1lH9Y12P2Q2OFndIJoAU48ePggXFc9WGcWjolZMcABoc"); 
  //defines target spreadsheet ie monthly
  SpreadsheetApp.setActiveSpreadsheet(ss); //sets target spreadsheet as 
  active
  var range= ss.getRange("A1:A1"); 
  range.activate;  // activates range
  range.setValue('=IMPORTRANGE("1K7Rj4QK-EVjf8lZ0BSew7iDeCtktqWjzgjoaVPe5jSc","sheet1!A1:G6")'); //Puts in IMPORTRANGE into target as a STRING value (just words). Once it hits the sheet, then SHEETS executes IMPORTRANGE not SCRIPTS. In Source sheet, range is selected to import to target (ie A1:G6)
  counter=(counter-1)
  }
}

searchFolder(); // After this function all file names are stored in variable `files`
timeStamp();
autoUpdate();

If you want to log all files in folder too, you can execute Logger.log(files.join('\n'));

Upvotes: 0

Related Questions