Viimeksi päivitetty: 02 Sep, 2026

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

Johtavat avoimen lähdekoodin API:t MS Project (MPP) & Primavera (XER) -tiedostot

Yritystason projektinhallinnassa kaksi proprietaarista tiedostomuotoa hallitsevat: Microsoft Project (.mpp) ja Oracle Primavera P6 (.xer). Olipa kyseessä sisäisen analytiikkapaneelin rakentaminen, rakennusaikataulujen synkronointi ERP-järjestelmien kanssa tai projektin tilaputkistojen automatisointi, näiden aikataulutiedostojen lukeminen ja käsitteleminen ohjelmallisesti on kriittinen vaatimus.

Kuitenkin molemmat formaatit aiheuttavat tunnettuja insinöörihaasteita:

  • MPP-tiedostot ovat binaarisia, dokumentoimattomia OLE Structured Storage - tai omistettuja yhdistettyjä asiakirjamuotoja, joissa skeemamuutoksia on lähes jokaisessa merkittävässä MS Project -julkaisussa (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER -tiedostot ovat sarkaimella erotettuja teksti­vientiä, jotka on jäsennelty relaatiotietokantatauluiksi (%T-taulut, joissa %F-kenttiä ja %R-tietueita), täynnä monimutkaisia viite­eheys­rajoituksia, monikalenteriperintöä ja kriittisen polun logiikkaa.

Kaupallisia SDK:ita, kuten Aspose.Tasks, on olemassa, mutta lisenssikustannukset ja toimittajasidonnaisuus tekevät vahvoista avoimen lähdekoodin vaihtoehdoista välttämättömiä. Tässä oppaassa käymme läpi parhaat avoimen lähdekoodin API:t, kirjastot ja jäsentimet, jotka ovat saatavilla Java-, Python- ja C#-ympäristöissä MPP- ja XER-tiedostojen käsittelemiseksi puhtaasti ja tehokkaasti.

Nopea vertailu avoimen lähdekoodin työkaluista

Kirjasto / TyökaluEnsisijainen kieliTuetut formaatitLuku / KirjoitusParas käyttötapaus
MPXJJava (Python / .NET-sidokset)MPP, MPT, MPX, XER, PMXML, MSPDILuku (MPP/XER); Kirjoitus (MPX/MSPDI/PMXML)Enterprise Java, monimuotoinen muunnos, kaikki yhdessä aikataulut
xerparserPythonXERLue & jäsennäData-analytiikka, pandas-aikatauluanalyysi, ETL-putket
python-mpxjPythonMPP, XER, XMLLue / MuunnaPython-tyylinen wrapper MPXJ:n ympärille käyttäen JPypea
netezza-xer / xer-to-csvShell / Python / GoXERVirta / VientiRaaka SQL-tyyppisten taulukoiden poiminta relaatiotietokantoihin
OpenProj / ProjectLibre CoreJavaMPP (vanhemmat versiot), XMLLue / RenderöiTyöpöytä/Engine-integraatio perus Gantt-näkymille

1. MPXJ (Microsoft Project -vaihto Java:ssa)

Epäilyksettömänä alan standardina aikataulujen yhteentoimivuudelle

Jos avoimen lähdekoodin aikataulutuskirjastoissa on kulta‑standardi, se on MPXJ. Jon Ilesin aktiivisesti ylläpitämä MPXJ on rakennettu alun perin Microsoft Project MPX -tiedostojen käsittelemiseksi, mutta se on laajentunut yleiseksi käännöskoneeksi projektin aikataulutustiedostomuodoille.

Keskeiset ominaisuudet

  • Suora MPP‑purku: Jäsentää omistettuja binaaritiedostoja MPP lähes kaikissa MS Project -versioissa (Project 98 nykyaikaisiin Project 2016/2019/2021/365) ilman, että Microsoft Projectin asennettua kopiota tarvitaan.
  • Primavera P6 XER‑ ja PMXML‑jäsennys: Alkuperäinen tuki sekä teksti‑pohjaisille .xer‑vedoksille että nykyaikaisille Primavera XML -tiedostoille.
  • Normoitu tietomalli: Paljastaa yhtenäisen objektimallin (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Riippumatta siitä, onko syötteesi MPP‑ tai XER‑tiedosto, sovelluskoodisi käyttää täsmälleen samaa API:a.
  • Monikielinen jakelu: Vaikka MPXJ on kirjoitettu Javaan, se jakaa natiivikäännettyjä NuGet‑paketteja .NET (C#):lle IKVM/CoreCLR:n kautta, sekä Python‑paketin (mpxj PyPI:ssä).

Nopea koodiesimerkki: 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());
            }
        }
    }
}

