Pēdējoreiz atjaunināts: 02 sept., 2026

Vadošās atvērtā koda API darbam ar MS Project (MPP) un Primavera (XER) failiem
Uzņēmuma projektu vadībā divi īpašnieciski formāti dominē: Microsoft Project (.mpp) un Oracle Primavera P6 (.xer). Neatkarīgi no tā, vai veidojat iekšējo analītikas informācijas paneli, sinhronizējat būvniecības grafikus ar ERP sistēmām vai automatizējat projektu statusa cauruļvadu, šo grafiku failu lasīšana un manipulēšana programmatiski ir būtiska prasība.
Tomēr abi formāti rada slaveni inženierijas šķēršļus:
- MPP files ir bināri, neapstiprināti OLE Structured Storage vai īpaši savienoti dokumentu formāti ar shēmas izmaiņām gandrīz katrā galvenajā MS Project laidienā (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
- Primavera XER files ir tabulāri atdalīti teksta eksporti, kas strukturēti kā relāciju datubāzes tabulas (
%Ttabulas ar%Flaukiem un%Rierakstiem), piepildītas ar sarežģītiem atsauču integritātes ierobežojumiem, vairāku kalendāru mantošanu un kritiskā ceļa loģiku.
Komercijas SDK, piemēram, Aspose.Tasks, pastāv, bet licences izmaksas un piegādātāja ieslēgšana padara spēcīgas atvērtā koda alternatīvas būtiskas. Šajā ceļvedī mēs sadalām vadošās atvērtā koda API, bibliotēkas un parsētājus, kas pieejami Java, Python un C# valodās, lai tīri un efektīvi apstrādātu MPP un XER failus.
Ātrs atvērtā koda rīku salīdzinājums
| Bibliotēka / Rīks | Primārā valoda | Atbalstītie formāti | Lasīt / Rakstīt | Labākais lietošanas gadījums |
|---|---|---|---|---|
| MPXJ | Java (Python / .NET saistības) | MPP, MPT, MPX, XER, PMXML, MSPDI | Lasīt (MPP/XER); Rakstīt (MPX/MSPDI/PMXML) | Uzņēmuma Java, daudzformātu konvertēšana, viss vienā grafiki |
| xerparser | Python | XER | Lasīt & parsēt | Datu zinātne, pandas plānošanas analīze, ETL caurules |
| python-mpxj | Python | MPP, XER, XML | Lasīt / Konvertēt | Pythoniska apvalks ap MPXJ, izmantojot JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | Plūsma / Eksports | Neapstrādātu SQL-veida tabulu izguve uz relāciju datubāzēm |
| OpenProj / ProjectLibre Core | Java | MPP (vecākas versijas), XML | Lasīt / Attēlot | Datora/engines integrācija pamata Gantt skatījumiem |
1. MPXJ (Microsoft Project apmaiņa Java)
Neskaidrojams nozares standarts grafiku savietojamībai
Ja atvērto koda plānošanas bibliotēkās ir zelta standarts, tas ir MPXJ. Aktīvi uzturēts vairāk nekā divdesmit gadus, ko vadīja Džons Ailes, MPXJ sākotnēji tika izveidots, lai apstrādātu Microsoft Project MPX failus, taču tas ir paplašināts par universālu tulkošanas dzini projektu plānošanas formātiem.
Galvenās iespējas
- Tieša MPP izguve: Parsē īpašnieka bināros MPP failus gandrīz visās MS Project versijās (Project 98 līdz modernajiem Project 2016/2019/2021/365), neprasot instalētu Microsoft Project kopiju.
- Primavera P6 XER & PMXML parsēšana: Iebūvēta atbalsts gan teksta bāzētiem
.xerizrakstiem, gan moderniem Primavera XML failiem. - Normalizēts datu modelis: Nodrošina vienotu objektu modeli (
ProjectFile,Task,Resource,ResourceAssignment,Relation,WorkCalendar). Neatkarīgi no tā, vai jūsu ievade ir MPP vai XER, jūsu lietojumprogrammas kods mijiedarbojas ar tieši to pašu API. - Daudzvalodu izplatīšana: Lai gan rakstīts Java, MPXJ izplata vietēji kompilētus NuGet pakotnes .NET (C#) caur IKVM/CoreCLR, kā arī Python pakotni (
mpxjuz PyPI).
Ātrs koda piemērs: 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 izceļas
- Patiesa starpformātu normalizācija (konvertējot MPP uz XER-saderīgu PMXML vai MSPDI).
- Komplekss kalendāra loģika (maiņas, izņēmumi, daudzkalendāru darba stundas).
- Ražošanas līmeņa stabilitāte ar aktīvu kopienu.
2. xerparser (Python)
Viegls, vietējais Python parsēšana priekš Primavera XER
Lai gan MPXJ var izsaukt caur Python saistēm, tas prasa darbināt JVM aizmugursistēmu (caur JPype). Kad nepieciešams tīri vietējais Python parsētājs, kas darbojas bez Java atkarībām, xerparser ir izvēles risinājums.
XER fails būtībā ir datubāzes momentuzņēmums, kas izklāts vienkāršā tekstā. xerparser dekodē šīs tabulas strukturētos Python objektos un integrējas nevainojami ar pandas.
Galvenās iespējas
- Nulles Java atkarības: Tīra Python 3 bibliotēka, ko var instalēt ar
pip install xerparser. - Relāciju integritāte: Kartē galvenās Primavera tabulas, piemēram,
TASK(Aktivitātes),PROJECT(Projekta metadati),PROJWBS(WBS hierarhijas),TASKRSRC(Piešķiršanas) unTASKPRED(Loģikas saites). - Ātra izpilde: Ideāli piemērots konteinerizētiem mikroservisiem, AWS Lambda funkcijām un modernām datu orķestrācijas cauruļvadiem (piem., Apache Airflow, Prefect).
Ātrs koda piemērs: 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 izceļas
- Datu inženierija, kavējumu prasību analīze un grafiku veselības pārbaudes (DCMA 14 punktu novērtējuma skripti).
- Serverless darbi, kur 50 MB+ Java izpildlaika apkopošana ir nepraktiska.
3. python-mpxj
Savienojot Python ar MPXJ pilnu jaudu
Ja jūs strādājat ar Python, bet jāapstrādā bināras .mpp datnes, xerparser jums nevar palīdzēt, jo tas atbalsta tikai .xer. Visuzticamākais atvērtā koda tilts ir python-mpxj.
Galvenās iespējas
- Automātiski uzsāk galvu bezgalveno iebūvēto JVM, izmantojot
jpype1. - Atklāj pilnu MPXJ API tieši Python izstrādātājiem.
- Ļauj tiešu konvertēšanu no īpašnieka
.mppuz mūsdienīgiem atvērtajiem formātiem, piemēram,.jsonvai.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. Pielāgotas parsēšanas utilītas un datu bāzes ieguves skripti
Apstrādājot neapstrādātu Primavera XER, izmantojot plūsmas apstrādi
Tā kā Primavera XER seko paredzētam tabulu formātam, daudzas atvērtā koda inženierijas komandas izmanto pielāgotus tabulāru plūsmas dekoderus (rakstītus Go, Python vai Rust valodā), nevis augsta līmeņa DOM stila grafiku bibliotēkas.
XER datnes struktūra ir formatēta kā:
%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
Vairāki atvērtā koda skripti GitHub (piemēram, xer2sqlite un xer-to-csv) parsē šo struktūru tieši uz SQLite vai PostgreSQL. Šī pieeja ir optimāla, ja:
- Jums tikai jāveic vaicājumi tabulārajām attiecībām, izmantojot SQL.
- Grafiki ir vairākus simt megabaitus lieli ar desmitiem tūkstošu uzdevumu, kur objektorientētie koku ielādētāji izraisītu atmiņas izsīkuma kļūdas.
Tehniskā salīdzinājuma: kuru izvēlēties?
Izvēlieties MPXJ, ja:
- Jums jāspēj nolasīt bināros Microsoft Project
.mppfailus, nemaksājot par īpašnieka komerciālo programmatūru. - Jums ir vajadzīga dziļa grafika izpratne: darba kalendāri, kavējuma ilguma aprēķini, kritiskā ceļa aprēķins un bāzes līmeņa novirze.
- Jūsu tehnoloģiju steks ir Java, Kotlin, C# (.NET) vai uzņēmuma Python.
Izvēlieties xerparser, ja:
- Jūs ekskluzīvi apstrādājat Primavera P6
.xerfailus. - Jūsu datu caurule ir rakstīta native Python valodā un tieši piegādā datus pandas, NumPy vai vizualizācijas rīkiem, piemēram, Dash / Streamlit.
- Jūs izvietojat uz vieglām konteineru vidēm vai serverless mākoņa izpildītājiem.
Izvēlieties tiešu DB/CSV plūsmas iegūšanu, ja:
- Jums ir nepieciešama augstas caurplūdes datubāzes starpprocesēšana masīviem daudzprojektu uzņēmuma XER eksportiem.
- Jums tikai jāizvelk metadati, izmaksu konti un progresa līknes, izmantojot SQL analītiku.
Kopsavilkums un labākā prakse
Veidojot atvērtā koda cauruļvadus grafiku datiem:
- Nekad neparsējiet
.mppmanuāli: Microsoft binārā specifikācija ir sarežģīta un neaprakstīta. Vienmēr paļaujieties uz pārbaudītām bibliotēkām, piemēram, MPXJ. - Uzmanieties no datuma laika joslām: Primavera grafiki bieži reģistrē darba ilgumu bez laika joslas metadatiem, balstoties uz projektu kalendāriem. Pārliecinieties, ka jūsu datu uzņemšanas cauruļvads ņem vērā 8 stundu darba dienas pārejas pret 24 stundu kalendāra dienām.
- Validējiet atsauču integritāti: XER failos bieži sastopami vientuļi ieraksti (piemēram, uzdevumi, kas norāda uz izdzēstām WBS mezgliem) manuāli izveidotajos projektu eksportos. Vienmēr aizsargājoties validējiet ārējās atslēgas ETL procesā.
BUJ
**Q1: 1. Vai atvērtā koda bibliotēkas var tieši rakstīt vai atjaunināt vietējus bināros .mpp failus?
A1: Nē, Microsoft īpašā binārā formāta dēļ atvērtā koda bibliotēkas var uzticami nolasīt .mpp failus, bet rakstīšana parasti tiek eksportēta uz standartformātiem, piemēram, MSPDI (XML) vai MPX.
**Q2: Vai man ir jāinstalē Microsoft Project vai Primavera P6 uz servera, lai parsētu šos failus?
A2: Nē, tādas bibliotēkas kā MPXJ un xerparser ir neatkarīgi parsētāji, kas apstrādā failus tieši, neprasot hosta programmatūras licences.
**Q3: Kura ir labākā vietējā Python bibliotēka Primavera P6 XER failu parsēšanai bez Java atkarībām?
A3: xerparser ir vadošais tīri Python risinājums XER datu pārveidošanai tieši uz vietējām vārdnīcām un pandas DataFrames.
**Q4: Vai MPXJ var konvertēt Microsoft Project MPP failus uz Primavera P6 formātiem?
A4: Jā, MPXJ var nolasīt .mpp failu un eksportēt normalizēto grafiku uz Primavera saderīgu PMXML formātu.
**Q5: Kāpēc Primavera XER faili ir vieglāk parsējami nekā Microsoft Project MPP faili?
A5: XER faili ir cilvēkam lasāmi, tabulāri atdalīti relāciju datu bāzes izklājumi, savukārt MPP faili ir īpašnieka tiesību, bināri sastāvdaļu dokumentu struktūras.
Faila formāta resursi
Failu Formātu Ziņas – Jūsu vienīgais avots visām ziņām, kas saistītas ar failu formātiem no visas pasaules Failu Formātu Forums – Publicējiet savus jautājumus failu formātu forumos, lai saņemtu noderīgu informāciju no failu formātu ekspertiem un kopienas lietotājiem Failu Formātu Viki –Izpētiet failu formātu kategorijas, lai iegūtu informāciju par dažādiem failu formātiem Atvērtā Koda API un Bibliotēkas projektu vadībai