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

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 เป็นไฟล์ส่งออกข้อความที่คั่นด้วยแท็บซึ่งจัดโครงสร้างเป็นตารางฐานข้อมูลเชิงสัมพันธ์ (
%Ttables with%Ffields and%Rrecords) โดยบรรจุข้อจำกัดความสมบูรณ์ของการอ้างอิงที่ซับซ้อน, การสืบทอดหลายปฏิทิน, และตรรกะเส้นทางวิกฤติ.
มี SDK เชิงพาณิชย์เช่น Aspose.Tasks อยู่, แต่ค่าใช้จ่ายการให้สิทธิ์และการผูกมัดของผู้ขายทำให้ต้องมีทางเลือกโอเพนซอร์สที่แข็งแกร่งเป็นสิ่งจำเป็น ในคู่มือนี้ เราจะวิเคราะห์ API, ไลบรารี, และพาร์เซอร์โอเพนซอร์สชั้นนำที่มีให้สำหรับ Java, Python, และ C# เพื่อจัดการไฟล์ MPP และ XER อย่างสะอาดและมีประสิทธิภาพ.
การเปรียบเทียบอย่างรวดเร็วของเครื่องมือโอเพ่นซอร์ส
| ไลบรารี / เครื่องมือ | ภาษาหลัก | รูปแบบที่รองรับ | อ่าน / เขียน | กรณีการใช้งานที่ดีที่สุด |
|---|---|---|---|---|
| MPXJ | Java (Python / การเชื่อมต่อ .NET) | MPP, MPT, MPX, XER, PMXML, MSPDI | อ่าน (MPP/XER); เขียน (MPX/MSPDI/PMXML) | Enterprise Java, การแปลงหลายรูปแบบ, ตารางเวลาแบบอัลล‑อิน‑วัน |
| xerparser | Python | XER | อ่านและแปลง | วิทยาศาสตร์ข้อมูล, การวิเคราะห์การกำหนดตาราง pandas, ETL pipelines |
| python-mpxj | Python | MPP, XER, XML | อ่าน / แปลง | ห่อหุ้มแบบ Pythonic รอบ MPXJ โดยใช้ JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | สตรีม / ส่งออก | การสกัดตารางดิบแบบ SQL ไปยังฐานข้อมูลเชิงสัมพันธ์ |
| OpenProj / ProjectLibre Core | Java | MPP (รุ่นเก่า), 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 วิธีนี้เหมาะอย่างยิ่งหาก:
- คุณต้องการเพียงแค่สอบถามความสัมพันธ์ในรูปแบบตารางด้วย SQL.
- ตารางเวลามีขนาดหลายร้อยเมกะไบต์และมีงานหลายหมื่นรายการ ซึ่งตัวโหลดต้นไม้แบบออบเจ็กต์‑โอเรียนเทดจะทำให้เกิดข้อผิดพลาดหน่วยความจำไม่พอ.
การเปรียบเทียบเชิงเทคนิค: ควรเลือกอันไหน?
เลือก 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.
สรุป & แนวทางปฏิบัติที่ดีที่สุด
เมื่อสร้างไพป์ไลน์โอเพ่นซอร์สสำหรับข้อมูลตารางเวลา:
- ห้ามพาร์ส
.mppด้วยตนเอง: สเปคไบนารีของ Microsoft มีความซับซ้อนและไม่มีเอกสารอธิบาย. ควรพึ่งพาไลบรารีที่ผ่านการทดสอบอย่างเข้มข้นเช่น MPXJ. - ระวังโซนเวลา: ตารางเวลา Primavera มักบันทึกระยะเวลาการทำงานโดยไม่มีเมตาดาต้าโซนเวลา, พึ่งพาปฏิทินโครงการ. ตรวจสอบให้แน่ใจว่าไพป์ไลน์การรับข้อมูลของคุณคำนึงถึงการเปลี่ยนแปลงของวันทำงาน 8 ชั่วโมงเทียบกับวันปฏิทิน 24 ชั่วโมง.
- ตรวจสอบความสมบูรณ์ของการอ้างอิง: ในไฟล์ 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 และไลบรารีโอเพ่นซอร์ส สำหรับการจัดการโครงการ