Zuletzt aktualisiert: 02 Sept, 2026

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

Führende Open-Source-APIs für die Arbeit mit MS Project (MPP) & Primavera (XER) Dateien

Im Unternehmensprojektmanagement herrschen zwei proprietäre Dateiformate unangefochten: Microsoft Project (.mpp) und Oracle Primavera P6 (.xer). Egal, ob Sie ein internes Analyse‑Dashboard erstellen, Bauzeitpläne mit ERP‑Systemen synchronisieren oder Projektstatus‑Pipelines automatisieren, das programmgesteuerte Lesen und Verarbeiten dieser Terminplanungsdateien ist eine kritische Anforderung.

Allerdings stellen beide Formate berüchtigte technische Hürden dar:

  • MPP files sind binäre, undokumentierte OLE Structured Storage- oder proprietäre Compound-Dokumentformate mit Schemaänderungen über praktisch jede wichtige MS Project-Version hinweg (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER files sind tabulatorgetrennte Text-Exporte, die als relationale Datenbanktabellen strukturiert sind (%T-Tabellen mit %F-Feldern und %R-Datensätzen), gefüllt mit komplexen referenziellen Integritätsbedingungen, Mehrfachkalender-Vererbung und Critical-Path-Logik.

Kommerzielle SDKs wie Aspose.Tasks existieren, aber Lizenzkosten und Anbieterbindung machen robuste Open-Source-Alternativen unverzichtbar. In diesem Leitfaden zerlegen wir die besten Open-Source-APIs, Bibliotheken und Parser, die für Java, Python und C# verfügbar sind, um MPP- und XER-Dateien sauber und effizient zu verarbeiten.

Schneller Vergleich von Open-Source-Tools

Bibliothek / WerkzeugPrimäre SpracheUnterstützte FormateLesen / SchreibenBestes Anwendungsbeispiel
MPXJJava (Python / .NET Bindungen)MPP, MPT, MPX, XER, PMXML, MSPDILesen (MPP/XER); Schreiben (MPX/MSPDI/PMXML)Enterprise Java, Multi-Format-Konvertierung, All-in-One-Zeitpläne
xerparserPythonXERLesen & ParsenData Science, Pandas-Planungsanalyse, ETL-Pipelines
python-mpxjPythonMPP, XER, XMLLesen / KonvertierenPythonischer Wrapper um MPXJ mit JPype
netezza-xer / xer-to-csvShell / Python / GoXERStream / ExportExtrahieren von rohen, SQL-ähnlichen Tabellen in relationale Datenbanken
OpenProj / ProjectLibre CoreJavaMPP (older versions), XMLLesen / RendernDesktop/Engine-Integration für Basis-Gantt-Ansichten

1. MPXJ (Microsoft Project Austausch in Java)

Der unbestrittene Industriestandard für Terminplan-Interoperabilität

Wenn es einen Goldstandard bei Open-Source-Planungsbibliotheken gibt, ist es MPXJ. Aktuell seit über zwei Jahrzehnten von Jon Iles gepflegt, wurde MPXJ ursprünglich entwickelt, um Microsoft Project MPX-Dateien zu verarbeiten, hat sich aber zu einer universellen Übersetzungs-Engine für Projektplanungsformate erweitert.

Hauptfunktionen

  • Direkte MPP-Extraktion: Analysiert proprietäre binäre MPP-Dateien über fast alle MS Project-Versionen hinweg (Project 98 bis zu modernen Project 2016/2019/2021/365), ohne dass eine installierte Kopie von Microsoft Project erforderlich ist.
  • Primavera P6 XER & PMXML-Parsing: Native Unterstützung für sowohl textbasierte .xer-Dumps als auch moderne Primavera-XML-Dateien.
  • Normalisiertes Datenmodell: Stellt ein einheitliches Objektmodell (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar) bereit. Unabhängig davon, ob Ihre Eingabe ein MPP oder ein XER ist, interagiert Ihr Anwendungscode mit exakt derselben API.
  • Mehrsprachige Distribution: Obwohl in Java geschrieben, verteilt MPXJ native-kompilierte NuGet-Pakete für .NET (C#) über IKVM/CoreCLR sowie ein Python-Paket (mpxj auf PyPI).

Kurzes Codebeispiel: 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());
            }
        }
    }
}

