Senast uppdaterad: 02 sept, 2026

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 / Verktyg | Primärt språk | Format som stöds | Läsa / Skriva | Bästa användningsfall |
|---|---|---|---|---|
| MPXJ | Java (Python / .NET-bindningar) | MPP, MPT, MPX, XER, PMXML, MSPDI | Läs (MPP/XER); Skriv (MPX/MSPDI/PMXML) | Enterprise Java, multi-format konvertering, allt-i-ett scheman |
| xerparser | Python | XER | Läs & analysera | Data science, pandas schemaläggningsanalys, ETL-pipelines |
| python-mpxj | Python | MPP, XER, XML | Läs / konvertera | Pythonisk wrapper runt MPXJ med JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | Ström / Export | Extrahera råa SQL‑liknande tabeller till relationsdatabaser |
| OpenProj / ProjectLibre Core | Java | MPP (older versions), XML | Läs / Rendera | Desktop-/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 (
mpxjpå 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) ochTASKPRED(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
.mpptill moderna öppna format som.jsoneller.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:
- Du behöver bara fråga tabellära relationer med SQL.
- 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:
- Aldrig tolka
.mppmanuellt: Microsofts binära specifikation är invecklad och odokumenterad. Lita alltid på beprövade bibliotek som MPXJ. - 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.
- 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