Zuletzt aktualisiert: 02 Sept, 2026

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 / Werkzeug | Primäre Sprache | Unterstützte Formate | Lesen / Schreiben | Bestes Anwendungsbeispiel |
|---|---|---|---|---|
| MPXJ | Java (Python / .NET Bindungen) | MPP, MPT, MPX, XER, PMXML, MSPDI | Lesen (MPP/XER); Schreiben (MPX/MSPDI/PMXML) | Enterprise Java, Multi-Format-Konvertierung, All-in-One-Zeitpläne |
| xerparser | Python | XER | Lesen & Parsen | Data Science, Pandas-Planungsanalyse, ETL-Pipelines |
| python-mpxj | Python | MPP, XER, XML | Lesen / Konvertieren | Pythonischer Wrapper um MPXJ mit JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | Stream / Export | Extrahieren von rohen, SQL-ähnlichen Tabellen in relationale Datenbanken |
| OpenProj / ProjectLibre Core | Java | MPP (older versions), XML | Lesen / Rendern | Desktop/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 (
mpxjauf 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) undTASKPRED(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
.mppin moderne offene Formate wie.jsonoder.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:
- Sie müssen nur tabellarische Beziehungen mit SQL abfragen.
- 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:
- Nie
.mppmanuell parsen: Die Microsoft-Binärspezifikation ist komplex und undokumentiert. Verlassen Sie sich stets auf bewährte Bibliotheken wie MPXJ. - 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.
- 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