Paskutinį kartą atnaujinta: 02 Sep, 2026

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 (
%Tlentelės su%Flaukais 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 / Įrankis | Pagrindinė kalba | Palaikomi formatai | Skaityti / Rašyti | Geriausias naudojimo atvejis |
|---|---|---|---|---|
| MPXJ | Java (Python / .NET susiejimai) | MPP, MPT, MPX, XER, PMXML, MSPDI | Skaityti (MPP/XER); Rašyti (MPX/MSPDI/PMXML) | Įmonės lygio Java, daugių formatų konvertavimas, viskas viename tvarkaraščiai |
| xerparser | Python | XER | Skaityti ir apdoroti | Duomenų mokslas, pandas tvarkaraščių analizė, ETL vamzdynai |
| python-mpxj | Python | MPP, XER, XML | Skaityti / Konvertuoti | Pythoninis apvalkalas aplink MPXJ naudojant JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | Srautas / Eksportas | Išgaunant neapdorotas SQL tipo lenteles į reliacines duomenų bazes |
| OpenProj / ProjectLibre Core | Java | MPP (senesnės versijos), XML | Skaityti / Atvaizduoti | Darbalaukio/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
.xeriš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ą (
mpxjPyPI).
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) irTASKPRED(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.jsonarba.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:
- Jums tik reikia vykdyti užklausas lentelinėms santykiams su SQL.
- 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
.mppfailus 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
.xerfailus. - 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:
- Niekada nenaudokite
.mpprankiniu būdu: Microsoft binarinė specifikacija yra sudėtinga ir neaprašyta. Visada pasikliaukite išbandytomis bibliotekomis, tokiomis kaip MPXJ. - 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.
- 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