Wo MPXJ glänzt

  • Echte plattformübergreifende Normalisierung (Konvertierung von MPP zu XER-kompatiblem PMXML oder MSPDI).
  • Komplexe Kalenderlogik (Schichten, Ausnahmen, mehrkalenderige Arbeitszeiten).
  • Produktionsreife Stabilität mit einer aktiven Community.

2. xerparser (Python)

Leichtgewichtiges, natives Python-Parsing für Primavera XER

Während MPXJ über Python-Bindings aufgerufen werden kann, erfordert dies das Ausführen eines JVM-Backends (via JPype). Wenn Sie einen rein nativen Python-Parser benötigen, der ohne Java-Abhängigkeiten läuft, ist xerparser die bevorzugte Lösung.

Eine XER-Datei ist im Wesentlichen ein Datenbanksnapshot, der in Flachtext abgelegt wird. xerparser dekodiert diese Tabellen in strukturierte Python-Objekte und integriert sich nahtlos in pandas.

Hauptfunktionen

  • Keine Java-Abhängigkeiten: Reine Python‑3‑Bibliothek, installierbar über pip install xerparser.
  • Relationale Integrität: Bildet Kern-Primavera-Tabellen ab, wie TASK (Aktivitäten), PROJECT (Projekt‑Metadaten), PROJWBS (WBS‑Hierarchien), TASKRSRC (Zuordnungen) und TASKPRED (Logik‑Verknüpfungen).
  • Schnelle Ausführung: Ideal für containerisierte Microservices, AWS‑Lambda‑Funktionen und moderne Datenorchestrierungspipelines (z. B. Apache Airflow, Prefect).

Kurzes Codebeispiel: 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())

Wo xerparser glänzt

  • Datenengineering, Verzugsanspruch-Analyse und Terminplan-Gesundheitschecks (DCMA 14-Punkte-Bewertungsskripte).
  • Serverlose Workloads, bei denen das Bündeln einer über 50 MB Java-Laufzeitumgebung unpraktisch ist.

3. python-mpxj

Python mit der vollen Leistungsfähigkeit von MPXJ verbinden

Wenn Sie in Python arbeiten, aber müssen Binärdateien .mpp zu verarbeiten, kann xerparser Ihnen nicht helfen, da es nur .xer unterstützt. Die zuverlässigste Open-Source‑Brücke ist python-mpxj.

Wichtige Funktionen

  • Startet automatisch eine headless eingebettete JVM mit jpype1.
  • Stellt die vollständige MPXJ-API Python‑Entwicklern direkt zur Verfügung.
  • Ermöglicht die direkte Konvertierung von proprietären .mpp in moderne offene Formate wie .json oder .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. Benutzerdefinierte Parsing-Tools & Datenbank‑Import‑Skripte

Verarbeitung von rohen Primavera XER mittels Stream‑Processing

Da Primavera XER einem vorhersehbaren Tabellenformat folgt, nutzen viele Open-Source‑Engineering‑Teams benutzerdefinierte tabellarische Stream‑Decoder (geschrieben in Go, Python oder Rust) anstelle von hochrangigen DOM‑artigen Terminplanbibliotheken.

Eine XER-Dateistruktur ist wie folgt formatiert:

%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

Mehrere Open-Source‑Skripte auf GitHub (wie xer2sqlite und xer-to-csv) parsen diese Struktur direkt in SQLite oder PostgreSQL. Dieser Ansatz ist optimal, wenn:

  1. Sie müssen nur tabellarische Beziehungen mit SQL abfragen.
  2. Die Pläne haben eine Größe von mehreren hundert Megabyte und enthalten zehntausende Aufgaben, wobei objektorientierte Baum‑Lader Speicher‑Out‑Of‑Memory‑Fehler auslösen würden.

Technischer Vergleich: Welche sollten Sie wählen?

Wählen Sie MPXJ, wenn:

  • Sie müssen binäre Microsoft Project .mpp‑Dateien lesen, ohne proprietäre kommerzielle Software zu bezahlen.
  • Sie benötigen tiefgehende Planungsintelligenz: Arbeitskalender, Berechnungen von Verzögerungsdauern, kritische Pfad‑Berechnung und Basislinien‑Abweichungen.
  • Ihr Technologie‑Stack ist Java, Kotlin, C# (.NET) oder Enterprise‑Python.

