Paskutinį kartą atnaujinta: 02 Sep, 2026

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

Vyriausios atviro kodo API, skirtos dirbti su MS Project (MPP) & Primavera (XER) failais

Įmonių projektų valdyme du nuosavybiniai failų formatai dominuoja: Microsoft Project (.mpp) ir Oracle Primavera P6 (.xer). Nesvarbu, ar kuriate vidinį analitikos skydelį, sinchronizuojate statybų tvarkaraščius su ERP sistemomis, ar automatizuojate projekto būsenos srautus, šių tvarkaraščių failų skaitymas ir manipuliavimas programiškai yra esminis reikalavimas.

Tačiau abu formatai kelia garsiai žinomus inžinerinius sunkumus:

  • MPP files yra dvejetainiai, neaprašyti OLE struktūruoto saugojimo arba nuosavybiniai sudėtiniai dokumentų formatai, kurių schema keičiasi beveik kiekviename pagrindiniame MS Project leidime (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER files yra tabuliariai atskirti teksto eksportai, struktūruoti kaip reliacinės duomenų bazės lentelės (%T lentelės su %F laukais ir %R įrašais), pripildyti sudėtingų nuorodų vientisumo apribojimų, kelių kalendorių paveldėjimo ir kritinio kelio logikos.

Komerciniai SDK, tokie kaip Aspose.Tasks, egzistuoja, tačiau licencijavimo kaštai ir tiekėjo priklausomybė daro patikimas atviro kodo alternatyvas būtinas. Šiame vadove mes išnagrinėjam geriausias atviro kodo API, bibliotekas ir analizatorių, prieinamus Java, Python ir C# kalbomis, kad tvarkingai ir efektyviai apdorotume MPP ir XER failus.

Greitas atviro kodo įrankių palyginimas

Biblioteka / ĮrankisPagrindinė kalbaPalaikomi formataiSkaityti / RašytiGeriausias naudojimo atvejis
MPXJJava (Python / .NET susiejimai)MPP, MPT, MPX, XER, PMXML, MSPDISkaityti (MPP/XER); Rašyti (MPX/MSPDI/PMXML)Įmonės lygio Java, daugių formatų konvertavimas, viskas viename tvarkaraščiai
xerparserPythonXERSkaityti ir apdorotiDuomenų mokslas, pandas tvarkaraščių analizė, ETL vamzdynai
python-mpxjPythonMPP, XER, XMLSkaityti / KonvertuotiPythoninis apvalkalas aplink MPXJ naudojant JPype
netezza-xer / xer-to-csvShell / Python / GoXERSrautas / EksportasIšgaunant neapdorotas SQL tipo lenteles į reliacines duomenų bazes
OpenProj / ProjectLibre CoreJavaMPP (senesnės versijos), XMLSkaityti / AtvaizduotiDarbalaukio/variklio integracija bazinėms Ganto diagramoms

1. MPXJ (Microsoft Project keitimas Java)

Neabejotinas pramonės standartas tvarkaraščių interoperabilumui

Jei atvirojo kodo tvarkaraščių bibliotekų auksinis standartas egzistuoja, tai yra MPXJ. Jį aktyviai prižiūri daugiau nei du dešimtmečiai Jon Iles, MPXJ iš pradžių buvo sukurtas Microsoft Project MPX failų apdorojimui, tačiau išsiplėtė į universalią projekto tvarkaraščių formatų vertimo variklį.

Pagrindinės galimybės

  • Tiesioginis MPP išskyrimas: Analizuoja nuosavybinį binarinį MPP failų formatą beveik visose MS Project versijose (Project 98 iki šiuolaikinių Project 2016/2019/2021/365) nereikalaujant įdiegtos Microsoft Project kopijos.
  • Primavera P6 XER ir PMXML analizė: Natūrali palaikymas tiek tekstiniams .xer išklotinėms, tiek šiuolaikiniams Primavera XML failams.
  • Normalizuotas duomenų modelis: Atveria vieningą objektų modelį (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Nesvarbu, ar jūsų įvestis yra MPP, ar XER, jūsų programos kodas bendrauja su ta pačia API.
  • Daugiakalbė platinimas: Nors rašytas Java, MPXJ paskirsto natūraliai kompiliuotas NuGet paketus .NET (C#) per IKVM/CoreCLR, taip pat Python paketą (mpxj PyPI).

Greitas kodo pavyzdys: 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());
            }
        }
    }
}

