I'm trying to create a google script that counts the number of files in a folder, then assigns this number to a variable that can be used to define the size of an array.
- ID folder
- get files in folder
- set counter = filecount
- use counter to define array size
my attempt:
function setarraytofilecount() {
var dealspsfolderid = "ID goes here";
var dealspsfolder = DriveApp.getFolderById(dealspsfolderid);
var ssfiles = dealspsfolder.getFiles();
var count, file;
count = 0;
while (ssfiles.hasNext()) {
count++;
file = ssfiles.next();
}
var nesteddata = new Array(count);
I'm expecting to create an array with a size equal to the number of files in the folder, but I don't believe this is what is happening.
The script runs, there is more after this I'm leaving out for simplicity. I think the problem may be that I cannot use the variable count in new Array(), is that correct?
Here is the whole script:
function autoUpdateFiles() {
// set the folder to pull files from
var dealspsfolderid = "removed";
var dealspsfolder = DriveApp.getFolderById(dealspsfolderid);
var ssfiles = dealspsfolder.getFiles();
var trackerurl = "removed";
var sstoupdate = SpreadsheetApp.openByUrl(trackerurl);
// set the sheet to update
var sheettoupdate = sstoupdate.getSheetByName('AutoTracker');
// indicates current deal row
var rowcounter = 0;
// get number of files in the folder which we can use to define array size
var count,file;//Define variables without assigning a value
count = 0;
while (ssfiles.hasNext()) {
count++;
file = ssfiles.next();
}
// nested array of row data arrays. i.e. each index is an array of a row
var nesteddata = new Array();
nesteddata.length = count;
for(i = 0; i < nesteddata.length; i++){
nesteddata[i] = new Array(158);
}
// nested array of row data arrays. i.e. each index is an array of a row
var URLarray = new Array();
URLarray.length = count;
for(i = 0; i < URLarray.length; i++){
URLarray[i] = new Array(1);
}
// iterate through each file
while (ssfiles.hasNext()) {
// pull the next file
var file = ssfiles.next();
// get the url
Logger.log(file.getUrl());
// activate the sheet
var spreadsheet = SpreadsheetApp.open(file);
var activesheet = spreadsheet.getSheets()[0].activate();
// pull values from the files
// ranges are ROW, COLUMN
var URL = file.getUrl();
var colC = activesheet.getRange(3, 3, 158 ,3).getValues();
// transition the vertical multidimensional array returned into flat array for a row
for(var i = 0; i < colC.length; i++){
nesteddata[rowcounter][i]=colC[i][0];
}
for(var i = 0; i < URLarray.length; i++){
URLarray[rowcounter]= [URL];
}
rowcounter ++;
}
// write out to the sheet
sheettoupdate.getRange(2,1,nesteddata.length,1).setValues(URLarray);
sheettoupdate.getRange(2,2,nesteddata.length,158).setValues(nesteddata);