Uploading Excel Files
This page describes exactly how your Excel files must be structured so the app can parse them and run validation.
What files do I need?
You must upload three workbooks:
- Allocations (required)
- PLA Preferences (required)
- TA Preferences (required)
You may also include an Assignments sheet inside any workbook (optional). If present, it will be merged with Allocations to produce the final Allocations JSON.
Accepted file types
- .xlsx (
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) - .xls (
application/vnd.ms-excel)
Any other types will be rejected.
How sheet names are detected
For each uploaded workbook:
- If the workbook has one sheet, its workbook filename must be exactly one of:
AssignmentsPLA PreferencesTA Preferences
- If the workbook has multiple sheets, each sheet tab name must be one of:
AllocationsPLA PreferencesTA PreferencesAssignments(optional)
The parser will read every sheet with one of the names above from the three uploaded files.
Only three files can be uploaded:Allocations,PLA Preferences, andTA Preferences.
Data model by sheet
Below are the required columns and shapes before parsing. Your Excel columns must map to these headers (case-insensitive; leading/trailing spaces are ignored). Empty cells become null unless otherwise noted. Every single sheet must have the headers as the first row of the excel file.
1) Allocations (required)
- Represents course-section rows without people assigned (TAs/PLAs/GLAs).
- Includes
Student Hour Allocationcolumn.
Each row must include:
Course & section
Academic Period—string(e.g.,2025 Fall A Term)Section- A single string formatted like:
CS 2022-AL01/ MA 2201-AL01 - Discrete Mathematics
This will be pre-parsed into:Course—AAAnformat likeCS 1102(^[A-Z]{2,4} \d{3,4}$)Subsection— likeAL01,A01(^[A-Z]{1,3}\d{2,3}$)Title— arbitrary string
Scheduling & metadata
CrossListed— boolean (see Boolean coercion below)Meeting Pattern(s)—string | null(free text OK)Instructors—string | nullReserved Cap—number | nullCap Breakdown—string | nullSection Cap—number | nullEnrollment—number(required)Waitlist Count—number(required)
1) Assignments (optional)
Same as the Allocations, but without the Student Hour Allocation column
Additionally, each row must include:
Assigned people (strings that get parsed into arrays):
TAs— string list like:
Doe, Jane; Smith, John
Each entry becomes{ First, Last, Locked: false, Hours: defaultTAHours }PLAs— same format; Hours default todefaultPLAHours()GLAs— same format; Hours default todefaultGLAHours()
Tip: In the people lists, newlines, tabs, and periods are normalized to commas. The canonical delimiter between people is semicolon
;. Each person is"Last, First".
2) PLA Preferences (required)
3) TA Preferences (required)
Both sheets share the same row schema. Each row represents an assistant + their preferences and availability.
Base fields (required)
First—stringLast—stringEmail— valid WPI email (must end with@wpi.edu)Comments—string | nullAvailable—boolean(see Availability normalization)
Preference columns (flexible headers)
You may include any number of extra columns where each header is either:
- A course code:
^[A-Z]{2,4} \d{3,4}$(e.g.,CS 1102) - A meeting pattern:
M-T-W-R-Fletters with dashes, pipe, and time range
Format:^(?<days>MTWRF))\s|\s*(?<start>\d{1,2}:\d{2}\s[AP]M)\s*-\s*(?<end>\d{1,2}:\d{2}\s[AP]M)$
Example: M-T-R-F | 9:00 AM - 9:50 AM
Note the | in the middle of the string.
Each extra column’s cell value is coerced to boolean (see Boolean coercion).
Any header that is not a valid course code or meeting pattern will cause validation to fail.
Availability normalization
You can provide any columns whose header starts with Available (e.g., Available, Availability, Available (A term)). All such columns are:
- Parsed to booleans and OR-ed together
- Collapsed into a single final
Availableboolean - If you provide no
Available*header,Availabledefaults to true
Boolean coercion (Preferences)
For all preference booleans (including Available and all extra columns):
Y,YES,TRUE,T, nonzero numbers → trueN,NO,FALSE,F,0, empty string,null/undefined→ false- Any other string → false