Documentation

Find documentation for our Joomla extensions on this page.

JoomSchool - Import / Export

JoomSchool's bulk Import tool lets you bring large numbers of students, teachers and parents into the system in one go, instead of typing them in one row at a time. This article covers the supported file format, the three-step import wizard, the field mapping workflow and the most common import errors.

Overview

The Import tool lives at Components → JoomSchool → Import (or via the Import action on the Students, Teachers and Parents list views). It accepts CSV files with either comma or semicolon delimiters. JoomSchool reads the column headers from row 1, lets you map them to the fields it understands, optionally saves that mapping as a preset, and writes the rows to the database one at a time.

The tool can also save import presets — named recipes that remember which CSV column maps to which JoomSchool field. After a one-time setup, future imports are a two-click affair.

There is no formal export wizard for users — to export student / teacher / parent data, use the Backup view (covered in the Backup & Maintenance article).

Prerequisites

  • The PHP iconv extension must be enabled on the server. The Import view checks for this and refuses to load if iconv is missing.
  • Classes, sections, divisions and academic years that the imported records reference must already exist (the importer matches by name). For example, if your CSV says Class 6 for a student, that class must already exist.
  • The file must be UTF-8 encoded. Excel's default Save As CSV often produces Windows-1252; convert to UTF-8 before importing if you see strange characters.

Supported file format

The accepted format is CSV with a header row. Supported delimiters are comma (,) and semicolon (;).

Sample CSV for student import:


Name,Email,Class,Section,Roll,Year
Alice Smith,This email address is being protected from spambots. You need JavaScript enabled to view it.,Class 6,A,1,2025
Bob Jones,This email address is being protected from spambots. You need JavaScript enabled to view it.,Class 6,A,2,2025
Carol White,This email address is being protected from spambots. You need JavaScript enabled to view it.,Class 6,B,3,2025

Header names don't have to match JoomSchool's internal field names — the next step of the wizard lets you map them.

Choosing the import type

Open Components → JoomSchool → Import. The first screen offers three buttons:

  • Students — for student records.
  • Teachers — for teacher records.
  • Parents — for parent records.

Click the type you want to import. JoomSchool runs the same wizard for all three, but the field map is different for each.

The three-step wizard

The top of every step shows three tabs: Upload, Configuration and Finish.

Step 1: Upload

  1. Pick a delimiter (Comma or Semicolon) from the dropdown.
  2. Click the file picker and select your CSV.
  3. JoomSchool uploads the file. A progress bar shows the upload status.
  4. When the upload finishes, the Next button enables.
  5. Click Next to proceed to Configuration.

Step 2: Configuration

JoomSchool reads the header row of your CSV and presents a mapping table — one row per CSV column, with a dropdown listing every JoomSchool field appropriate to the selected import type.

For each CSV column:

  • Pick the matching JoomSchool field from the dropdown, or
  • Choose (skip) if the column shouldn't be imported.

Required JoomSchool fields are clearly marked. You can't proceed if any required field is unmapped.

The screen also offers:

  • Save mapping as preset — give the mapping a name so you can reuse it next time.
  • Use existing preset — pick a previously saved mapping to skip the manual mapping.
  • Duplicate detection rule — choose which JoomSchool field acts as the "primary key" when checking for duplicates (typically Email, Roll Number, or a Custom ID Field). Records that match an existing record are updated rather than re-inserted.

Click Next when the mapping is complete.

Step 3: Finish

JoomSchool processes each row of the CSV and shows a running summary:

  • New — records that didn't exist before and were inserted.
  • Update — records that matched an existing one (per the duplicate rule) and were updated in place.
  • Exist — records that matched but had no changes — left as-is.

When the import finishes, the totals are displayed and a link returns you to the matching list view (Students / Teachers / Parents) so you can verify the result.

Saving and reusing import presets

Presets are stored under your admin user account. To save a new preset:

  1. After completing Step 2's mapping, fill in the Mapping name field at the top of the page.
  2. Tick Save as new preset.
  3. Proceed to Step 3.

To reuse a preset:

  1. On Step 2, pick the preset from the Use existing preset dropdown.
  2. The mapping table populates automatically.
  3. Adjust if needed and proceed.

Presets are tied to the import type (Students presets are separate from Teachers presets and Parents presets).

Duplicate detection

By default, the importer treats every row as new. To prevent duplicates:

  1. On Step 2, set the Duplicate detection rule to a field that uniquely identifies a record:
  • For students: Roll (within an academic year) or Email
  • For teachers: Email
  • For parents: Email
  1. JoomSchool compares incoming rows against existing records on that field. Matches are updated; non-matches are inserted.

This is the safe way to re-import a corrected CSV — only the changes are applied, not duplicates.

Photos in CSV import

Photos are stored on the filesystem (under administrator/components/com_joomschool/photo/students/ etc.) and referenced from the database. The CSV importer does not handle photo uploads directly — to bulk-add photos:

  1. Save the photos with filenames that match the Roll or another deterministic identifier.
  2. Upload them to the appropriate photo/ folder via FTP / file manager.
  3. After the CSV import, the photo paths are linked when you re-open each record (or via a one-time SQL update for advanced users).

Recommended workflow

  1. Test with 5 rows. Save a 5-row CSV and run a dry import. Verify that the records appear correctly in the list view.
  2. Adjust the mapping based on what looked wrong, save it as a preset.
  3. Import the full file. Re-use the preset; the mapping is one-click.
  4. Spot-check 10 random rows in the list view to make sure data didn't get truncated or misaligned.
  5. Run the maintenance tools (see the Backup & Maintenance article) to confirm the linked Joomla user accounts are correct.

Tips & Best Practices

  • Keep your CSV column names consistent across imports. Reusing the same headers means the same preset works year after year.
  • Strip trailing whitespace before importing. CSVs exported from Excel often have stray spaces that cause "Class 6 " to not match "Class 6".
  • Use a stable identifier for duplicate detection. Email is good for staff and parents but not always present for young students; Roll Number works as long as roll numbers don't change mid-year.
  • Back up the database before a large import — the Maintenance article covers how. If something goes wrong with a 500-row import, restoring from backup is faster than fixing rows one by one.
  • Don't import academic data (marks, attendance) through this tool — it's designed for users only. For marks, use the Excel import on the Marks view.

Troubleshooting

SymptomLikely causeFix
The Import view shows "Iconv PHP module not installed". The PHP iconv extension is missing on the server. Ask your hosting provider to enable it.
Special characters appear as garbled letters in the imported records. The CSV is not UTF-8 encoded. Open the CSV in a text editor and save as UTF-8 (without BOM); re-import.
Required field unmapped error blocks Step 2. A required JoomSchool field has no CSV column mapped to it. Add a CSV column for that field; or import the missing data manually after CSV import.
Some rows are missing from the imported list. Those rows had blank required fields, or the duplicate-detection field was empty (so they were silently merged). Open the CSV; ensure required fields are populated.
Imported names show "Class 6 " (trailing space) and don't match. The CSV has trailing whitespace. Use a spreadsheet editor's TRIM function before exporting.
Preset doesn't appear in the dropdown. Presets are tied to the user; switching admin accounts hides others' presets. Save a fresh preset under the current admin account.
The progress bar finishes but no records appear. A PHP error halted the import without showing a message. Enable Joomla's debug mode and re-run; check the PHP error log.
Duplicate records inserted despite a "Roll" duplicate rule. The roll numbers in the CSV had different formatting (001 vs 1) and didn't match existing records. Normalise the CSV's roll numbers before importing.
Cron Job Starts

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok