Τελευταία ενημέρωση: 02 Σεπ, 2026

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

Κορυφαία Ανοιχτού Κώδικα APIs για Εργασία με MS Project (MPP) & Primavera (XER) Αρχεία

Στην επιχειρησιακή διαχείριση έργων, δύο ιδιόκτητες μορφές αρχείων κυριαρχούν: Microsoft Project (.mpp) και Oracle Primavera P6 (.xer). Είτε δημιουργείτε έναν εσωτερικό πίνακα αναλύσεων, είτε συγχρονίζετε χρονοδιαγράμματα κατασκευής με συστήματα ERP, είτε αυτοματοποιείτε τις διαδικασίες κατάστασης έργων, η ανάγνωση και η διαχείριση αυτών των αρχείων χρονοπρογραμματισμού προγραμματιστικά αποτελεί κρίσιμη απαίτηση.

Ωστόσο, και οι δύο μορφές παρουσιάζουν φημισμένα τεχνικά εμπόδια:

  • αρχεία MPP είναι δυαδικά, ατεκμηρίωτα OLE Structured Storage ή ιδιόκτητα σύνθετα μορφότυπα εγγράφων με αλλαγές σχήματος σε σχεδόν κάθε κύρια έκδοση του MS Project (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • αρχεία Primavera XER είναι εξαγωγές κειμένου διαχωρισμένες με καρτέλες, δομημένες ως πίνακες σχεσιακής βάσης δεδομένων (%T πίνακες με %F πεδία και %R εγγραφές), γεμάτες με πολύπλοκους περιορισμούς ακεραιότητας αναφορών, κληρονομικότητα πολλαπλών ημερολογίων και λογική κρίσιμης διαδρομής.

Υπάρχουν εμπορικά SDK όπως το Aspose.Tasks, αλλά το κόστος αδειοδότησης και η εξάρτηση από προμηθευτές καθιστούν απαραίτητες τις ισχυρές ανοιχτές εναλλακτικές λύσεις. Σε αυτόν τον οδηγό, αναλύουμε τα κορυφαία ανοιχτά APIs, βιβλιοθήκες και αναλυτές που διατίθενται για Java, Python και C# για να χειριστούν αρχεία MPP και XER με καθαρό και αποδοτικό τρόπο.

Γρήγορη Σύγκριση Εργαλείων Ανοιχτού Κώδικα

Βιβλιοθήκη / ΕργαλείοΚύρια ΓλώσσαΥποστηριζόμενες ΜορφέςΑνάγνωση / ΕγγραφήΚαλύτερη περίπτωση χρήσης
MPXJJava (Python / δεσμεύσεις .NET)MPP, MPT, MPX, XER, PMXML, MSPDIΑνάγνωση (MPP/XER); Εγγραφή (MPX/MSPDI/PMXML)Enterprise Java, μετατροπή πολλαπλών μορφών, προγράμματα all-in-one
xerparserPythonXERΑνάγνωση & ΑνάλυσηΕπιστήμη δεδομένων, ανάλυση χρονοπρογραμματισμού pandas, ETL pipelines
python-mpxjPythonMPP, XER, XMLΑνάγνωση / ΜετατροπήPythonic wrapper γύρω από το MPXJ χρησιμοποιώντας JPype
netezza-xer / xer-to-csvShell / Python / GoXERΡοή / ΕξαγωγήΕξαγωγή ακατέργαστων πινάκων τύπου SQL σε σχεσιακές βάσεις δεδομένων
OpenProj / ProjectLibre CoreJavaMPP (παλαιότερες εκδόσεις), XMLΑνάγνωση / ΑπόδοσηΕνσωμάτωση Desktop/Engine για προβολές Gantt βάσης

1. MPXJ (Microsoft Project eXchange σε Java)

Το αδιαμφισβήτητο βιομηχανικό πρότυπο για τη διαλειτουργικότητα χρονοδιαγραμμάτων

Αν υπάρχει ένα χρυσό πρότυπο στις ανοιχτές βιβλιοθήκες προγραμματισμού, είναι το MPXJ. Συντηρείται ενεργά για πάνω από δύο δεκαετίες από τον Jon Iles, το MPXJ δημιουργήθηκε αρχικά για την επεξεργασία αρχείων MPX του Microsoft Project, αλλά έχει επεκταθεί σε μια καθολική μηχανή μετάφρασης για μορφές προγραμματισμού έργων.

Κύριες Δυνατότητες

  • Άμεση Εξαγωγή MPP: Αναλύει ιδιόκτητα δυαδικά αρχεία MPP σε σχεδόν όλες τις εκδόσεις του MS Project (Project 98 έως τις σύγχρονες εκδόσεις Project 2016/2019/2021/365) χωρίς να απαιτείται εγκατεστημένο αντίγραφο του Microsoft Project.
  • Ανάλυση Primavera P6 XER & PMXML: Φυσική υποστήριξη τόσο για κειμενικές εξαγωγές .xer όσο και για σύγχρονα αρχεία XML της Primavera.
  • Κανονικοποιημένο Μοντέλο Δεδομένων: Εκθέτει ένα ενοποιημένο μοντέλο αντικειμένων (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Ανεξάρτητα από το αν η είσοδός σας είναι MPP ή XER, ο κώδικας της εφαρμογής σας αλληλεπιδρά με το ακριβώς ίδιο API.
  • Πολυγλωσσική Διανομή: Παρόλο που είναι γραμμένο σε Java, το MPXJ διανέμει ντόπιες πακέτα NuGet για .NET (C#) μέσω IKVM/CoreCLR, καθώς και ένα πακέτο Python (mpxj στο PyPI).

Γρήγορο Παράδειγμα Κώδικα: 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());
            }
        }
    }
}

