Kemas Kini Terakhir: 02 Sep, 2026

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

API Sumber Terbuka Terunggul untuk Bekerja dengan MS Project (MPP) & Primavera (XER) Fail

Dalam pengurusan projek perusahaan, dua format fail proprietari memegang kuasa tertinggi: Microsoft Project (.mpp) dan Oracle Primavera P6 (.xer). Sama ada anda sedang membina papan pemuka analitik dalaman, menyelaraskan jadual pembinaan dengan sistem ERP, atau mengautomasi saluran status projek, membaca dan memanipulasi fail penjadualan ini secara programatik adalah keperluan kritikal.

Walau bagaimanapun, kedua-dua format menimbulkan halangan kejuruteraan yang terkenal.

  • MPP files adalah format binari, OLE Structured Storage yang tidak didokumentasikan atau format dokumen kompaun proprietari dengan perubahan skema merentasi hampir setiap versi utama MS Project (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER files adalah eksport teks berjarak tab yang disusun sebagai jadual pangkalan data relasional (%T tables with %F fields and %R records), dipenuhi dengan sekatan integriti rujukan yang kompleks, warisan kalendar berbilang, dan logik laluan kritikal.

SDK komersial seperti Aspose.Tasks wujud, tetapi kos lesen dan penguncian vendor menjadikan alternatif sumber terbuka yang kukuh penting. Dalam panduan ini, kami mengupas API, perpustakaan, dan parser sumber terbuka teratas yang tersedia untuk Java, Python, dan C# untuk mengendalikan fail MPP dan XER dengan bersih dan berkesan.

Perbandingan Cepat Alat Sumber Terbuka

Perpustakaan / AlatBahasa UtamaFormat DisokongBaca / TulisKes Penggunaan Terbaik
MPXJJava (Python / .NET ikatan)MPP, MPT, MPX, XER, PMXML, MSPDIBaca (MPP/XER); Tulis (MPX/MSPDI/PMXML)Enterprise Java, penukaran berbilang format, jadual semua-dalam-satu
xerparserPythonXERBaca & HuraikanSains data, analisis penjadualan pandas, paip ETL
python-mpxjPythonMPP, XER, XMLBaca / TukarPembalut Pythonic di sekitar MPXJ menggunakan JPype
netezza-xer / xer-ke-csvShell / Python / GoXERAliran / EksportMengekstrak jadual mentah berjenis SQL ke pangkalan data relasional
OpenProj / ProjectLibre CoreJavaMPP (versi lama), XMLBaca / RenderIntegrasi Desktop/Enjin untuk paparan Gantt asas

1. MPXJ (Microsoft Project eXchange dalam Java)

Standard Industri Tanpa Tandingan untuk Interoperabiliti Jadual

Jika terdapat standard emas dalam perpustakaan penjadualan sumber terbuka, ia ialah MPXJ. Diselenggara secara aktif selama lebih dua dekad oleh Jon Iles, MPXJ pada asalnya dibina untuk memproses fail MPX Microsoft Project, tetapi telah berkembang menjadi enjin terjemahan universal untuk format penjadualan projek.

Keupayaan Utama

  • Pengekstrakan MPP Langsung: Mengurai fail binari proprietari MPP merentasi hampir semua versi MS Project (Project 98 hingga Project moden 2016/2019/2021/365) tanpa memerlukan salinan Microsoft Project yang dipasang.
  • Penguraian Primavera P6 XER & PMXML: Sokongan asli untuk kedua-dua dump berasaskan teks .xer dan fail XML Primavera moden.
  • Model Data Dinormalisasi: Menyediakan model objek bersatu (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Tanpa mengira sama ada input anda adalah MPP atau XER, kod aplikasi anda berinteraksi dengan API yang sama tepat.
  • Pengedaran Berbilang Bahasa: Walaupun ditulis dalam Java, MPXJ mengedarkan pakej NuGet yang dikompilasi secara asli untuk .NET (C#) melalui IKVM/CoreCLR, serta pakej Python (mpxj di PyPI).

Contoh Kod Ringkas: 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());
            }
        }
    }
}

