Sidst opdateret: 02 Sep, 2026

Best Open Source APIs for Parsing MS Project MPP & Primavera XER Files

Førende Open Source API’er til arbejde med MS Project (MPP) & Primavera (XER) filer

I enterprise projektstyring hersker to proprietære filformater: Microsoft Project (.mpp) og Oracle Primavera P6 (.xer). Uanset om du bygger et internt analyse-dashboard, synkroniserer byggeplaner med ERP-systemer, eller automatiserer projektstatus-pipelines, er læsning og manipulation af disse planlægningsfiler programmatisk en kritisk nødvendighed.

Dog udgør begge formater berygtede ingeniørmæssige forhindringer:

  • MPP-filer er binære, udokumenterede OLE Structured Storage- eller proprietære sammensatte dokumentformater med skemaændringer på tværs af stort set hver større MS Project-udgivelse (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER-filer er tabulatorseparerede teksteksporter struktureret som relationelle databasetabeller (%T tabeller med %F felter og %R poster), fyldt med komplekse referentiel integritetsbegrænsninger, multi-kalender arv og kritisk sti‑logik.

Kommercielle SDK’er som Aspose.Tasks findes, men licensomkostninger og leverandørlås gør robuste open‑source‑alternativer nødvendige. I denne guide gennemgår vi de bedste open‑source‑API’er, biblioteker og parsere tilgængelige for Java, Python og C#, som håndterer MPP- og XER-filer rent og effektivt.

Hurtig sammenligning af Open-Source værktøjer

Bibliotek / VærktøjPrimært sprogUnderstøttede formaterLæse / SkriveBedste anvendelsestilfælde
MPXJJava (Python / .NET bindinger)MPP, MPT, MPX, XER, PMXML, MSPDILæs (MPP/XER); Skriv (MPX/MSPDI/PMXML)Enterprise Java, multi-format konvertering, alt-i-en tidsplaner
xerparserPythonXERLæs & parseData science, pandas planlægningsanalyse, ETL-pipelines
python-mpxjPythonMPP, XER, XMLLæs / konverterPythonisk wrapper omkring MPXJ ved hjælp af JPype
netezza-xer / xer-to-csvShell / Python / GoXERStrøm / EksportUdtrækning af rå SQL-lignende tabeller til relationelle databaser
OpenProj / ProjectLibre CoreJavaMPP (ældre versioner), XMLLæs / RenderDesktop-/Motorintegration for baseline Gantt-visninger

1. MPXJ (Microsoft Project-udveksling i Java)

Den ubestridte industristandard for tidsplaninteroperabilitet

Hvis der findes en guldstandard inden for open‑source planlægningsbiblioteker, er det MPXJ. Aktivt vedligeholdt i over to årtier af Jon Iles, blev MPXJ oprindeligt bygget til at behandle Microsoft Project MPX‑filer, men er udvidet til en universel oversættelsesmotor for projektplanlægningsformater.

Nøglefunktioner

  • Direkte MPP‑udtræk: Parser proprietære binære MPP‑filer på tværs af næsten alle MS Project‑versioner (Project 98 gennem moderne Project 2016/2019/2021/365) uden at kræve en installeret kopi af Microsoft Project.
  • Primavera P6 XER & PMXML‑parsing: Indbygget understøttelse af både tekstbaserede .xer‑dump og moderne Primavera XML‑filer.
  • Normaliseret datamodel: Giver adgang til en samlet objektmodel (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Uanset om dit input er en MPP eller en XER, interagerer din applikationskode med nøjagtig den samme API.
  • Flersproget distribution: Selvom den er skrevet i Java, distribuerer MPXJ native‑kompilerede NuGet‑pakker til .NET (C#) via IKVM/CoreCLR, samt en Python‑pakke (mpxj på PyPI).

Kort kodeeksempel: Java

import net.sf.mpxj.ProjectFile;
import net.sf.mpxj.Task;
import net.sf.mpxj.reader.UniversalProjectReader;

public class ScheduleReader {
    public static void main(String[] args) throws Exception {
        // UniversalProjectReader automatically detects whether it's MPP, XER, or XML
        UniversalProjectReader reader = new UniversalProjectReader();
        ProjectFile project = reader.read("capital_project_schedule.xer");

        System.out.println("Project Name: " + project.getProjectProperties().getProjectTitle());

        for (Task task : project.getTasks()) {
            if (task.getName() != null) {
                System.out.printf("Task ID: %d | WBS: %s | Name: %s | Early Start: %s%n",
                    task.getID(), task.getWBS(), task.getName(), task.getEarlyStart());
            }
        }
    }
}

Hvor MPXJ udmærker sig

  • Ægte krydsformatnormalisering (konvertering af MPP til XER-kompatibel PMXML eller MSPDI).
  • Kompleks kalenderlogik (skift, undtagelser, multi‑kalender arbejdstimer).
  • Produktionsklar stabilitet med et aktivt fællesskab.

2. xerparser (Python)

Letvægts, indfødt Python-parsing for Primavera XER

Selvom MPXJ kan kaldes via Python‑bindinger, kræver det at køre en JVM‑backend (via JPype). Når du har brug for en rent native Python‑parser, der kører uden Java‑afhængigheder, er xerparser den foretrukne løsning.

En XER‑fil er i bund og grund et databasesnapshot, der er dumpet til flad tekst. xerparser dekoder disse tabeller til strukturerede Python‑objekter og integreres problemfrit med pandas.

Nøglefunktioner

  • Ingen Java‑afhængigheder: Ren Python 3‑bibliotek, der kan installeres via pip install xerparser.
  • Relationel integritet: Kortlægger kerne‑Primavera‑tabeller såsom TASK (Aktiviteter), PROJECT (Projektmetadata), PROJWBS (WBS‑hierarkier), TASKRSRC (Tildelinger) og TASKPRED (Logikforbindelser).
  • Hurtig udførelse: Ideel til containeriserede mikrotjenester, AWS Lambda‑funktioner og moderne data‑orchestrations‑pipelines (f.eks. Apache Airflow, Prefect).

Hurtigt kodeeksempel: Python

from xerparser.reader import Reader
import pandas as pd

# Load XER file
xer = Reader("plant_expansion.xer")

# Access projects inside the XER dump
for project in xer.projects:
    print(f"Project Code: {project.short_name}, Description: {project.name}")

# Convert activities into a Pandas DataFrame for downstream analytics
tasks_data = []
for act in xer.activities:
    tasks_data.append({
        "Task_Code": act.task_code,
        "Name": act.task_name,
        "Status": act.status_code,
        "Early_Start": act.early_start_date,
        "Early_Finish": act.early_end_date,
        "Total_Float": act.total_float_hr_cnt
    })

df = pd.DataFrame(tasks_data)
print(df.head())

Hvor xerparser udmærker sig

  • Data engineering, analyse af forsinkelseskrav og tidsplan-sundhedstjek (DCMA 14-punkts vurderingsskripter).
  • Serverløse arbejdsbelastninger, hvor det er upraktisk at pakke en Java-runtime på over 50 MB.

3. python-mpxj

Bro mellem Python og den fulde kraft af MPXJ

Hvis du arbejder i Python, men skal behandle binære .mpp-filer, kan xerparser ikke hjælpe dig, fordi den kun målretter .xer. Den mest pålidelige open-source bro er python-mpxj.

Nøglefunktioner

  • Starter automatisk en hovedløs indlejret JVM ved hjælp af jpype1.
  • Giver den fulde MPXJ API direkte til Python-udviklere.
  • Muliggør direkte konvertering fra proprietære .mpp til moderne åbne formater som .json eller .csv.
pip install mpxj
import mpxj

# MPXJ provides high-level helper utilities
from net.sf.mpxj.reader import UniversalProjectReader

reader = UniversalProjectReader()
project = reader.read("commercial_tower.mpp")

for task in project.getTasks():
    if task.getName():
        print(f"{task.getUniqueID()}: {task.getName()} -> {task.getDuration()}")

4. Tilpassede parseværktøjer & databaseindlæsnings‑scripts

Håndtering af rå Primavera XER via stream‑behandling

Fordi Primavera XER følger et forudsigeligt tabelformat, bruger mange open-source ingeniørteams tilpassede tabulære stream-dekodere (skrevet i Go, Python eller Rust) i stedet for høj-niveau DOM-stil tidsplanbiblioteker.

En XER-filstruktur er formateret som:

%T  TASK
%F  task_id  proj_id  wbs_id  task_code  task_name  status_code
%R  10182    120      45      A1000      Mobilization TK_Complete
%R  10183    120      45      A1010      Excavation   TK_Active
%E

Flere open-source‑scripts på GitHub (såsom xer2sqlite og xer-to-csv) parser denne struktur direkte til SQLite eller PostgreSQL. Denne tilgang er optimal, hvis:

  1. Du har kun brug for at forespørge tabulære relationer med SQL.
  2. Planerne er flere hundrede megabytes store med titusinder af opgaver, hvor objektorienterede træindlæsere ville udløse out-of-memory‑fejl.

Teknisk sammenligning: Hvilken skal du vælge?

Vælg MPXJ, hvis:

  • Du skal læse binære Microsoft Project .mpp‑filer uden at betale for proprietær kommerciel software.
  • Du har brug for dyb planlægningsintelligens: arbejds‑kalendere, beregning af forsinkelsesvarighed, kritisk sti‑beregning og baseline‑varians.
  • Din teknologistak er Java, Kotlin, C# (.NET) eller enterprise‑Python.

Vælg xerparser, hvis:

  • Du håndterer udelukkende Primavera P6 .xer‑filer.
  • Din pipeline er skrevet i native Python og fodrer direkte ind i pandas, NumPy eller visualiseringsværktøjer som Dash / Streamlit.
  • Du implementerer i letvægts container-miljøer eller serverløse cloud‑kørere.

Vælg Direkte DB / CSV Stream Indtagelse, hvis:

  • Du har brug for høj‑gennemløbs database‑staging til massive multi‑projekt virksomhed XER‑eksport.
  • Du behøver kun at udtrække metadata, omkostningskonti og fremdriftskurver via SQL‑analyse.

Opsummering & Bedste Praksis

Når du bygger open‑source‑pipelines til tidsplan‑data:

  1. Parse aldrig .mpp manuelt: Microsofts binære specifikation er indviklet og u-dokumenteret. Stol altid på gennemtestede biblioteker som MPXJ.
  2. Vær opmærksom på dato‑tidszoner: Primavera‑tidsplaner registrerer ofte arbejdstider uden tidszone‑metadata og er afhængige af projektkalendere. Sørg for, at din indlæsnings‑pipeline tager højde for 8‑timers arbejdsdagsskift versus 24‑timers kalenderdage.
  3. Valider referentiel integritet: I XER‑filer forekommer ofte forældreløse poster (fx opgaver, der peger på slettede WBS‑noder) i manuelt oprettede projekt‑eksporter. Valider altid fremmednøgler defensivt under ETL.

Ofte Stillede Spørgsmål

**Q1: 1. Kan open‑source‑biblioteker skrive eller opdatere native binære .mpp‑filer direkte?

A1: Nej, på grund af Microsofts proprietære binære format kan open-source biblioteker pålideligt læse .mpp-filer, men skrivning eksporteres normalt til standardformater som MSPDI (XML) eller MPX.

**Q2: Skal jeg have Microsoft Project eller Primavera P6 installeret på min server for at parse disse filer?

A2: Nej, biblioteker som MPXJ og xerparser er selvstændige parsere, der behandler filer direkte uden at kræve licenser til værtssoftware.

**Q3: Hvad er det bedste native Python-bibliotek til at parse Primavera P6 XER-filer uden Java-afhængigheder?

A3: xerparser er det førende ren-Python valg til at parse XER-dumps direkte til native ordbøger og pandas DataFrames.

**Q4: Kan MPXJ konvertere Microsoft Project MPP-filer til Primavera P6-formater?

A4: Ja, MPXJ kan læse en .mpp-fil og eksportere den normaliserede tidsplan til et Primavera-kompatibelt PMXML-format.

**Q5: Hvorfor er Primavera XER-filer lettere at parse end Microsoft Project MPP-filer?

A5: XER-filer er menneskelæselige, tabulatorseparerede relationelle database‑dumps, mens MPP-filer er proprietære, binære sammensatte dokumentstrukturer.

Ressourcer til Filformater

Filformat Nyheder – Din ene stop for alle nyheder relateret til filformater fra hele verden Filformat Fora – Send dine forespørgsler i filformatfora for at få nyttig information fra filformat‑eksperter og fællesskabsbrugere Filformat Wiki – Udforsk filformatkategorier for information om forskellige filformater Open Source API’er og Biblioteker for Projektstyring