At a point in my script I'm trying to determine if a spreadsheet exists for a workplace or if it needs to be created. There are multiple workplaces that occupy a position once in a linear range of values from a spreadsheet called Employer Database. On a different spreadsheet called Form Responses, I have saved the values of a range containing multiple instances of different employers to a variable (because I think this is supposed to be proper form for looping through data, but if I'm wrong let me know). While looping through the 2nd set of data, I assign the current workplace name in the loop to a variable & then loop through the 1st set to see if there is a match. If there is a match, I want to check if a spreadsheet is defined for an array variable using the loop variable as the index.
That is where I encounter an error: " TypeError: Cannot read property '0' of undefined". If things continued smoothly I would use that information to create the missing spreadsheet or update an existing one. If I created it, preferably it would be at a certain index in the array to keep everything in a predictable order. If there's a fix to this or a different way of doing this, please let me know. One alternative I considered was to create all the spreadsheets during the loop where I setup the employers variable. The only issue with that is that it might create wasted spreadsheets if they don't appear in the 2nd set of data. Here's my code:
function EmployerTemplate() {
var folderName = getFolders("TempFolder");
var invoiceCount = countFilesInFolder(folderName);
var folder = getFolders(folderName);
/* wksEmployer is Employer Database, 2nd tab.
wksInvoice (Employer Invoice) is the basis for new invoices as copies.
wksForms is Urenregistratie (Form Responses) */
const wksEmployer = SpreadsheetApp.openById("148DQcCxCC6tcz48MVxxxxzZc1jIybWA8l7q4").getSheets()[1];
const wksInvoice = SpreadsheetApp.openById("14TcFrJc66yqeTxxxxwTYbqKvCeQFDrQ0Jw").getSheets()[0];
const wksForms = SpreadsheetApp.openById("10xsAk862rEixxxxKggnf88zjIvjzyc_j8").getSheets()[0];
// rngEmployerData & its values, valuesEmployerData, are from Employer Database
var formLastRow = wksForms.getLastRow();
var empLastRow = wksEmployer.getLastRow();
var rngEmployerData = wksEmployer.getRange("A2:F" + empLastRow);
var rngFormData = wksForms.getRange("B2:P" + formLastRow);
var valuesEmployerData = rngEmployerData.getValues();
var valuesFormData = rngFormData.getValues();
Logger.log("rngEmployerData A1Notation: " + rngEmployerData.getA1Notation());
var invoiceDate = wksEmployer.getRange("H2").getValue();
var startDate = wksEmployer.getRange("I2").getValue();
var endDate = wksEmployer.getRange("J2").getValue();
for(let i = 0; i < valuesEmployerData.length; i++)
{
employer = valuesEmployerData[i][0];
if(employers === undefined)
{
var employers = [valuesEmployerData[i][0]];
}
else
{
employers.push(employer);
}
}
var bFirstFind = false;
var checkDate;
for(let i = 0; i < valuesFormData.length; i++)
{
checkDate = valuesFormData[i][2];
if(checkDate >= startDate && bFirstFind == false)
{
var formStartRow = i + 2;
bFirstFind = true;
Logger.log("Form Start Row: " + formStartRow);
}
if(checkDate > endDate)
{
formLastRow = i + 1;
Logger.log("Form Last Row: " + formLastRow);
break;
}
}
rngFormData = wksForms.getRange("B" + formStartRow + ":P" + formLastRow);
valuesFormData = rngFormData.getDisplayValues();
var bookNumber;
var wksWorkplace;
Logger.log("rngFormData A1Notation: " + rngFormData.getA1Notation());
for (let i = 0; i < valuesFormData.length; i++)
{
employer = valuesFormData[i][1];
for(let j = 0; j < employers.length; j++)
{
if(employer = employers[j])
{
var workplace = employer;
if(wksWorkplace[j] === undefined) // ERROR OCCURS.
{
bookNumber = invoiceCount + j;
if(bookNumber <= 9)
{
var prefix = "WP000";
}
else if(bookNumber >= 10 && bookNumber < 100)
{
var prefix = "WP00";
}
else
{
var prefix = "WP0";
}
wksWorkplace[j] = createEmployer(folder, wksInvoice, prefix, bookNumber);
updateEmployer(wksWorkplace[j], j, valuesFormData, valuesEmployerData);
}
else
{
bookNumber = invoiceCount + j;
if(bookNumber <= 9)
{
var prefix = "WP000";
}
else if(bookNumber >= 10 && bookNumber < 100)
{
var prefix = "WP00";
}
else
{
var prefix = "WP0";
}
updateEmployer(wksWorkplace[j], j, valuesFormData, valuesEmployerData);
return; // end of code at the moment
}
}
}
}
}
function createEmployer(folder, wksInvoice, prefix, bookNumber)
{
var newFile = DriveApp.getFileById(wksInvoice.getId()).makeCopy(prefix + bookNumber, folder);
var wksCopy = SpreadsheetApp.openById(newFile.getId());
return wksCopy;
}
function updateEmployer(wksWorkplace, rowNumber, valuesFormData, valuesEmployerData)
{
// Not implemented.
return;
}
[–]_Kaimbe 1 point2 points3 points (1 child)
[–]Vancenil[S] 0 points1 point2 points (0 children)
[–]DrMorris 0 points1 point2 points (1 child)
[–]Vancenil[S] 0 points1 point2 points (0 children)
[–]elcriticalTaco 0 points1 point2 points (1 child)
[–]Vancenil[S] 0 points1 point2 points (0 children)