我试图让我的脚本不超过最大执行时间,但我不确定如何优化我的代码。真正挂起的部分是文件是 APR 时。它必须解压缩 69 个文件,将它们转换为 Google 文档格式,然后覆盖 Google Sheet 上的现有标签。谢谢!
//version 1_20200306
function doGet(e) {
try {
var rn = e.parameter.responseNumber; // takes the response number as a parameter
rn = Number(rn); // sets the response number into a variable
rn = rn + 1; // increments the response number by 1 to designate the row number
// begins processing the report form entry
var reportStatus = processReportForm(rn);
// if a good status is returned then the script redirects to the success page
if (reportStatus == "good") {
var output = HtmlService.createHtmlOutputFromFile(reportStatus);
return output;
}
}
catch(err) {
var output = HtmlService.createHtmlOutputFromFile('failure');
return output;
}
};
// gets the most recent file added to the folder
function getLatestFileId(recentFileFolder){
var folder = DriveApp.getFoldersByName(recentFileFolder);
var files = folder.next().getFiles();
var lastFileId = files.next().getId();
return lastFileId.toString();
};
// checks to see if demo report code is present
function demoCheckReportCode(rcCheck,rType) {
if(rcCheck == 'demo' && rType == 'APR') {
var rcDemoCheckName = '1vH4SidDb6QctTdBtvIUxjpE3RRmZPMo8_fQcNUJqWV0';
} else if (rcCheck == "demo" && rType == 'SysPM') {
var rcDemoCheckName = '1D2QJkM0odQBQia9Q2qHGwC_iKHidfvfbQv1xDR6yygk';
} else if (rcCheck == "demo" && rType == 'SysPM Resubmitted') {
var rcDemoCheckName = '1D2QJkM0odQBQia9Q2qHGwC_iKHidfvfbQv1xDR6yygk';
}else if (rcCheck == "demo" && rType == 'CSV') {
var rcDemoCheckName = '1Wqi6qykTMlMCaoDF1JfE1bOk0H_SykydtCnC2jFoTgI';
} else {
var rcDemoCheckName = rcCheck;
}
return rcDemoCheckName;
};
// checks to see if report code is demo and returns the folder ID to use
function demoCheckFolderId(fIdCheck) {
if (fIdCheck == '1vH4SidDb6QctTdBtvIUxjpE3RRmZPMo8_fQcNUJqWV0' ||
fIdCheck == '1D2QJkM0odQBQia9Q2qHGwC_iKHidfvfbQv1xDR6yygk' ||
fIdCheck == '1Wqi6qykTMlMCaoDF1JfE1bOk0H_SykydtCnC2jFoTgI') {
var rcDemoCheckId = '1b-1Ll2O1ZsDztzwoGUnNiPbAVq5-bHXa';
} else {
var rcDemoCheckId = getFolderByName(fIdCheck);
}
return rcDemoCheckId;
};
function processReportForm(rNumber) {
var rsId = '11NR47rtjTtdYDK7ZmXDZ38VCC9xRBsiwrixNXfqbjOk'; // ID of Report Submission Form
var rs = SpreadsheetApp.openById(rsId)
var sheet = rs.getSheets()[0];
var rowNumber = rNumber;
var contactName = sheet.getRange('E' + rowNumber).getValue();
var reportFileName = sheet.getRange('F' + rowNumber).getValue();
var dashboardName = sheet.getRange('G' + rowNumber).getValue();
var reportCode = sheet.getRange('H' + rowNumber).getValue();
var emailAddress = sheet.getRange('I' + rowNumber).getValue();
var info = sheet.getRange('M' + rowNumber).getValue();
var type = sheet.getRange('K' + rowNumber).getValue();
var period = sheet.getRange('L' + rowNumber).getValue();
var dataSheetName = 'DATA';
// checks to see if demo report is being used
reportCode = demoCheckReportCode(reportCode,type);
// checks to see if folder has files in it
var etlStatus = checkFolder(reportCode);
// returns status of etl
if (etlStatus == reportCode) {
return etlStatus;
}
// takes input form info and adds it to data sheet
var ds = SpreadsheetApp.openById(reportCode)
var dataSheet = ds.getSheets()[0];
if(type == 'SysPM') {
dataSheet.getRange('B8').setValue('NO');
} else if(type == 'SysPM Resubmitted') {
dataSheet.getRange('B8').setValue('YES');
}
// processes uploaded data
importData(type,reportCode,reportFileName,dataSheetName);
dataSheet.getRange('B2').setValue(dashboardName);
dataSheet.getRange('B3').setValue(period);
dataSheet.getRange('B4').setValue(info);
// returns etl status
return etlStatus;
};
function importData(tc,rc,rfn,dsn) {
// demo report check folder ID
var folderId = demoCheckFolderId(rc);
var spreadsheet = rc; // spreadsheet where data goes
var reportName = rfn; // report file name
// checks report type
if(tc == 'APR') {
// unzip report with csv files and delete report file
unZipItAPR(folderId,reportName);
var vFolder = DriveApp.getFolderById(folderId); // gets folder ID
var vFiles = vFolder.getFiles(); // populates with a list of files in the folder
// gets the names of the files in the folder
while (vFiles.hasNext()) {
var file = vFiles.next();
var csvName = file.getName();
if (csvName != 'Q4a.csv'
&& csvName != 'Q6e.csv'
&& csvName != 'Q6f.csv'
&& csvName != 'Q7b.csv'
&& csvName != 'Q8b.csv'
&& csvName != 'Q9a.csv'
&& csvName != 'Q9b.csv') {
// imports csv files into spreadsheet
importFile(file.getName(),folderId,spreadsheet);
}
}
// converts csv files to Google Sheets format
convert(folderId);
var csvFiles = vFolder.getFiles();
// copies files into data folder
while (csvFiles.hasNext()) {
var file = csvFiles.next();
var Q5aSheetName = file.getName();
var csvSheet = SpreadsheetApp.openById(file.getId());
var Q5aSheet = csvSheet.getSheets()[0];
var testValue1 = Q5aSheet.getRange('A1').getValue();
var testValue2 = Q5aSheet.getRange('B1').getValue();
if (testValue1 == '' && testValue2 == '') {
Q5aSheet.deleteRow(1);
}
// clones the report sheets to the data sheet
cloneGoogleSheet(file.getId(),spreadsheet,Q5aSheetName,Q5aSheetName);
}
// checks report type
} else if(tc == 'SysPM' || tc == 'SysPM Resubmitted') {
// converts xls to google sheets format
var sourceFileId = convertExceltoGoogleSpreadsheet(folderId,reportName);
if(tc == 'SysPM') {
var sourceSheetNameOne = 'SysPMSummary2016_1';
var destSheetNameOne = 'SysPMSummary2016_1';
} else if(tc == 'SysPM Resubmitted') {
var sourceSheetNameOne = 'SysPMSummary2016Rev';
var destSheetNameOne = 'SysPMSummary2016Rev';
}
var sourceSheetNameTwo = 'SysPMSummary';
var destSheetNameTwo = 'SysPMSummary';
// clones the report sheets to the data sheet
cloneGoogleSheet(sourceFileId,spreadsheet,sourceSheetNameOne,destSheetNameOne);
cloneGoogleSheet(sourceFileId,spreadsheet,sourceSheetNameTwo,destSheetNameTwo);
} else if(tc == 'CSV') {
// unzip report with csv files and delete report file
unZipItCSV(folderId,reportName);
// converts csv files to Google Sheets format
convert(folderId);
var vFolder = DriveApp.getFolderById(folderId); // gets folder ID
var vFiles = vFolder.getFiles(); // populates with a list of files in the folder
var thisFile = DriveApp.getFileById(rc);
var parentFold = thisFile.getParents(); // Get all parents - normally just one parent
var targetFolder = parentFold.next(); // Get the first parent folder
var targetFolderFiles = targetFolder.getFiles(); // populates with a list of files in the folder
var dateFile = DriveApp.getFileById('1jj97O7RxPQzV3kpqUlYwI5HIQS6BcSsV-w0HAiJUTio'); //Master Dates file id
// makes a copy of the Master Dates file into the upload folder
dateFile.makeCopy(vFolder).setName(dateFile.getName());
// copies files into data folder
while (vFiles.hasNext()) {
var file = vFiles.next();
if (file.getName() == 'Client'||
file.getName() == 'Enrollment'||
file.getName() == 'Exit'||
file.getName() == 'HealthAndDV'||
file.getName() == 'Master Dates'||
file.getName() == 'Project') {
// removes unnecessary columns
deleteColumns(file.getId(),file.getName());
// gets current file/sheet name
var sheetName = file.getName();
// clones the report sheets to the data sheet
cloneGoogleSheet(file.getId(),spreadsheet,sheetName,sheetName);
}
}
}
};
// unzips APR zip file
function unZipItAPR(fo,na) {
var theFolder = DriveApp.getFolderById(fo); // folder with zipped report
var theFile = theFolder.getFilesByName(na); // gets the contents of the zip file
var fileBlob = theFile.next().getBlob(); // stores the files for processing
fileBlob.setContentType("application/zip"); //sets the correct file type for the zip file
var unZippedFiles = Utilities.unzip(fileBlob);
// unzips the files into the folder
for (var i in unZippedFiles) {
if (unZippedFiles[i].getName() != 'Q4a.csv'
&& unZippedFiles[i].getName() != 'Q6e.csv'
&& unZippedFiles[i].getName() != 'Q6f.csv'
&& unZippedFiles[i].getName() != 'Q7b.csv'
&& unZippedFiles[i].getName() != 'Q8b.csv'
&& unZippedFiles[i].getName() != 'Q9a.csv'
&& unZippedFiles[i].getName() != 'Q9b.csv') {
var newDriveFile = DriveApp.createFile(unZippedFiles[i]);
var zipFile = newDriveFile.getId();
theFolder.addFile(DriveApp.getFileById(zipFile));
DriveApp.removeFile(DriveApp.getFileById(zipFile));
}
}
// removes file after it has been unzipped
DriveApp.getFilesByName(na).next().setTrashed(true);
};
// unzips CSV zip file
function unZipItCSV(fo,na) {
var theFolder = DriveApp.getFolderById(fo); // folder with zipped report
var theFile = theFolder.getFilesByName(na); // gets the contents of the zip file
var fileBlob = theFile.next().getBlob(); // stores the files for processing
fileBlob.setContentType("application/zip"); // sets the correct file type for the zip file
var unZippedFiles = Utilities.unzip(fileBlob);
// unzips the files into the folder
for (var i in unZippedFiles) {
var csvZipName = unZippedFiles[i].getName();
if (csvZipName == 'Client.csv'
|| csvZipName == 'Enrollment.csv'
|| csvZipName == 'Exit.csv'
|| csvZipName == 'HealthAndDV.csv'
|| csvZipName == 'Project.csv') {
var newDriveFile = DriveApp.createFile(unZippedFiles[i]);
var zipFile = newDriveFile.getId();
theFolder.addFile(DriveApp.getFileById(zipFile));
DriveApp.removeFile(DriveApp.getFileById(zipFile));
}
}
// removes file after it has been unzipped
DriveApp.getFilesByName(na).next().setTrashed(true);
};
// imports files into data spreadsheet
function importFile(fiName,foId,spId) {
var fSource = DriveApp.getFolderById(foId); // folder where csv files are saved
var fi = fSource.getFilesByName(fiName); // latest report file
var ss = SpreadsheetApp.openById(spId); // data_sheet_id = id of spreadsheet that holds the data to be updated with new report data
if ( fi.hasNext() ) { // proceed if csv file exists in the folder
var file = fi.next();
var csv = file.getBlob().getDataAsString();
var csvData = CSVToArray(csv); // see below for CSVToArray function
// removes the extension from file name
var fiNameShort = fiName.split('.').slice(0, -1).join('.');
var sheet = ss.getSheetByName(fiNameShort);
// loop through csv data array and insert (append) as rows into 'DATA' sheet
for ( var i=0, lenCsv=csvData.length; i<lenCsv; i++ ) {
sheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
}
// trashes the csv file
Drive.Files.remove(file.getId());
}
};
// http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm
// This will parse a delimited string into an array of
// arrays. The default delimiter is the comma, but this
// can be overriden in the second argument.
function CSVToArray( strData, strDelimiter ) {
// check to see if the delimiter is defined. If not,
// then default to COMMA.
strDelimiter = (strDelimiter || ",");
// create a regular expression to parse the CSV values.
var objPattern = new RegExp(
(
// delimiters.
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
// quoted fields.
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
// standard fields.
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
// create an array to hold our data. Give the array
// a default empty first row.
var arrData = [[]];
// create an array to hold our individual pattern
// matching groups.
var arrMatches = null;
// keep looping over the regular expression matches
// until we can no longer find a match.
while (arrMatches = objPattern.exec( strData )){
// get the delimiter that was found.
var strMatchedDelimiter = arrMatches[ 1 ];
// check to see if the given delimiter has a length
// (is not the start of string) and if it matches
// field delimiter. If id does not, then we know
// that this delimiter is a row delimiter.
if (
strMatchedDelimiter.length &&
(strMatchedDelimiter != strDelimiter)
){
// since we have reached a new row of data,
// add an empty row to our data array.
arrData.push( [] );
}
// now that we have our delimiter out of the way,
// let's check to see which kind of value we
// captured (quoted or unquoted).
if (arrMatches[ 2 ]){
// we found a quoted value. When we capture
// this value, unescape any double quotes.
var strMatchedValue = arrMatches[ 2 ].replace(
new RegExp( "\"\"", "g" ),
"\""
);
} else {
// we found a non-quoted value.
var strMatchedValue = arrMatches[ 3 ];
}
// now that we have our value string, let's add
// it to the data array.
arrData[ arrData.length - 1 ].push( strMatchedValue );
}
// return the parsed data.
return( arrData );
};
// function that returns folder ID based on folder name
function getFolderByName(folderName) {
var folders = DriveApp.getFoldersByName(folderName);
var folderID = null;
if (folders.hasNext()) {
folderID = folders.next().getId();
}
return folderID;
};
// checks the status of the folder to make sure there aren't any files already in it
function checkFolder(cc) {
var ccStatus = cc;
// checks if demo report is being used
var cFolderId = demoCheckFolderId(ccStatus);
var cFolder = DriveApp.getFolderById(cFolderId);
var recentFileId = getLatestFileId(cFolder);
var cFiles = cFolder.getFiles();
// cleans up any previously leftover files leaving the current report file alone
while (cFiles.hasNext()) {
var file = cFiles.next();
if (file.getId() != recentFileId) {
Drive.Files.remove(file.getId());
}
}
ccStatus = 'good';
return ccStatus;
};
// converts xls file to google sheet
function convertExceltoGoogleSpreadsheet(foId,fiNa) {
fiNa = fiNa || "microsoft-excel.xls";
var folderId = foId;
var convertFolder = DriveApp.getFolderById(folderId);
var excelFile = convertFolder.getFiles().next();
var fileId = excelFile.getId();
var blob = excelFile.getBlob();
var resource = {
title: excelFile.getName().replace(/.xls?/, ""),
parents: [{ id: folderId }],
key: fileId
};
var createFile = Drive.Files.insert(resource, blob, {
convert: true
});
Drive.Files.remove(excelFile.getId());
return createFile.id;
};
// copy data from Google Sheet A to Google Sheet B
// Credit: @chrislkeller
function cloneGoogleSheet(ssA,ssB,ssName,sdName) {
// source doc
var ssDoc = SpreadsheetApp.openById(ssA);
// source sheet
var sSheet = ssDoc.getSheetByName(ssName);
// get full range of data
var SRange = sSheet.getDataRange();
// get A1 notation identifying the range
var A1Range = SRange.getA1Notation();
// get the data values in range
var SData = SRange.getValues();
// target spreadsheet
var tss = SpreadsheetApp.openById(ssB);
// target sheet
var ts = tss.getSheetByName(sdName);
// clear the Google Sheet before copy
ts.clear({contentsOnly: true});
// set the target range to the values of the source data
ts.getRange(A1Range).setValues(SData);
};
// converts files in folder to Google format
function convert(convertFolder) {
var folder = DriveApp.getFolderById(convertFolder);
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
Drive.Files.copy({}, file.getId(), {convert: true});
Drive.Files.remove(file.getId());
}
};
// deletes unused columns in csv to save space
function deleteColumns(csvSheetId, csvSheetName) {
var spreadsheet = SpreadsheetApp.openById(csvSheetId)
var csName = csvSheetName;
spreadsheet.setActiveSheet(spreadsheet.getSheetByName(csName), true);
spreadsheet.getRange('1:1').activate();
var header = spreadsheet.getRange('1:1');
var deleteValues = (header.getValues());
var counter = 1;
for (i=0; i<deleteValues[0].length; i++) {
if
(
deleteValues[0][i] == 'FirstName' ||
deleteValues[0][i] == 'MiddleName' ||
deleteValues[0][i] == 'LastName' ||
deleteValues[0][i] == 'SSN' ||
deleteValues[0][i] == 'NameSuffix' ||
deleteValues[0][i] == 'NameDataQuality' ||
deleteValues[0][i] == 'SSNDataQuality' ||
deleteValues[0][i] == 'DOBDataQuality' ||
deleteValues[0][i] == 'YearEnteredService' ||
deleteValues[0][i] == 'YearSeparated' ||
deleteValues[0][i] == 'WorldWarII' ||
deleteValues[0][i] == 'KoreanWar' ||
deleteValues[0][i] == 'VietnamWar' ||
deleteValues[0][i] == 'DesertStorm' ||
deleteValues[0][i] == 'AfghanistanOEF' ||
deleteValues[0][i] == 'IraqOIF' ||
deleteValues[0][i] == 'IraqOND' ||
deleteValues[0][i] == 'OtherTheater' ||
deleteValues[0][i] == 'MilitaryBranch' ||
deleteValues[0][i] == 'DischargeStatus' ||
deleteValues[0][i] == 'DateCreated' ||
deleteValues[0][i] == 'DateUpdated' ||
deleteValues[0][i] == 'UserID' ||
deleteValues[0][i] == 'DateDeleted' ||
deleteValues[0][i] == 'ExportID' ||
deleteValues[0][i] == 'OrganizationID' ||
deleteValues[0][i] == 'ProjectName' ||
deleteValues[0][i] == 'OperatingStartDate' ||
deleteValues[0][i] == 'OperatingEndDate' ||
deleteValues[0][i] == 'ContinuumProject' ||
deleteValues[0][i] == 'HousingType' ||
deleteValues[0][i] == 'ResidentialAffiliation' ||
deleteValues[0][i] == 'TrackingMethod' ||
deleteValues[0][i] == 'HMISParticipatingProject' ||
deleteValues[0][i] == 'TargetPopulation' ||
deleteValues[0][i] == 'PITCount' ||
deleteValues[0][i] == 'DateCreated' ||
deleteValues[0][i] == 'DateUpdated' ||
deleteValues[0][i] == 'UserID' ||
deleteValues[0][i] == 'DateDeleted' ||
deleteValues[0][i] == 'HealthAndDVID' ||
deleteValues[0][i] == 'InformationDate' ||
deleteValues[0][i] == 'WhenOccurred' ||
deleteValues[0][i] == 'CurrentlyFleeing' ||
deleteValues[0][i] == 'GeneralHealthStatus' ||
deleteValues[0][i] == 'DentalHealthStatus' ||
deleteValues[0][i] == 'MentalHealthStatus' ||
deleteValues[0][i] == 'PregnancyStatus' ||
deleteValues[0][i] == 'DueDate' ||
deleteValues[0][i] == 'DataCollectionStage' ||
deleteValues[0][i] == 'ExitID' ||
deleteValues[0][i] == 'OtherDestination' ||
deleteValues[0][i] == 'HousingAssessment' ||
deleteValues[0][i] == 'SubsidyInformation' ||
deleteValues[0][i] == 'ProjectCompletionStatus' ||
deleteValues[0][i] == 'EarlyExitReason' ||
deleteValues[0][i] == 'ExchangeForSex' ||
deleteValues[0][i] == 'ExchangeForSexPastThreeMonths' ||
deleteValues[0][i] == 'CountOfExchangeForSex' ||
deleteValues[0][i] == 'ExchangeForSexPastThreeMonths' ||
deleteValues[0][i] == 'CountOfExchangeForSex' ||
deleteValues[0][i] == 'AskedOrForcedToExchangeForSex' ||
deleteValues[0][i] == 'AskedOrForcedToExchangeForSexPastThreeMonths' ||
deleteValues[0][i] == 'WorkPlaceViolenceThreats' ||
deleteValues[0][i] == 'WorkPlacePromiseDifference' ||
deleteValues[0][i] == 'CoercedToContinueWork' ||
deleteValues[0][i] == 'LaborExploitPastThreeMonths' ||
deleteValues[0][i] == 'CounselingReceived' ||
deleteValues[0][i] == 'IndividualCounseling' ||
deleteValues[0][i] == 'FamilyCounseling' ||
deleteValues[0][i] == 'GroupCounseling' ||
deleteValues[0][i] == 'SessionCountAtExit' ||
deleteValues[0][i] == 'PostExitCounselingPlan' ||
deleteValues[0][i] == 'SessionsInPlan' ||
deleteValues[0][i] == 'DestinationSafeClient' ||
deleteValues[0][i] == 'DestinationSafeWorker' ||
deleteValues[0][i] == 'PosAdultConnections' ||
deleteValues[0][i] == 'PosPeerConnections' ||
deleteValues[0][i] == 'PosCommunityConnections' ||
deleteValues[0][i] == 'AftercareDate' ||
deleteValues[0][i] == 'AftercareProvided' ||
deleteValues[0][i] == 'EmailSocialMedia' ||
deleteValues[0][i] == 'Telephone' ||
deleteValues[0][i] == 'InPersonIndividual' ||
deleteValues[0][i] == 'InPersonGroup' ||
deleteValues[0][i] == 'CMExitReason' ||
deleteValues[0][i] == 'HouseholdID' ||
deleteValues[0][i] == 'LOSUnderThreshold' ||
deleteValues[0][i] == 'DateToStreetESSH' ||
deleteValues[0][i] == 'TimesHomelessPastThreeYears' ||
deleteValues[0][i] == 'MonthsHomelessPastThreeYears' ||
deleteValues[0][i] == 'DateOfEngagement' ||
deleteValues[0][i] == 'MoveInDate' ||
deleteValues[0][i] == 'DateOfPATHStatus' ||
deleteValues[0][i] == 'ClientEnrolledInPATH' ||
deleteValues[0][i] == 'ReasonNotEnrolled' ||
deleteValues[0][i] == 'WorstHousingSituation' ||
deleteValues[0][i] == 'PercentAMI' ||
deleteValues[0][i] == 'LastPermanentStreet' ||
deleteValues[0][i] == 'LastPermanentCity' ||
deleteValues[0][i] == 'LastPermanentState' ||
deleteValues[0][i] == 'LastPermanentZIP' ||
deleteValues[0][i] == 'AddressDataQuality' ||
deleteValues[0][i] == 'DateOfBCPStatus' ||
deleteValues[0][i] == 'EligibleForRHY' ||
deleteValues[0][i] == 'ReasonNoServices' ||
deleteValues[0][i] == 'RunawayYouth' ||
deleteValues[0][i] == 'SexualOrientation' ||
deleteValues[0][i] == 'SexualOrientationOther' ||
deleteValues[0][i] == 'FormerWardChildWelfare' ||
deleteValues[0][i] == 'ChildWelfareYears' ||
deleteValues[0][i] == 'ChildWelfareMonths' ||
deleteValues[0][i] == 'FormerWardJuvenileJustice' ||
deleteValues[0][i] == 'JuvenileJusticeYears' ||
deleteValues[0][i] == 'JuvenileJusticeMonths' ||
deleteValues[0][i] == 'UnemploymentFam' ||
deleteValues[0][i] == 'MentalHealthIssuesFam' ||
deleteValues[0][i] == 'PhysicalDisabilityFam' ||
deleteValues[0][i] == 'AlcoholDrugAbuseFam' ||
deleteValues[0][i] == 'InsufficientIncome' ||
deleteValues[0][i] == 'IncarceratedParent' ||
deleteValues[0][i] == 'ReferralSource' ||
deleteValues[0][i] == 'CountOutreachReferralApproaches' ||
deleteValues[0][i] == 'UrgentReferral' ||
deleteValues[0][i] == 'TimeToHousingLoss' ||
deleteValues[0][i] == 'ZeroIncome' ||
deleteValues[0][i] == 'AnnualPercentAMI' ||
deleteValues[0][i] == 'FinancialChange' ||
deleteValues[0][i] == 'HouseholdChange' ||
deleteValues[0][i] == 'EvictionHistory' ||
deleteValues[0][i] == 'SubsidyAtRisk' ||
deleteValues[0][i] == 'LiteralHomelessHistory' ||
deleteValues[0][i] == 'DisabledHoH' ||
deleteValues[0][i] == 'CriminalRecord' ||
deleteValues[0][i] == 'SexOffender' ||
deleteValues[0][i] == 'DependentUnder6' ||
deleteValues[0][i] == 'SingleParent' ||
deleteValues[0][i] == 'HH5Plus' ||
deleteValues[0][i] == 'IraqAfghanistan' ||
deleteValues[0][i] == 'FemVet' ||
deleteValues[0][i] == 'HPScreeningScore' ||
deleteValues[0][i] == 'VAMCStation' ||
deleteValues[0][i] == 'ThresholdScore' ||
deleteValues[0][i] == ''
)
{
spreadsheet.deleteColumn(counter); }
else {
counter = counter + 1;
}
}
spreadsheet.setActiveSheet(spreadsheet.getSheetByName(csName), false);
};