Di Mana MPXJ Cemerlang

  • Normalisasi rentas format yang sebenar (menukar MPP kepada PMXML atau MSPDI yang serasi dengan XER).
  • Logik kalendar yang kompleks (syif, pengecualian, jam kerja pelbagai kalendar).
  • Kestabilan tahap produksi dengan komuniti yang aktif.

2. xerparser (Python)

Penguraian Python Asli yang Ringan untuk Primavera XER

Walaupun MPXJ boleh dipanggil melalui ikatan Python, melakukannya memerlukan menjalankan backend JVM (melalui JPype). Apabila anda memerlukan pengurai Python asli yang beroperasi tanpa kebergantungan Java, xerparser adalah penyelesaian utama.

Fail XER pada dasarnya merupakan snapshot pangkalan data yang dikeluarkan ke dalam teks rata. xerparser menyahkod jadual-jadual ini menjadi objek Python berstruktur dan berintegrasi dengan lancar dengan pandas.

Keupayaan Utama

  • Tiada Kebergantungan Java: Perpustakaan Python 3 tulen yang boleh dipasang melalui pip install xerparser.
  • Integriti Relasional: Memetakan jadual teras Primavera seperti TASK (Aktiviti), PROJECT (metadata Projek), PROJWBS (hierarki WBS), TASKRSRC (Penugasan), dan TASKPRED (hubungan Logik).
  • Pelaksanaan Pantas: Ideal untuk mikroservis berkontena, fungsi AWS Lambda, dan paip orkestrasi data moden (contoh: Apache Airflow, Prefect).

Contoh Kod Pantas: 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())

Di mana xerparser Cemerlang

  • Kejuruteraan data, analitik tuntutan kelewatan, dan pemeriksaan kesihatan jadual (skrip penilaian 14-titik DCMA).
  • Beban kerja tanpa pelayan di mana menggabungkan runtime Java 50MB+ tidak praktikal.

3. python-mpxj

Menyambungkan Python dengan Kuasa Penuh MPXJ

Jika anda bekerja dalam Python tetapi mesti memproses fail binari .mpp, xerparser tidak dapat membantu anda kerana ia hanya menyasarkan .xer. Jambatan sumber terbuka yang paling boleh dipercayai ialah python-mpxj.

Keupayaan Utama

  • Secara automatik memulakan JVM terbenam tanpa kepala menggunakan jpype1.
  • Mendedahkan API MPXJ penuh secara langsung kepada pembangun Python.
  • Membenarkan penukaran langsung dari .mpp proprietari ke format terbuka moden seperti .json atau .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. Utiliti Penguraian Tersuai & Skrip Pengambilan Pangkalan Data

Mengendalikan XER Primavera Mentah melalui Pemprosesan Aliran

Kerana Primavera XER mengikuti format jadual yang dapat diramalkan, banyak pasukan kejuruteraan sumber terbuka menggunakan penyahkod aliran tabular khusus (ditulis dalam Go, Python, atau Rust) dan bukannya perpustakaan jadual gaya DOM peringkat tinggi.

Struktur fail XER diformat sebagai:

%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

Beberapa skrip sumber terbuka di GitHub (seperti xer2sqlite dan xer-to-csv) menafsir struktur ini secara langsung ke dalam SQLite atau PostgreSQL. Pendekatan ini optimal jika:

  1. Anda hanya perlu menanyakan hubungan tabular dengan SQL.
  2. Jadual-jadual berukuran ratusan megabait dengan puluhan ribu tugas, di mana pemuat pokok berorientasikan objek akan menyebabkan ralat kehabisan memori.

Perbandingan Teknikal: Yang Mana Perlu Anda Pilih?