Kur MPXJ išsiskiria

  • Tikra kryžminio formato normalizacija (konvertuojant MPP į XER suderinamą PMXML arba MSPDI).
  • Sudėtinga kalendoriaus logika (pamainos, išimtys, kelių kalendorių darbo valandos).
  • Gamybos lygio stabilumas su aktyvia bendruomene.

2. xerparser (Python)

Lengvas, natūralus Python analizavimas Primavera XER

Nors MPXJ galima iškviesti per Python sąsajas, tai reikalauja JVM posistemės (per JPype) paleidimo. Kai jums reikia visiškai natūralios Python analizatoriaus, kuris veikia be Java priklausomybių, xerparser yra geriausias sprendimas.

XER failas iš esmės yra duomenų bazės momentinė nuotrauka, išsaugota plokščiu tekstu. xerparser dekoduoja šias lenteles į struktūruotus Python objektus ir sklandžiai integruojasi su pandas.

Pagrindinės galimybės

  • Nėra Java priklausomybių: Grysta Python 3 biblioteka, įdiegiama per pip install xerparser.
  • Santykinis vientisumas: Nurodo pagrindines Primavera lenteles, tokias kaip TASK (veiklos), PROJECT (projekto metaduomenys), PROJWBS (WBS hierarchijos), TASKRSRC (priskyrimai) ir TASKPRED (logikos ryšiai).
  • Greita vykdymas: Idealu konteinerizuotoms mikroservisoms, AWS Lambda funkcijoms ir šiuolaikinėms duomenų orkestravimo konvejoms (pvz., Apache Airflow, Prefect).

Greitas kodo pavyzdys: 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())

Kur xerparser išsiskiria

  • Duomenų inžinerija, vėlavimo reikalų analizė ir tvarkaraščių sveikatos patikrinimai (DCMA 14‑punktų vertinimo skriptai).
  • Serverless darbo krūviai, kai 50 MB+ Java vykdymo aplinkos pakavimas yra nepraktiškas.

3. python-mpxj

Sujungiant Python su visapusiška MPXJ galia

Jei dirbate su Python, bet turite apdoroti binarinius .mpp failus, xerparser jums nepadės, nes jis skirtas tik .xer. Patikimiausias atviro kodo tiltas yra python-mpxj.

Pagrindinės galimybės

  • Automatiškai paleidžia be galvos (headless) įterptą JVM naudojant jpype1.
  • Atveria visą MPXJ API tiesiogiai Python kūrėjams.
  • Leidžia tiesioginį konvertavimą iš nuosavybinio .mpp į šiuolaikinius atviro kodo formatus, tokius kaip .json arba .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. Individualios analizės priemonės ir duomenų bazės įkėlimo scenarijai

Apdorojant neapdorotą Primavera XER srautinio apdorojimo būdu

Kadangi Primavera XER laikosi numatomo lentelės formato, daugelis atviro kodo inžinerijos komandų naudoja pritaikytus lentelinių srautų dekoderius (parašytus Go, Python arba Rust kalbomis) vietoj aukšto lygio DOM stiliaus tvarkaraščių bibliotekų.

XER failo struktūra formatuota taip:

%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

Keli atviro kodo scenarijai „GitHub“ (pvz., xer2sqlite ir xer-to-csv) tiesiogiai konvertuoja šią struktūrą į SQLite arba PostgreSQL. Šis metodas yra optimalus, jei:

  1. Jums tik reikia vykdyti užklausas lentelinėms santykiams su SQL.
  2. Tvarkaraščiai yra šimtų megabaitų dydžio su dešimtimis tūkstančių užduočių, kur objektų orientuoti medžių įkėlėjai sukeltų atminties trūkumo klaidas.

Techninis palyginimas: Ką pasirinkti?

Pasirinkite MPXJ, jei:

  • Jūs turite skaityti dvejetainius Microsoft Project .mpp failus neperkant nuosavybinės komercinės programinės įrangos.
  • Jums reikia išsamios tvarkaraščių analizės: darbo kalendorių, vėlavimo trukmės skaičiavimų, kritinio kelio skaičiavimo ir bazinės variacijos.
  • Jūsų technologijų krūva yra Java, Kotlin, C# (.NET) arba įmoninis Python.