Πού Διαπρέπει το MPXJ

  • Αληθινή κανονικοποίηση μεταξύ μορφών (μετατροπή MPP σε συμβατό με XER PMXML ή MSPDI).
  • Πολύπλοκη λογική ημερολογίου (βάρδιες, εξαιρέσεις, πολλαπλές ώρες εργασίας ανά ημερολόγιο).
  • Σταθερότητα επιπέδου παραγωγής με ενεργή κοινότητα.

2. xerparser (Python)

Ελαφρύ, εγγενές parsing Python για Primavera XER

Ενώ το MPXJ μπορεί να κληθεί μέσω δεσμεύσεων Python, αυτό απαιτεί την εκτέλεση ενός backend JVM (μέσω JPype). Όταν χρειάζεστε έναν εντελώς εγγενή αναλυτή Python που εκτελείται χωρίς εξαρτήσεις Java, το xerparser είναι η προτιμώμενη λύση.

Ένα αρχείο XER είναι ουσιαστικά ένα στιγμιότυπο βάσης δεδομένων που αποθηκεύεται σε επίπεδο κείμενο. Το xerparser αποκωδικοποιεί αυτούς τους πίνακες σε δομημένα αντικείμενα Python και ενσωματώνεται άψογα με το pandas.

Κύριες Δυνατότητες

  • Μηδενικές εξαρτήσεις Java: Καθαρή βιβλιοθήκη Python 3 που μπορεί να εγκατασταθεί μέσω pip install xerparser.
  • Ακεραιότητα Σχέσεων: Χαρτογραφεί βασικούς πίνακες Primavera όπως TASK (Δραστηριότητες), PROJECT (Μεταδεδομένα έργου), PROJWBS (Ιεραρχίες WBS), TASKRSRC (Αναθέσεις) και TASKPRED (Λογικοί δεσμοί).
  • Γρήγορη Εκτέλεση: Ιδανικό για κοντέινερ μικροϋπηρεσίες, λειτουργίες AWS Lambda και σύγχρονα pipelines ορχήστρωσης δεδομένων (π.χ., Apache Airflow, Prefect).

Γρήγορο Παράδειγμα Κώδικα: 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())

Πού Διαπρέπει το xerparser

  • Μηχανική δεδομένων, ανάλυση αξιώσεων καθυστέρησης και ελέγχοι υγείας χρονοδιαγράμματος (σενάρια αξιολόγησης 14 σημείων DCMA).
  • Ασυρματικές εργασίες όπου η συσσωμάτωση ενός Java runtime άνω των 50 MB είναι μη πρακτική.

3. python-mpxj

