อัปเดตล่าสุด: 02 Sept, 2026

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

API โอเพ่นซอร์สชั้นนำสำหรับทำงานกับไฟล์ MS Project (MPP) & Primavera (XER)

ในการจัดการโครงการระดับองค์กร มีรูปแบบไฟล์เฉพาะสองแบบครองตำแหน่งสูงสุด: Microsoft Project (.mpp) และ Oracle Primavera P6 (.xer). ไม่ว่าคุณจะกำลังสร้างแดชบอร์ดวิเคราะห์ภายใน, ซิงค์ตารางการก่อสร้างกับระบบ ERP, หรืออัตโนมัติขั้นตอนการอัปเดตสถานะโครงการ, การอ่านและจัดการไฟล์กำหนดเวลานี้ด้วยโปรแกรมเป็นความต้องการที่สำคัญ.

อย่างไรก็ตาม ทั้งสองรูปแบบต่างก็มีกีดขวางด้านวิศวกรรมที่เป็นที่รู้จักกันดี:

  • MPP files เป็นไฟล์ไบนารีที่ไม่มีเอกสารอธิบาย OLE Structured Storage หรือรูปแบบเอกสารเชิงซ้อนที่เป็นกรรมสิทธิ์ โดยมีการเปลี่ยนแปลงสคีมาผ่านการปล่อยเวอร์ชันหลักของ MS Project เกือบทุกเวอร์ชัน (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER files เป็นไฟล์ส่งออกข้อความที่คั่นด้วยแท็บซึ่งจัดโครงสร้างเป็นตารางฐานข้อมูลเชิงสัมพันธ์ (%T tables with %F fields and %R records) โดยบรรจุข้อจำกัดความสมบูรณ์ของการอ้างอิงที่ซับซ้อน, การสืบทอดหลายปฏิทิน, และตรรกะเส้นทางวิกฤติ.

มี SDK เชิงพาณิชย์เช่น Aspose.Tasks อยู่, แต่ค่าใช้จ่ายการให้สิทธิ์และการผูกมัดของผู้ขายทำให้ต้องมีทางเลือกโอเพนซอร์สที่แข็งแกร่งเป็นสิ่งจำเป็น ในคู่มือนี้ เราจะวิเคราะห์ API, ไลบรารี, และพาร์เซอร์โอเพนซอร์สชั้นนำที่มีให้สำหรับ Java, Python, และ C# เพื่อจัดการไฟล์ MPP และ XER อย่างสะอาดและมีประสิทธิภาพ.

การเปรียบเทียบอย่างรวดเร็วของเครื่องมือโอเพ่นซอร์ส

ไลบรารี / เครื่องมือภาษาหลักรูปแบบที่รองรับอ่าน / เขียนกรณีการใช้งานที่ดีที่สุด
MPXJJava (Python / การเชื่อมต่อ .NET)MPP, MPT, MPX, XER, PMXML, MSPDIอ่าน (MPP/XER); เขียน (MPX/MSPDI/PMXML)Enterprise Java, การแปลงหลายรูปแบบ, ตารางเวลาแบบอัลล‑อิน‑วัน
xerparserPythonXERอ่านและแปลงวิทยาศาสตร์ข้อมูล, การวิเคราะห์การกำหนดตาราง pandas, ETL pipelines
python-mpxjPythonMPP, XER, XMLอ่าน / แปลงห่อหุ้มแบบ Pythonic รอบ 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 ถูกสร้างขึ้นเดิมเพื่อประมวลผลไฟล์ Microsoft Project MPX, แต่ได้ขยายเป็นเครื่องแปลสากลสำหรับรูปแบบการจัดตารางโครงการ.

ความสามารถหลัก

  • Direct MPP Extraction: วิเคราะห์ไฟล์ MPP แบบไบนารีที่เป็นกรรมสิทธิ์ผ่านเกือบทุกเวอร์ชันของ MS Project (Project 98 ถึง Project สมัยใหม่ 2016/2019/2021/365) โดยไม่ต้องการสำเนาที่ติดตั้งของ Microsoft Project.
  • Primavera P6 XER & PMXML Parsing: รองรับโดยเนทีฟทั้งการดัมพ์แบบข้อความ .xer และไฟล์ XML ของ Primavera สมัยใหม่.
  • Normalized Data Model: เปิดเผยโมเดลอ็อบเจ็กต์แบบรวม (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). ไม่ว่าข้อมูลเข้าเป็น MPP หรือ XER แอปพลิเคชันของคุณก็จะโต้ตอบกับ API เดียวกันอย่างแม่นยำ.
  • Multi-Language Distribution: แม้เขียนด้วย 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 เป็น PMXML หรือ MSPDI ที่เข้ากันได้กับ XER).
  • ตรรกะปฏิทินที่ซับซ้อน (กะงาน, ข้อยกเว้น, ชั่วโมงทำงานหลายปฏิทิน).
  • ความเสถียรระดับการผลิตพร้อมชุมชนที่กระตือรือร้น.