Missä MPXJ loistaa

  • Todellinen moniformaattinen normalisointi (muuntaen MPP:n XER-yhteensopivaksi PMXML:ksi tai MSPDI:ksi).
  • Monimutkainen kalenterilogiikka (vuorot, poikkeukset, monikalenteriset työajat).
  • Tuotantotason vakaa toiminta aktiivisen yhteisön kanssa.

2. xerparser (Python)

Kevyt, natiivinen Python-parsinta Primavera XER:lle

Vaikka MPXJ voidaan kutsua Python-sidosten kautta, se vaatii JVM-taustan (JPype:n kautta) käynnistämisen. Kun tarvitset täysin natiivin Python-parsijan, joka toimii ilman Java-riippuvuuksia, xerparser on suositeltu ratkaisu.

XER-tiedosto on periaatteessa tietokannan tilannekuva, joka on tallennettu tasatekstiin. xerparser purkaa nämä taulut rakenteellisiksi Python-objekteiksi ja integroituu saumattomasti pandas-kirjastoon.

Keskeiset ominaisuudet

  • Nollajava-riippuvuudet: Puhtaan Python 3 -kirjasto, asennettavissa komennolla pip install xerparser.
  • Suhteellinen eheys: Karttaa Primavera-ydintaulut kuten TASK (Toiminnot), PROJECT (Projektin metatiedot), PROJWBS (WBS-hierarkiat), TASKRSRC (Tehtäväresurssit), ja TASKPRED (Logiikkayhteydet).
  • Nopea suoritus: Ihanteellinen kontitettuja mikropalveluita, AWS Lambda -funktioita ja moderneja datan orkestrointiputkia (esim. Apache Airflow, Prefect) varten.

Nopea koodiesimerkki: 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())

Missä xerparser loistaa

  • Data‑insinööri, viivästysvaatimusanalytiikka ja aikataulun terveystarkastukset (DCMA 14‑kohdan arviointiskriptit).
  • Palvelimettomat työkuormat, joissa 50 MB+ Java‑ajonaikaisen ympäristön paketoiminen on epäkäytännöllistä.

3. python-mpxj

Pythonin yhdistäminen MPXJ:n täyteen tehoon

Jos työskentelet Pythonissa, mutta sinun täytyy käsitellä binaarisia .mpp‑tiedostoja, xerparser ei voi auttaa, koska se kohdistuu vain .xer‑tiedostoihin. Luotettavin avoimen lähdekoodin silta on python-mpxj.

Keskeiset ominaisuudet

  • Käynnistää automaattisesti päänettömän upotetun JVM:n käyttäen jpype1.
  • Tarjoaa täyden MPXJ‑API:n suoraan Python‑kehittäjille.
  • Mahdollistaa suoran muunnoksen proprietaarisesta .mpp‑tiedostosta moderneihin avoimiin formaatteihin, kuten .json tai .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. Mukautetut jäsentämistyökalut & tietokannan syöttöskriptit

Raakan Primavera XER:n käsittely suoratoiston avulla

Koska Primavera XER noudattaa ennustettavaa taulukkomuotoa, monet avoimen lähdekoodin insinööritiimit käyttävät räätälöityjä taulukko‑virta‑purkajia (kirjoitettu Go‑, Python‑ tai Rust‑kielellä) sen sijaan, että käyttäisivät korkean tason DOM‑tyylisiä aikataulukirjastoja.

XER‑tiedoston rakenne on muotoiltu seuraavasti:

%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

Useita avoimen lähdekoodin skriptejä GitHubissa (kuten xer2sqlite ja xer-to-csv) jäsentävät tämän rakenteen suoraan SQLiteen tai PostgreSQL:iin. Tämä lähestymistapa on optimaalinen, jos:

  1. Tarvitset vain taulukkosuhteiden kyselyä SQL:llä.
  2. Aikataulut ovat satojen megatavujen kokoisia kymmenillä tuhansilla tehtävillä, jolloin oliopohjaiset puunlataajat aiheuttaisivat muistin loppumisen virheitä.

Tekninen vertailu: Kumpi sinun tulisi valita?

Valitse MPXJ, jos:

  • Sinun täytyy lukea binaarisia Microsoft Project .mpp -tiedostoja maksamatta omistusoikeudellisesta kaupallisesta ohjelmistosta.
  • Tarvitset syvällistä aikataulutietoa: työkalenterit, viiveaikojen laskelmat, kriittisen polun laskenta ja peruslinjan poikkeamat.
  • Teknologiakokonaisuutesi on Java, Kotlin, C# (.NET) tai yritys-Python.