Σύνδεση της Python με την Πλήρη Ισχύ του MPXJ

Αν εργάζεστε σε Python αλλά πρέπει να επεξεργαστείτε δυαδικά αρχεία .mpp, το xerparser δεν μπορεί να σας βοηθήσει επειδή στοχεύει μόνο σε .xer. Η πιο αξιόπιστη ανοιχτή γέφυρα είναι το python-mpxj.

Κύριες Δυνατότητες

  • Αυτόματα εκκινεί μια headless ενσωματωμένη JVM χρησιμοποιώντας το jpype1.
  • Αποκαλύπτει το πλήρες API του MPXJ απευθείας στους προγραμματιστές Python.
  • Επιτρέπει άμεση μετατροπή από ιδιόκτητο .mpp σε σύγχρονα ανοιχτά φορμά όπως .json ή .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. Προσαρμοσμένα Εργαλεία Ανάλυσης & Σενάρια Εισαγωγής Βάσεων Δεδομένων

Διαχείριση Ακατέργαστου Primavera XER μέσω Επεξεργασίας Ροής

Επειδή το Primavera XER ακολουθεί ένα προβλέψιμο μορφότυπο πίνακα, πολλές ομάδες ανοιχτού κώδικα χρησιμοποιούν προσαρμοσμένους αποκωδικοποιητές ροής πίνακα (γραμμένους σε Go, Python ή Rust) αντί για βιβλιοθήκες χρονοδιαγράμματος υψηλού επιπέδου τύπου DOM.

Η δομή ενός αρχείου XER μορφοποιείται ως:

%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

Πολλά ανοιχτού κώδικα σενάρια στο GitHub (όπως xer2sqlite και xer-to-csv) αναλύουν αυτή τη δομή απευθείας σε SQLite ή PostgreSQL. Αυτή η προσέγγιση είναι βέλτιστη εάν:

  1. Χρειάζεστε μόνο να ερωτήσετε σχέσεις πινάκων με SQL.
  2. Τα χρονοδιαγράμματα έχουν μέγεθος εκατοντάδων megabytes με δεκάδες χιλιάδες εργασίες, όπου οι φορτωτές δέντρων αντικειμενοστραφούς προγραμματισμού θα προκαλούσαν σφάλματα έλλειψης μνήμης.

Τεχνική Σύγκριση: Ποια Πρέπει να Επιλέξετε;

Επιλέξτε MPXJ εάν:

  • Πρέπει να διαβάσετε δυαδικά αρχεία Microsoft Project .mpp χωρίς να πληρώσετε για ιδιόκτητο εμπορικό λογισμικό.
  • Χρειάζεστε βαθιά νοημοσύνη χρονοδιαγράμματος: λειτουργικά ημερολόγια, υπολογισμούς καθυστέρησης, υπολογισμό κρίσιμης διαδρομής και διακύμανση βάσης.
  • Η τεχνολογική σας στοίβα είναι Java, Kotlin, C# (.NET) ή επιχειρηματικό Python.

Επιλέξτε xerparser εάν:

  • Διαχειρίζεστε αποκλειστικά αρχεία Primavera P6 .xer.
  • Η διαδικασία σας είναι γραμμένη σε native Python και τροφοδοτεί απευθείας το pandas, το NumPy ή οπτικοποιητές όπως το Dash / Streamlit.
  • Αναπτύσσετε σε ελαφριά περιβάλλοντα κοντέινερ ή σε serverless cloud runners.

Επιλέξτε άμεση εισαγωγή DB / CSV ροής εάν:

  • Χρειάζεστε υψηλής διαμεταγωγής βάσης δεδομένων για τεράστιες εξαγωγές XER πολλαπλών έργων επιχείρησης.
  • Χρειάζεται μόνο να εξάγετε μεταδεδομένα, λογαριασμούς κόστους και καμπύλες προόδου μέσω ανάλυσης SQL.

Περίληψη & Καλές Πρακτικές