Wählen Sie xerparser, wenn:

  • Sie verarbeiten ausschließlich Primavera P6 .xer‑Dateien.
  • Ihre Pipeline ist in native Python geschrieben und speist sich direkt in pandas, NumPy oder Visualisierer wie Dash / Streamlit.
  • Sie setzen schlanke Container-Umgebungen oder serverlose Cloud-Runner ein.

Wählen Sie Direct DB / CSV Stream Ingestion, wenn:

  • Sie benötigen ein Hochdurchsatz-Datenbank-Staging für massive Multi-Projekt-Unternehmens-XER-Exporte.
  • Sie müssen nur Metadaten, Kostenkonten und Fortschrittskurven über SQL-Analysen extrahieren.

Zusammenfassung & bewährte Verfahren

Beim Erstellen von Open-Source-Pipelines für Terminplanungsdaten:

  1. Nie .mpp manuell parsen: Die Microsoft-Binärspezifikation ist komplex und undokumentiert. Verlassen Sie sich stets auf bewährte Bibliotheken wie MPXJ.
  2. Achten Sie auf Datumszeitzonen: Primavera-Pläne erfassen Arbeitsdauern häufig ohne Zeitzonen-Metadaten und basieren auf Projektkalendern. Stellen Sie sicher, dass Ihre Ingestions-Pipeline 8-Stunden-Arbeitstag-Verschiebungen gegenüber 24-Stunden-Kalendertagen berücksichtigt.
  3. Referentielle Integrität prüfen: In XER-Dateien treten häufig verwaiste Datensätze (z. B. Aufgaben, die auf gelöschte WBS‑Knoten verweisen) bei manuell erstellten Projekt-Exporten auf. Validieren Sie stets defensiv Fremdschlüssel während des ETL.

FAQ

**Q1: 1. Können Open-Source-Bibliotheken native binäre .mpp-Dateien direkt schreiben oder aktualisieren?

A1: Nein, aufgrund des proprietären Binärformats von Microsoft können Open-Source-Bibliotheken .mpp-Dateien zuverlässig lesen, aber das Schreiben erfolgt in der Regel durch Export in Standardformate wie MSPDI (XML) oder MPX.

**Q2: Benötige ich Microsoft Project oder Primavera P6 auf meinem Server installiert, um diese Dateien zu verarbeiten?

A2: Nein, Bibliotheken wie MPXJ und xerparser sind eigenständige Parser, die Dateien direkt verarbeiten, ohne dass Host-Softwarelizenzen erforderlich sind.

**Q3: Was ist die beste native Python-Bibliothek zum Parsen von Primavera P6 XER-Dateien ohne Java-Abhängigkeiten?

A3: xerparser ist die führende reine Python-Option zum Parsen von XER-Dumps direkt in native Dictionaries und pandas DataFrames.

**Q4: Kann MPXJ Microsoft Project MPP-Dateien in Primavera P6-Formate konvertieren?

A4: Ja, MPXJ kann eine .mpp-Datei lesen und den normalisierten Zeitplan in das Primavera-kompatible PMXML-Format exportieren.

**Q5: Warum lassen sich Primavera XER-Dateien leichter parsen als Microsoft Project MPP-Dateien?

A5: XER-Dateien sind menschenlesbare, tabulatorgetrennte relationale Datenbank‑Dumps, während MPP-Dateien proprietäre, binäre zusammengesetzte Dokumentstrukturen sind.

Ressourcen für Dateiformate

Dateiformat-News – Ihre zentrale Anlaufstelle für alle Neuigkeiten zu Dateiformaten aus aller Welt Dateiformat-Foren – Stellen Sie Ihre Fragen in Dateiformat-Foren, um nützliche Informationen von Dateiformat‑Experten und Community‑Nutzern zu erhalten Dateiformat-Wiki – Erkunden Sie Dateiformat‑Kategorien für Informationen über verschiedene Dateiformate Open Source APIs und Bibliotheken für Projektmanagement