Importing and Exporting XER

Last reviewed 9 September 20262,273 words10 min read

Import options, and what each one overwrites β€” the dialog read line by line

🟩 In one line: The XER import dialog has three decisions β€” how to bring in the project (Create New / Update Existing / Replace), what to do with each data type (Update Existing / Keep Existing / Insert New / Do Not Import), and whether to Delete data not in the file β€” and the production answer is Create New in a sandbox first, then Keep Existing on all global data with Delete unticked; the export side is simpler but has two traps: the file carries every global object it touches and none of your baselines.

πŸ‘€ Who this is for: J/M. Prerequisites: what-is-an-xer-file, cleaning-an-xer-before-import, p6-global-vs-project-data.

e / c
First, let's be honest about why this page exists

Three pages already cover the XER: what it is, why it won't import, and how to clean it. This is the fourth and the most mechanical β€” the dialog itself. People click Next four times without reading, and the defaults are written for a single-user laptop, not a shared database with 30 projects.

The export dialog gets less attention and causes fewer disasters, but the two things it doesn't carry β€” baselines and layouts β€” cause a phone call every month.

🟨 The standard β€” what "good" looks like
SourceWhat it asks for (paraphrased)Consequence
Client schedule specifications (typical Gulf)Native XER submitted each period; sometimes a specific P6 version; sometimes XML alongsideExport format and version per spec; declare in transmittal
AACE RP 38R-06Basis identifies the software version and file formatVersion in SBM and every transmittal
SCL Protocol 2nd ed., Guidance Part B (records)Native electronic programme files retainedEvery received and sent file archived unedited
DCMA 14-Point / GAO BP 9Assessments run on the native fileA clean import is the precondition
Convention (cleaning-an-xer-before-import)Sandbox first; Keep Existing / Do Not Import; Delete unticked; original archived; ERMHDR edit declared; POBS safe to deleteThis page is the dialog those rules point at

🟒 Rule: every received XER is imported into a sandbox database with Create New Project; production imports use a saved configuration with Keep Existing on all global data and Delete unticked; every export declares the P6 version and lists the global objects and baselines it does or doesn't carry.

How it actually works

1. Import β€” the screens

ScreenChoiceProduction answerWhy
FormatPrimavera PM – (XER)β€”XML is a different route with different rules
FileBrowseArchived copy, not the originalOriginal stays read-only
Import Project Options β†’ Import ToCreate New Project / Update Existing Project / Replace Existing Project / IgnoreSandbox: Create New. Production: Create New under a "Received" EPS node; Update Existing only for your own project returning from your own laptopUpdate Existing merges by ID and can overwrite your logic; Replace deletes and recreates β€” baselines lost
Import Project Options β†’ Import To EPSNode"Received – [Sub/Consultant]"Keeps received files apart from production
Update Project Options β†’ ConfigurationDefault or saved"Prod-Safe" (saved, see table below)Default is Update Existing on everything
CurrencySelectProject currencyWrong currency scales cost
FinishImportRead the logLog lists rejected rows and objects created

2. The "Prod-Safe" configuration β€” data type by data type

Configuration β†’ Modify opens a table: one row per data type, an Action column and a Delete tick box.

Data typeActionDeleteNote
ActivitiesUpdate Existing (own project) / Insert New (Create New)UntickedTicked Delete removes activities in your project that are absent from the file β€” the classic "half my schedule vanished"
RelationshipsUpdate Existing / Insert NewUntickedSame
Resource assignmentsUpdate ExistingUnticked
Activity codesKeep ExistingUntickedIncoming global codes do not overwrite yours
CalendarsKeep ExistingUntickedThe most damaging default
ResourcesDo Not Import (or Keep Existing if agreed)UntickedProtects the pool
RolesDo Not ImportUnticked
Cost accountsDo Not ImportUnticked
Project codesKeep ExistingUnticked
UDF definitionsKeep ExistingUntickedPrevents duplicate "Qty"
Notebook topics, units of measure, currenciesKeep ExistingUnticked
Expenses, issues, risks, work productsUpdate ExistingUnticked

Save the configuration once; select it every time; change it only with the database admin.

3. What "Keep Existing" does to a file that needs the incoming calendar

If the incoming project's activities are assigned to a global calendar named the same as one of yours, Keep Existing assigns them to your calendar of that name. Different hours or exceptions β†’ different dates. That is why the sandbox exists: import with Create New there, check the calendars the file actually used, compare dates to the sender's PDF, then decide whether the production import needs a renamed project-calendar copy first (cleaning-an-xer-before-import).

4. Import Spreadsheet β€” a different door

File β†’ Import β†’ Spreadsheet (XLS/XLSX) updates activity fields, relationships, resources or assignments from a workbook whose columns match P6 field names. It is the safe bulk route for statusing (p6-keyboard-and-speed) and for loading quantities to UDFs. It does not create global objects and cannot damage calendars. Export the template first with File β†’ Export β†’ Spreadsheet so the headers are right.

5. Export β€” the screens and the two traps

ScreenChoiceNote
FormatPrimavera PM – (XER)Some versions offer a version selector; otherwise the file's ERMHDR line records the exporting version and may be edited to an older version if declared in the transmittal
ProjectsTick the project(s)Ticking several writes one multi-project file; the receiver can pick
File nameNaming convention"AUH-RT14_Upd09_DD01Oct25_v20.xer" β€” project, update, data date, P6 version
FinishExportOpen the file in a text editor and check the ERMHDR line

