Senast uppdaterad: 02 sept, 2026

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

Ledande API:er med öppen källkod för att arbeta med MS Project (MPP) & Primavera (XER) filer

I företagsprojektledning råder två proprietära filformat som dominerar: Microsoft Project (.mpp) och Oracle Primavera P6 (.xer). Oavsett om du bygger en intern analysdashboard, synkroniserar byggscheman med ERP-system eller automatiserar projektstatuspipelines, är läsning och manipulering av dessa schemaläggningsfiler programmässigt ett kritiskt krav.

Dock innebär båda formaten ökända ingenjörsutmaningar:

  • MPP-filer är binära, odokumenterade OLE Structured Storage- eller proprietära sammansatta dokumentformat med schemavariationer i praktiskt taget varje större MS Project-utgåva (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER-filer är tab‑separerade textexporter strukturerade som relationsdatabastabeller (%T‑tabeller med %F‑fält och %R‑poster), fyllda med komplexa referensintegritetsbegränsningar, multi‑kalenderarv och kritisk‑väg‑logik.

Kommersiella SDK:er som Aspose.Tasks finns, men licenskostnader och leverantörslåsning gör robusta open‑source‑alternativ nödvändiga. I den här guiden går vi igenom de främsta open‑source‑API:erna, biblioteken och parserarna som finns för Java, Python och C# för att hantera MPP‑ och XER‑filer på ett rent och effektivt sätt.

Snabb jämförelse av verktyg med öppen källkod

Bibliotek / VerktygPrimärt språkFormat som stödsLäsa / SkrivaBästa användningsfall
MPXJJava (Python / .NET-bindningar)MPP, MPT, MPX, XER, PMXML, MSPDILäs (MPP/XER); Skriv (MPX/MSPDI/PMXML)Enterprise Java, multi-format konvertering, allt-i-ett scheman
xerparserPythonXERLäs & analyseraData science, pandas schemaläggningsanalys, ETL-pipelines
python-mpxjPythonMPP, XER, XMLLäs / konverteraPythonisk wrapper runt MPXJ med JPype
netezza-xer / xer-to-csvShell / Python / GoXERStröm / ExportExtrahera råa SQL‑liknande tabeller till relationsdatabaser
OpenProj / ProjectLibre CoreJavaMPP (older versions), XMLLäs / RenderaDesktop-/Motorintegration för grundläggande Gantt-vyer

1. MPXJ (Microsoft Project-utbyte i Java)

Den obestridda branschstandarden för schemainteroperabilitet

Om det finns en guldstandard bland öppna schemaläggningsbibliotek, så är det MPXJ. Aktivt underhållen i över två decennier av Jon Iles, MPXJ byggdes ursprungligen för att bearbeta Microsoft Project MPX-filer, men har utvecklats till en universell översättningsmotor för projektplaneringsformat.

Nyckelfunktioner

  • Direkt MPP-extraktion: Tolkar proprietära binära MPP-filer för nästan alla MS Project-versioner (Project 98 till moderna Project 2016/2019/2021/365) utan att kräva en installerad kopia av Microsoft Project.
  • Primavera P6 XER & PMXML-parsing: Inbyggt stöd för både textbaserade .xer-dumpningar och moderna Primavera XML-filer.
  • Normaliserad datamodell: Exponerar en enhetlig objektmodell (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Oavsett om ditt indata är en MPP eller en XER, interagerar din applikationskod med exakt samma API.
  • Flerspråkig distribution: Även om den är skriven i Java, distribuerar MPXJ nativt kompilerade NuGet-paket för .NET (C#) via IKVM/CoreCLR, samt ett Python-paket (mpxj på PyPI).

Snabb kodexempel: 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());
            }
        }
    }
}

Där MPXJ utmärker sig

  • Verklig korsformatnormalisering (konverterar MPP till XER-kompatibel PMXML eller MSPDI).
  • Komplex kalenderlogik (skift, undantag, arbets timmar i flera kalendrar).
  • Produktionsklassad stabilitet med ett aktivt community.

2. xerparser (Python)

Lättviktig, inbyggd Python‑parsing för Primavera XER

Även om MPXJ kan anropas via Python-bindningar kräver det att en JVM-backend körs (via JPype). När du behöver en helt inhemsk Python‑parser som körs utan Java‑beroenden är xerparser den självklara lösningen.

En XER‑fil är i huvudsak en databassnapshot som dumpas till platt text. xerparser avkodar dessa tabeller till strukturerade Python‑objekt och integreras sömlöst med pandas.

Nyckelfunktioner

  • Inga Java‑beroenden: Ren Python 3‑bibliotek som kan installeras via pip install xerparser.
  • Relationsintegritet: Kartlägger kärntabeller i Primavera såsom TASK (Aktiviteter), PROJECT (Projektmetadata), PROJWBS (WBS‑hierarkier), TASKRSRC (Tilldelningar) och TASKPRED (Logikbindningar).
  • Snabb exekvering: Idealisk för containeriserade mikrotjänster, AWS Lambda‑funktioner och moderna data‑orkestrerings‑pipelines (t.ex. Apache Airflow, Prefect).

Snabb kodexempel: 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())

Var xerparser utmärker sig

  • Data engineering, förseningsanspråksanalys och schemahälsokontroller (DCMA 14-punkts bedömningsskript).
  • Serverlösa arbetsbelastningar där det är opraktiskt att paketera en Java-runtime på över 50 MB.