Valitse xerparser, jos:

  • Käsittelet yksinomaan Primavera P6 .xer -tiedostoja.
  • Putkistosi on kirjoitettu natiivissa Pythonissa ja syötetään suoraan pandasille, NumPy:lle tai visualisoijille kuten Dash / Streamlit.
  • Olet käyttämässä kevyitä konttiympäristöjä tai palvelimettomia pilvikäyttäjiä.

Valitse suora DB / CSV -virta-integraatio, jos:

  • Tarvitset suuritehoista tietokantavälivaihetta massiivisiin moniprojektisiin yritys-XER-vientiin.
  • Tarvitset vain metatietojen, kustannustilien ja edistymiskäyrien poimimista SQL-analytiikan avulla.

Yhteenveto ja parhaat käytännöt

Kun rakennat avoimen lähdekoodin putkistoja aikataulutietoja varten:

  1. Älä koskaan jäsentää .mpp manuaalisesti: Microsoftin binaarispecifikaatio on monimutkainen eikä dokumentoitu. Luota aina testattuihin kirjastoihin, kuten MPXJ.
  2. Varo päivämäärä- ja aikavyöhykkeitä: Primavera-aikataulut tallentavat usein työaikojen keston ilman aikavyöhykkeen metatietoja, luottaen projektikalentereihin. Varmista, että tiedonkeruuputkistosi ottaa huomioon 8‑tunnin työpäivän siirtymät vs. 24‑tunnin kalenteripäivät.
  3. Vahvista viiteintegriteetti: XER-tiedostoissa orvot tietueet (esim. tehtävät, jotka viittaavat poistettuihin WBS-solmuihin) esiintyvät usein manuaalisesti luoduissa projektivienteissä. Vahvista aina ulkoiset avaimet puolustavasti ETL-prosessin aikana.

UKK

**Q1: 1. Voiko avoimen lähdekoodin kirjastot kirjoittaa tai päivittää natiivisia binaarisia .mpp-tiedostoja suoraan?

A1: Ei, Microsoftin omistusoikeudellisen binaariformaatin vuoksi avoimen lähdekoodin kirjastot voivat luotettavasti lukea .mpp-tiedostoja, mutta kirjoitukset viedään yleensä standardimuotoihin kuten MSPDI (XML) tai MPX.

**Q2: Tarvitseeko minun asentaa Microsoft Project tai Primavera P6 palvelimelle näiden tiedostojen jäsentämiseksi?

A2: Ei, kirjastot kuten MPXJ ja xerparser ovat itsenäisiä jäsentimiä, jotka käsittelevät tiedostoja suoraan ilman, että isäntäohjelmiston lisenssejä tarvitaan.

**Q3: Mikä on paras natiivi Python-kirjasto Primavera P6 XER -tiedostojen jäsentämiseen ilman Java-riippuvuuksia?

A3: xerparser on ensiluokkainen puhdas Python -valinta XER-dumpien jäsentämiseen suoraan natiivisiin sanakirjoihin ja pandas DataFrameihin.

**Q4: Voiko MPXJ muuntaa Microsoft Project MPP -tiedostoja Primavera P6 -formaatteihin?

A4: Kyllä, MPXJ voi lukea .mpp-tiedoston ja viedä normalisoidun aikataulun Primavera-yhteensopivaan PMXML-muotoon.

**Q5: Miksi Primavera XER -tiedostot ovat helpompia jäsentää kuin Microsoft Project MPP -tiedostot?

A5: XER-tiedostot ovat ihmisen luettavissa olevia, sarkaimella erotettuja relaatiotietokannan vedoksia, kun taas MPP-tiedostot ovat omistusoikeudellisia, binäärisiä yhdistettyjä asiakirjarakenteita.

Tiedostomuotojen resurssit

Tiedostomuoto Uutiset – Yksi pysähdyspaikka kaikille tiedostomuotoihin liittyville uutisille ympäri maailmaa Tiedostomuoto Foorumit – Lähetä kysymyksesi tiedostomuotofoorumeille saadaksesi hyödyllistä tietoa tiedostomuotoasiantuntijoilta ja yhteisön käyttäjiltä Tiedostomuoto Wiki – Tutustu tiedostomuotokategorioihin saadaksesi tietoa eri tiedostomuodoista Avoimen Lähdekoodin API:t ja Kirjastot projektinhallintaan