Κατά την κατασκευή ανοιχτού κώδικα pipelines για δεδομένα χρονοδιαγράμματος:

  1. Ποτέ μην αναλύετε το .mpp χειροκίνητα: Η δυαδική προδιαγραφή της Microsoft είναι πολύπλοκη και ανεγγράφητη. Εμπιστευτείτε πάντα βιβλιοθήκες που έχουν δοκιμαστεί σε μάχη όπως η MPXJ.
  2. Προσοχή στις ζώνες ώρας: Τα χρονοδιαγράμματα Primavera συχνά καταγράφουν διάρκειες εργασίας χωρίς μεταδεδομένα ζώνης ώρας, βασιζόμενα στα ημερολόγια του έργου. Βεβαιωθείτε ότι η pipeline εισαγωγής σας λαμβάνει υπόψη τις αλλαγές 8 ωρών εργασίας έναντι των 24 ωρών ημερολογιακών ημερών.
  3. Επικυρώστε την ακεραιότητα αναφορών: Στα αρχεία XER, συχνά εμφανίζονται ορφανές εγγραφές (π.χ., εργασίες που δείχνουν σε διαγραμμένους κόμβους WBS) σε εξαγωγές έργου που δημιουργήθηκαν χειροκίνητα. Πάντα επικυρώστε αμυντικά τα ξένα κλειδιά κατά τη διάρκεια του ETL.

Συχνές Ερωτήσεις

**Q1: 1. Μπορούν οι βιβλιοθήκες ανοιχτού κώδικα να γράψουν ή να ενημερώσουν άμεσα αρχεία .mpp δυαδικού τύπου;

A1: Όχι, λόγω του ιδιόκτητου δυαδικού μορφότυπου της Microsoft, οι ανοιχτού κώδικα βιβλιοθήκες μπορούν αξιόπιστα να διαβάζουν αρχεία .mpp, αλλά οι εγγραφές συνήθως εξάγονται σε τυπικές μορφές όπως MSPDI (XML) ή MPX.

**Q2: Χρειάζομαι το Microsoft Project ή το Primavera P6 εγκατεστημένο στον διακομιστή μου για να αναλύσω αυτά τα αρχεία;

A2: Όχι, βιβλιοθήκες όπως MPXJ και xerparser είναι αυτόνομοι αναλυτές που επεξεργάζονται τα αρχεία απευθείας χωρίς να απαιτούν άδειες λογισμικού του κεντρικού συστήματος.

**Q3: Ποια είναι η καλύτερη εγγενής βιβλιοθήκη Python για την ανάλυση αρχείων Primavera P6 XER χωρίς εξαρτήσεις Java;

A3: Το xerparser είναι η κορυφαία επιλογή καθαρά Python για την ανάλυση αρχείων XER απευθείας σε εγγενείς λεξικά και pandas DataFrames.

**Q4: Μπορεί το MPXJ να μετατρέψει αρχεία Microsoft Project MPP σε μορφές Primavera P6;

A4: Ναι, το MPXJ μπορεί να διαβάσει ένα αρχείο .mpp και να εξάγει το κανονικοποιημένο χρονοδιάγραμμα σε μορφή PMXML συμβατή με Primavera.

**Q5: Γιατί τα αρχεία Primavera XER είναι πιο εύκολα στην ανάλυση σε σύγκριση με τα αρχεία Microsoft Project MPP;

A5: Τα αρχεία XER είναι αναγνώσιμα από άνθρωπο, διαχωρισμένα με καρτέλες, αποσπάσματα σχεσιακής βάσης δεδομένων, ενώ τα αρχεία MPP είναι ιδιόκτητα, δυαδικές σύνθετες δομές εγγράφων.

Πόροι μορφής αρχείων

Νέα Μορφών Αρχείων – Η μοναδική σας πηγή για όλα τα νέα σχετικά με μορφές αρχείων από όλο τον κόσμο Φόρουμ Μορφών Αρχείων – Δημοσιεύστε τις ερωτήσεις σας στα φόρουμ μορφών αρχείων για να λάβετε χρήσιμες πληροφορίες από ειδικούς μορφών αρχείων και χρήστες της κοινότητας Wiki Μορφών Αρχείων – Εξερευνήστε τις κατηγορίες μορφών αρχείων για πληροφορίες σχετικά με διάφορες μορφές αρχείων Ανοιχτού Κώδικα API και Βιβλιοθήκες για Διαχείριση Έργων