3. python-mpxj

Koppla Python med MPXJ:s fulla kraft

Om du arbetar i Python men måste bearbeta binära .mpp-filer, kan xerparser inte hjälpa dig eftersom den endast riktar sig mot .xer. Den mest pålitliga öppen‑källkodsbron är python-mpxj.

Viktiga funktioner

  • Startar automatiskt en huvudlös inbäddad JVM med jpype1.
  • Exponerar hela MPXJ‑API:t direkt för Python‑utvecklare.
  • Tillåter direkt konvertering från proprietära .mpp till moderna öppna format 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. Anpassade parsningsverktyg och skript för databasimport

Hantera rå Primavera XER via strömbehandling

Eftersom Primavera XER följer ett förutsägbart tabellformat använder många öppen‑källkods‑ingenjörsteam anpassade tabellström‑avkodare (skrivna i Go, Python eller Rust) snarare än hög‑nivå DOM‑stil schemalärobibliotek.

En XER‑filstruktur är formaterad 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

Flera open‑source‑skript på GitHub (såsom xer2sqlite och xer-to-csv) analyserar den här strukturen direkt till SQLite eller PostgreSQL. Detta tillvägagångssätt är optimalt om:

  1. Du behöver bara fråga tabellära relationer med SQL.
  2. Scheman är hundratals megabyte stora med tiotusentals uppgifter, där objektorienterade trädladdare skulle orsaka minnesbristfel.

Teknisk jämförelse: Vilken bör du välja?

Välj MPXJ om:

  • Du måste läsa binära Microsoft Project .mpp‑filer utan att betala för proprietär kommersiell programvara.
  • Du behöver djup schemainformation: arbetskalendrar, beräkning av fördröjningsperioder, kritisk‑vägsberäkning och avvikelse från baslinjen.
  • Din teknikstack är Java, Kotlin, C# (.NET) eller företags‑Python.

Välj xerparser om:

  • Du hanterar uteslutande Primavera P6 .xer‑filer.
  • Din pipeline är skriven i native Python och matas direkt in i pandas, NumPy eller visualiseringsverktyg som Dash / Streamlit.
  • Du distribuerar till lätta container-miljöer eller serverlösa moln‑körningar.

Välj Direkt DB / CSV-strömning om:

  • Du behöver höggenomströmning för databassättning för massiva flermåls‑företags‑XER‑exporter.
  • Du behöver bara extrahera metadata, kostnadskonton och framstegskurvor via SQL‑analys.

Sammanfattning & bästa praxis

När du bygger öppen‑källkod‑pipelines för schemadata:

  1. Aldrig tolka .mpp manuellt: Microsofts binära specifikation är invecklad och odokumenterad. Lita alltid på beprövade bibliotek som MPXJ.
  2. Var uppmärksam på datum‑tidszoner: Primavera‑scheman registrerar ofta arbetstider utan tidszonsmetadata och förlitar sig på projektkalendrar. Se till att ditt ingest‑pipeline tar hänsyn till 8‑timmars arbetsdagsskift jämfört med 24‑timmars kalenderdagar.
  3. Validera referensintegritet: I XER‑filer förekommer ofta föräldralösa poster (t.ex. uppgifter som pekar på raderade WBS‑noder) i manuellt skapade projekt‑exporter. Validera alltid främmande nycklar defensivt under ETL.

Vanliga frågor

**Q1: 1. Kan öppna källkods‑bibliotek skriva eller uppdatera inhemska binära .mpp‑filer direkt?

A1: Nej, på grund av Microsofts proprietära binära format kan öppna källkods‑bibliotek på ett pålitligt sätt läsa .mpp‑filer, men skrivningar exporteras vanligtvis till standardformat som MSPDI (XML) eller MPX.

**Q2: Behöver jag ha Microsoft Project eller Primavera P6 installerat på min server för att kunna analysera dessa filer?

A2: Nej, bibliotek som MPXJ och xerparser är fristående tolkar som bearbetar filer direkt utan att kräva licenser för värdprogramvaran.

**Q3: Vilket är det bästa inbyggda Python‑biblioteket för att analysera Primavera P6 XER‑filer utan Java‑beroenden?

A3: xerparser är det främsta ren‑Python‑alternativet för att parsra XER‑dumpningar direkt till inbyggda ordböcker och pandas‑DataFrames.

**Q4: Kan MPXJ konvertera Microsoft Project MPP‑filer till Primavera P6‑format?

A4: Ja, MPXJ kan läsa en .mpp‑fil och exportera det normaliserade schemat till ett Primavera‑kompatibelt PMXML‑format.

**Q5: Varför är Primavera XER‑filer enklare att analysera än Microsoft Project MPP‑filer?

A5: XER-filer är människoläsbara, tab-separerade relationsdatabassdumpningar, medan MPP-filer är proprietära, binära sammansatta dokumentstrukturer.

Resurser för filformat

Filformatnyheter – Din enda källa för all nyhet relaterad till filformat från hela världen Filformatforum – Skicka dina frågor i filformatforum för att få användbar information från filformatsexperter och community-användare Filformat Wiki – Utforska filformatkategorier för information om olika filformat Open Source API:er och bibliotek för projektledning