Pilih MPXJ Jika:

  • Anda mesti membaca fail binari Microsoft Project .mpp tanpa membayar perisian komersial proprietari.
  • Anda memerlukan kepintaran jadual yang mendalam: kalendar kerja, pengiraan jangka masa lag, pengiraan laluan kritikal, dan variasi garis dasar.
  • Tumpukan teknologi anda ialah Java, Kotlin, C# (.NET), atau Python perusahaan.

Pilih xerparser Jika:

  • Anda secara eksklusif mengendalikan fail Primavera P6 .xer.
  • Saluran anda ditulis dalam Python asli dan memberi input secara langsung ke pandas, NumPy, atau visualiser seperti Dash / Streamlit.
  • Anda sedang menyebarkan ke persekitaran kontena yang ringan atau pelari awan tanpa pelayan.

Pilih Penyerapan Aliran DB / CSV Langsung Jika:

  • Anda memerlukan peringkat pangkalan data berkelajuan tinggi untuk eksport XER perusahaan berbilang projek yang besar.
  • Anda hanya perlu mengekstrak metadata, akaun kos, dan lengkung kemajuan melalui analitik SQL.

Ringkasan & Amalan Terbaik

Apabila membina paip sumber terbuka untuk data jadual:

  1. Jangan pernah mengurai .mpp secara manual: Spesifikasi binari Microsoft adalah rumit dan tidak didokumentasikan. Sentiasa bergantung pada perpustakaan yang telah diuji seperti MPXJ.
  2. Berhati-hati dengan Zon Waktu Tarikh: Jadual Primavera sering merekod tempoh kerja tanpa metadata zon waktu, bergantung pada kalendar projek. Pastikan paip pengambilan anda mengambil kira pertukaran hari kerja 8 jam berbanding hari kalendar 24 jam.
  3. Sahkan Integriti Rujukan: Dalam fail XER, rekod yatim (contoh, tugas yang menunjuk kepada nod WBS yang dipadam) kerap berlaku dalam eksport projek yang dibuat secara manual. Sentiasa sahkan kunci asing secara defensif semasa ETL.

Soalan Lazim

**Q1: 1. Bolehkah perpustakaan sumber terbuka menulis atau mengemas kini fail binari .mpp secara langsung?

A1: Tidak, disebabkan format binari proprietari Microsoft, perpustakaan sumber terbuka dapat membaca fail .mpp dengan boleh dipercayai, tetapi penulisan biasanya dieksport ke format standard seperti MSPDI (XML) atau MPX.

**Q2: Adakah saya perlu memasang Microsoft Project atau Primavera P6 pada pelayan saya untuk mengurai fail-fail ini?

A2: Tidak, perpustakaan seperti MPXJ dan xerparser adalah pengurai berdiri sendiri yang memproses fail secara langsung tanpa memerlukan lesen perisian hos.

**Q3: Apakah perpustakaan Python asli terbaik untuk mengurai fail XER Primavera P6 tanpa kebergantungan Java?

A3: xerparser adalah pilihan utama berasaskan Python tulen untuk mengurai dump XER secara langsung ke dalam kamus asli dan DataFrames pandas.

**Q4: Bolehkah MPXJ menukar fail MPP Microsoft Project ke dalam format Primavera P6?

A4: Ya, MPXJ boleh membaca fail .mpp dan mengeksport jadual yang dinormalisasi ke dalam format PMXML yang serasi dengan Primavera.

**Q5: Mengapa fail XER Primavera lebih mudah untuk diurai berbanding fail MPP Microsoft Project?

A5: Fail XER adalah boleh dibaca manusia, dump pangkalan data berhubungan yang dipisahkan dengan tab, manakala fail MPP adalah proprietari, struktur dokumen kompaun binari.

Sumber Format Fail

Berita Format Fail – Satu hentian untuk semua berita berkaitan format fail dari seluruh dunia Forum Format Fail – Hantar pertanyaan anda dalam forum format fail untuk mendapatkan maklumat berguna daripada pakar format fail dan pengguna komuniti Wiki Format Fail – Terokai kategori format fail untuk maklumat tentang pelbagai format fail API dan Perpustakaan Sumber Terbuka untuk Pengurusan Projek