2. xerparser (Python)

การแยกวิเคราะห์ Python แบบเบาและเนทีฟสำหรับ Primavera XER

แม้ว่า MPXJ จะสามารถเรียกใช้ผ่านการผูกกับ Python ได้ แต่การทำเช่นนั้นต้องรันแบ็กเอนด์ JVM (ผ่าน JPype) เมื่อคุณต้องการตัวแยกวิเคราะห์ Python แท้ที่ทำงานโดยไม่มีการพึ่งพา Java, xerparser คือโซลูชันที่ควรเลือก.

ไฟล์ XER โดยพื้นฐานคือสแนปช็อตของฐานข้อมูลที่ถูกดึงออกเป็นข้อความธรรมดา xerparser ถอดรหัสตารางเหล่านี้เป็นอ็อบเจ็กต์ Python ที่มีโครงสร้างและรวมเข้ากับ pandas อย่างไร้รอยต่อ.

ความสามารถหลัก

  • ไม่มีการพึ่งพา Java: ไลบรารี Python 3 แท้ที่สามารถติดตั้งได้ผ่าน pip install xerparser.
  • ความสมบูรณ์ของความสัมพันธ์: แผนที่ตารางหลักของ Primavera เช่น TASK (กิจกรรม), PROJECT (เมตาดาต้าโครงการ), PROJWBS (โครงสร้าง WBS), TASKRSRC (การมอบหมาย), และ TASKPRED (การเชื่อมโยงตรรกะ).
  • การดำเนินการที่เร็ว: เหมาะสำหรับไมโครเซอร์วิสที่ทำงานในคอนเทนเนอร์, ฟังก์ชัน AWS Lambda, และพายไลน์การจัดระเบียบข้อมูลสมัยใหม่ (เช่น 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 ขนาด 50MB+ เป็นเรื่องที่ไม่เป็นไปได้.

3. python-mpxj

เชื่อม Python กับพลังเต็มของ MPXJ

หากคุณทำงานด้วย Python แต่ ต้อง ประมวลผลไฟล์ไบนารี .mpp , xerparser ไม่สามารถช่วยคุณได้เพราะมันมุ่งเป้าเฉพาะที่ .xer เท่านั้น. สะพานโอเพนซอร์สที่เชื่อถือได้ที่สุดคือ python-mpxj.

ความสามารถหลัก

  • โดยอัตโนมัติสร้าง 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. ตารางเวลามีขนาดหลายร้อยเมกะไบต์และมีงานหลายหมื่นรายการ ซึ่งตัวโหลดต้นไม้แบบออบเจ็กต์‑โอเรียนเทดจะทำให้เกิดข้อผิดพลาดหน่วยความจำไม่พอ.

การเปรียบเทียบเชิงเทคนิค: ควรเลือกอันไหน?

เลือก MPXJ หาก:

  • คุณต้องอ่านไฟล์ไบนารี Microsoft Project .mpp โดยไม่ต้องจ่ายค่าโปรแกรมเชิงพาณิชย์ที่เป็นกรรมสิทธิ์.
  • คุณต้องการข้อมูลเชิงลึกของตารางเวลา: ปฏิทินทำงาน, การคำนวณระยะเวลาล่าช้า, การคำนวณเส้นทางวิกฤติ, และความแปรผันของ baseline.
  • สแต็กเทคโนโลยีของคุณคือ Java, Kotlin, C# (.NET) หรือ Python ระดับองค์กร.

เลือก xerparser หาก:

  • คุณจัดการไฟล์ Primavera P6 .xer อย่างเดียว.
  • pipeline ของคุณเขียนด้วย native Python และส่งต่อโดยตรงไปยัง pandas, NumPy หรือเครื่องมือแสดงผลเช่น Dash / Streamlit.
  • คุณกำลังทำการปรับใช้ไปยังสภาพแวดล้อมคอนเทนเนอร์แบบเบา หรือตัวรันเนอร์คลาวด์แบบไม่มีเซิร์ฟเวอร์.

เลือก Direct DB / CSV Stream Ingestion หาก:

  • คุณต้องการการสเตจฐานข้อมูลที่มีอัตราผ่านสูงสำหรับการส่งออก XER ระดับองค์กรหลายโครงการขนาดใหญ่.
  • คุณเพียงต้องการสกัดเมตาดาต้า, บัญชีต้นทุน, และกราฟความคืบหน้าผ่านการวิเคราะห์ SQL.

สรุป & แนวทางปฏิบัติที่ดีที่สุด

เมื่อสร้างไพป์ไลน์โอเพ่นซอร์สสำหรับข้อมูลตารางเวลา:

  1. ห้ามพาร์ส .mpp ด้วยตนเอง: สเปคไบนารีของ Microsoft มีความซับซ้อนและไม่มีเอกสารอธิบาย. ควรพึ่งพาไลบรารีที่ผ่านการทดสอบอย่างเข้มข้นเช่น MPXJ.
  2. ระวังโซนเวลา: ตารางเวลา Primavera มักบันทึกระยะเวลาการทำงานโดยไม่มีเมตาดาต้าโซนเวลา, พึ่งพาปฏิทินโครงการ. ตรวจสอบให้แน่ใจว่าไพป์ไลน์การรับข้อมูลของคุณคำนึงถึงการเปลี่ยนแปลงของวันทำงาน 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 เป็นตัวเลือกแรกของ pure-Python สำหรับการแยกข้อมูล XER dump โดยตรงเป็นดิกชันนารีพื้นเมืองและ pandas DataFrames.

**Q4: MPXJ สามารถแปลงไฟล์ Microsoft Project MPP ไปเป็นรูปแบบของ Primavera P6 ได้หรือไม่?

A4: ใช่, MPXJ สามารถอ่านไฟล์ .mpp และส่งออกกำหนดการที่ทำให้เป็นมาตรฐานเป็นรูปแบบ PMXML ที่เข้ากันได้กับ Primavera.

**Q5: ทำไมไฟล์ Primavera XER จึงง่ายต่อการแยกมากกว่าไฟล์ Microsoft Project MPP?

A5: ไฟล์ XER เป็นไฟล์ที่มนุษย์อ่านได้, เป็นการดัมพ์ฐานข้อมูลเชิงสัมพันธ์ที่คั่นด้วยแท็บ, ในขณะที่ไฟล์ MPP เป็นโครงสร้างเอกสารผสมแบบไบนารีที่เป็นกรรมสิทธิ์.

แหล่งข้อมูลรูปแบบไฟล์

ข่าวรูปแบบไฟล์ – จุดหมายเดียวสำหรับข่าวทั้งหมดที่เกี่ยวกับรูปแบบไฟล์จากทั่วโลก ฟอรั่มรูปแบบไฟล์ – โพสต์คำถามของคุณในฟอรั่มรูปแบบไฟล์เพื่อรับข้อมูลที่เป็นประโยชน์จากผู้เชี่ยวชาญและผู้ใช้ในชุมชน วิกิรูปแบบไฟล์ –สำรวจหมวดหมู่รูปแบบไฟล์เพื่อข้อมูลเกี่ยวกับรูปแบบไฟล์ต่าง ๆ API และไลบรารีโอเพ่นซอร์ส สำหรับการจัดการโครงการ