Pasirinkite xerparser, jei:

  • Jūs išskirtinai tvarkote Primavera P6 .xer failus.
  • Jūsų duomenų srautas parašytas gimtoje Python kalboje ir tiesiogiai tiekiamas į pandas, NumPy arba vizualizacijas, tokias kaip Dash / Streamlit.
  • Jūs diegiate į supaprastintas konteinerines aplinkas arba be serverio debesų vykdytojus.

Pasirinkite tiesioginį DB / CSV srauto įkėlimą, jei:

  • Jums reikia didelio pralaidumo duomenų bazės tarpinės stadijos masyviems daugelio projektų įmonės XER eksporto procesams.
  • Jums tik reikia išgauti metaduomenis, išlaidų sąskaitas ir progreso kreives per SQL analitiką.

Santrauka ir geriausios praktikos

Kuriant atviro kodo duomenų srautus tvarkaraščių duomenims:

  1. Niekada nenaudokite .mpp rankiniu būdu: Microsoft binarinė specifikacija yra sudėtinga ir neaprašyta. Visada pasikliaukite išbandytomis bibliotekomis, tokiomis kaip MPXJ.
  2. Atsargiai su datos laiko juostomis: Primavera tvarkaraščiai dažnai įrašo darbo trukmes be laiko juostos metaduomenų, remdamiesi projekto kalendoriais. Įsitikinkite, kad jūsų įsisavinimo duomenų srautas atsižvelgia į 8 valandų darbo dienos poslinkius, palyginti su 24 valandų kalendorinėmis dienomis.
  3. Patikrinkite nuorodų vientisumą: XER failuose dažnai pasitaiko apleistų įrašų (pvz., užduočių, rodančių į ištrintus WBS mazgus) rankiniu būdu sukurtuose projekto eksporto duomenyse. Visada atsargiai patikrinkite svetimų raktų integralumą ETL proceso metu.

DUK

**Q1: 1. Ar atviro kodo bibliotekos gali tiesiogiai rašyti arba atnaujinti natūralius binarinius .mpp failus?

A1: Ne, dėl Microsoft nuosavybinio dvejetainio formato, atviro kodo bibliotekos gali patikimai skaityti .mpp failus, tačiau rašymas paprastai eksportuojamas į standartinius formatus, pvz., MSPDI (XML) arba MPX.

**Q2: Ar man reikia, kad serveryje būtų įdiegta Microsoft Project arba Primavera P6, kad galėčiau apdoroti šiuos failus?

A2: Ne, tokios bibliotekos kaip MPXJ ir xerparser yra savarankiški analizatoriai, kurie apdoroja failus tiesiogiai, nereikalaujant pagrindinės programinės įrangos licencijų.

**Q3: Kokia yra geriausia natūrali Python biblioteka, skirta Primavera P6 XER failų analizavimui be Java priklausomybių?

A3: xerparser yra pirmaujanti grynai Python pasirinkimas XER išklotinėms tiesiogiai konvertuoti į natūralius žodynus ir pandas DataFrames.

**Q4: Ar MPXJ gali konvertuoti Microsoft Project MPP failus į Primavera P6 formatus?

A4: Taip, MPXJ gali perskaityti .mpp failą ir eksportuoti normalizuotą tvarkaraštį į Primavera suderinamą PMXML formatą.

**Q5: Kodėl Primavera XER failai yra lengviau analizuojami nei Microsoft Project MPP failai?

A5: XER failai yra žmonėms skaitomi, tabuliatoriaus atskirti reliacinės duomenų bazės išklotiniai, o MPP failai yra nuosavybinės, dvejetainės sudėtinės dokumentų struktūros.

Failų formatų ištekliai

Failų formato naujienos – Jūsų vienas šaltinis visoms naujienoms, susijusioms su failų formatais iš viso pasaulio Failų formato forumai – Skelbkite savo užklausas failų formato forumuose, kad gautumėte naudingą informaciją iš failų formato ekspertų ir bendruomenės narių Failų formato wiki – Naršykite failų formato kategorijas, kad sužinotumėte informaciją apie įvairius failų formatus Atviro kodo API ir bibliotekos projektų valdymui