Trap 1 β€” global objects travel. Every calendar, code, resource, cost account and UDF definition the project references goes in the file. Run the 5-minute pre-export check (p6-global-vs-project-data) and list what the file carries in the transmittal.

Trap 2 β€” baselines don't. The XER holds the project only. To send the accepted baseline: export the baseline project separately (it exists as its own project in the database until assigned; if already assigned, the archived accepted XER from the baseline register is the file to send β€” never Restore a baseline out of the live project except into a sandbox). Alternatively XML export can carry assigned baselines with the project β€” declare which route was used. Layouts go as .plf; user preferences don't go at all.

6. Transmittal β€” the six lines

LineContent
FileName, size, P6 version exported from (and ERMHDR version if edited)
ContentsProject ID, data date, update number, activity count
BaselineWhich baseline this compares to; whether the baseline file is attached or previously issued (register reference)
Global objects carriedCalendars (project/global), activity codes (project/global), resources, cost accounts
SettingsScheduling options screenshot attached; hours-per-day basis
EditsAny post-export edit to the file (ERMHDR, POBS removed), stated plainly

7. Import log β€” what to read

The log lists every object created, updated or skipped, and every rejected row. Read it before opening the project: rejected relationships (missing activity IDs), calendars created (a global one just landed), resources created (pool grew). Archive the log with the file.

πŸŸ₯ Where people go wrong
  1. Default configuration in production. Update Existing on every global object. Calendars, codes and UDFs overwritten in one click. Prod-Safe, always.
  1. Delete ticked. Activities and relationships in your project but not in the file are removed. Unticked, every row, and checked before Finish.
  1. Update Existing on someone else's file. Their IDs match yours; their logic replaces yours. Received files are Create New under a Received node; only your own returning project is ever Update Existing.
  1. Replace Existing to "start clean". Deletes the project and its baselines, then recreates. The baseline register now points at nothing. Never on a production project.
  1. Assuming the export carries the baseline. The client receives the update with no comparison target and asks again. Baseline file per the register, or XML with baselines, declared in the transmittal.
  1. Editing the original received file. Archive it unedited; clean a copy. The original is the contemporaneous record.
  1. No log read, no transmittal. The receiver finds the 112 new resources a week later. Log archived; six-line transmittal every time.
βš–οΈ When you're challenged

"Your XER won't open in our version." The ERMHDR line records version 20; if your database is older I can re-export with the version selector, or edit the header line to your version β€” the data is identical, and the transmittal will say the header was edited and from what to what.

"We imported your file and our calendars changed." The transmittal listed two project calendars and no globals, so nothing in the file could overwrite a global calendar unless the import was set to Update Existing on calendars and matched by name. Keep Existing on calendars is the production setting; the archived original is available to re-import into a sandbox to confirm.

"Why can't you just send the baseline in the same file?" The XER format holds one project per project β€” a baseline assigned inside the project isn't written out. The accepted baseline XER is BL1-Accepted-DD 01Dec25 in the register, issued 4 December; I'll attach it again, or send XML with the baseline embedded if your side prefers that route.

πŸ“„ Related pages
✏️ Worked example

Consultant's planner receives Upd 09 from the contractor on a Doha office tower:

StepActionResult
1Archive "DOH-OT_Upd09_DD01Oct25_v20.xer" read-only; copy to working folderOriginal preserved
2Open copy in text editor: ERMHDR shows v20 (consultant DB is v19); POBS block presentHeader edited to v19 on the copy; POBS removed; both noted
3Sandbox DB: File β†’ Import β†’ XER β†’ Create New Project β†’ EPS "Received – Contractor" β†’ Default configLog: 2 project calendars created, 0 global; 11 project activity codes; 0 resources (contractor sent unresourced); 0 rejected rows
4Compare dates to contractor's PDF Gantt; check Schedule Options against transmittal screenshotMatch
5Production DB: same file, Create New under "Received – Contractor", configuration Prod-SafeLog clean; no global objects touched
6Assign BL1-Accepted (previously imported, register ref) as project baseline in the received copyVariance columns live
7Layout 03 Review; DCMA pass; Schedule Comparison vs Upd 08Review comments issued day 3
8Import log and edited-copy note filed with the received fileRecord complete

Elapsed: 35 minutes from receipt to review-ready, none of it spent repairing a database.

πŸ“– References
  • AACE International RP 38R-06, Documenting the Schedule Basis
  • SCL Delay and Disruption Protocol, 2nd ed. (2017), Guidance Part B
  • DCMA 14-Point Schedule Assessment; GAO Schedule Assessment Guide (GAO-16-89G), Best Practice 9
  • Oracle Primavera P6 Professional User Guide β€” Import/Export Primavera PM (XER); Import Configuration (Update Project Options); Import/Export Spreadsheet; Maintain Baselines (field labels as in P6 Professional v20; earlier versions differ)

From the field

Experience from working planners. Unreviewed β€” read it as experience, not guidance.

Add what you know about importing and exporting xer. What worked, what the consultant pushed back on, what you would do differently next time. A paragraph is plenty.

Contributors get their name and one link on the site β€” your own templates, course or consultancy. We take nothing and hold nothing.

Add your experience