آخر تحديث: 02 سبتمبر، 2026

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

الواجهات الرائدة مفتوحة المصدر للعمل مع ملفات 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)، محملة بقيود تكامل مرجعي معقدة، وراثة متعددة التقويمات، ومنطق المسار الحرج.

توجد مجموعات تطوير برمجيات (SDKs) تجارية مثل Aspose.Tasks، لكن تكاليف الترخيص والاعتماد على البائع تجعل البدائل المفتوحة المصدر القوية ضرورية. في هذا الدليل، نقوم بتحليل أفضل واجهات برمجة التطبيقات (APIs) المفتوحة المصدر، المكتبات، والمحللات المتاحة عبر Java وPython وC# لمعالجة ملفات MPP وXER بشكل نظيف وفعّال.

مقارنة سريعة للأدوات مفتوحة المصدر

المكتبة / الأداةاللغة الأساسيةالصيغ المدعومةقراءة / كتابةأفضل حالة استخدام
MPXJجافا (بايثون / ربط .NET)MPP, MPT, MPX, XER, PMXML, MSPDIقراءة (MPP/XER)؛ كتابة (MPX/MSPDI/PMXML)جافا للمؤسسات، تحويل متعدد الصيغ، جداول شاملة
xerparserبايثونXERقراءة وتحليلعلوم البيانات، تحليل جدولة pandas، خطوط أنابيب ETL
python-mpxjPythonMPP, XER, XMLقراءة / تحويلغلاف بايثوني حول MPXJ باستخدام JPype
netezza-xer / xer-to-csvShell / Python / GoXERتدفق / تصديراستخراج الجداول الخام الشبيهة بـ SQL إلى قواعد بيانات علائقية
OpenProj / ProjectLibre CoreJavaMPP (الإصدارات القديمة), XMLقراءة / عرضتكامل سطح المكتب/المحرك لعرض مخططات جانت الأساسية

1. MPXJ (Microsoft Project eXchange في جافا)

المعيار الصناعي غير المتنازع عليه لتبادل الجداول الزمنية

إذا كان هناك معيار ذهبي في مكتبات جدولة المصادر المفتوحة، فهو MPXJ. تم صيانته بنشاط لأكثر من عقدين من قبل جون إيلز، تم بناء MPXJ أصلاً لمعالجة ملفات Microsoft Project MPX، لكنه توسع ليصبح محرك ترجمة عالمي لتنسيقات جدولة المشاريع.

القدرات الرئيسية

  • استخراج MPP مباشر: يحلل ملفات MPP الثنائية المملوكة عبر تقريباً جميع إصدارات MS Project (من Project 98 حتى الإصدارات الحديثة Project 2016/2019/2021/365) دون الحاجة إلى نسخة مثبتة من Microsoft Project.
  • تحليل Primavera P6 XER & PMXML: دعم أصلي لكل من التفريغات النصية .xer وملفات Primavera XML الحديثة.
  • نموذج بيانات موحد: يكشف عن نموذج كائن موحد (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). بغض النظر عما إذا كان الإدخال الخاص بك MPP أو XER، يتفاعل كود تطبيقك مع نفس واجهة برمجة التطبيقات بالضبط.
  • توزيع متعدد اللغات: بالرغم من كتابته بلغة Java، يوزع MPXJ حزم NuGet المترجمة أصلاً لـ .NET (C#) عبر IKVM/CoreCLR، بالإضافة إلى حزمة Python (mpxj على PyPI).

مثال سريع على الكود: جافا

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 (بايثون)

تحليل بايثون خفيف الوزن وأصلي لـ Primavera XER

بينما يمكن استدعاء MPXJ عبر ربطات بايثون، يتطلب ذلك تشغيل خلفية JVM (عبر JPype). عندما تحتاج إلى محلل بايثون أصلي بحت يعمل دون تبعيات جافا، فإن xerparser هو الحل المفضل.

ملف XER هو في الأساس لقطة قاعدة بيانات تم تفريغها إلى نص مسطح. xerparser يفك تشفير هذه الجداول إلى كائنات بايثون منظمة ويتكامل بسلاسة مع pandas.

القدرات الرئيسية

  • بدون تبعيات جافا: مكتبة بايثون 3 خالصة يمكن تثبيتها عبر pip install xerparser.
  • تكامل علائقي: يربط جداول Primavera الأساسية مثل TASK (الأنشطة)، PROJECT (بيانات المشروع)، PROJWBS (هياكل WBS)، TASKRSRC (التعيينات)، و TASKPRED (روابط المنطق).
  • تنفيذ سريع: مثالي للخدمات المصغرة داخل الحاويات، وظائف AWS Lambda، وأنابيب تنظيم البيانات الحديثة (مثل Apache Airflow، Prefect).

مثال سريع على الشيفرة: بايثون

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

  • هندسة البيانات، تحليلات مطالبات التأخير، وفحوصات صحة الجدول (نصوص تقييم DCMA المكوّنة من 14 نقطة).
  • أعباء عمل بدون خادم حيث يكون تجميع بيئة تشغيل Java بحجم 50 ميغابايت أو أكثر غير عملي.

3. python-mpxj

جسر بايثون مع القوة الكاملة لـ MPXJ

إذا كنت تعمل بلغة Python ولكن يجب معالجة ملفات .mpp الثنائية، فإن xerparser لا يمكنه مساعدتك لأنه يستهدف فقط .xer. الجسر المفتوح المصدر الأكثر موثوقية هو python-mpxj.

القدرات الرئيسية

  • يقوم تلقائيًا بإنشاء JVM مدمج بدون واجهة رسومية باستخدام jpype1.
  • يكشف عن واجهة برمجة التطبيقات 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. أدوات التحليل المخصصة & سكريبتات إدخال قاعدة البيانات

معالجة XER الخام من Primavera عبر معالجة التدفق

نظرًا لأن 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 الثنائية دون دفع ثمن برامج تجارية مملوكة.
  • تحتاج إلى ذكاء عميق للجدولة: تقاويم العمل، حسابات مدة التأخير، حساب المسار الحرج، وتباين الخط الأساسي.
  • تقنية البرمجة الخاصة بك هي Java, Kotlin, C# (.NET), أو بايثون للمؤسسات.

اختر xerparser إذا:

  • أنت تتعامل حصريًا مع ملفات Primavera P6 .xer.
  • خط أنابيبك مكتوب بـ Python الأصلي ويتغذى مباشرةً إلى pandas, NumPy أو أدوات التصوير مثل Dash / Streamlit.
  • أنت تقوم بالنشر إلى بيئات الحاويات الخفيفة أو عدّاءات السحابة بدون خادم.

اختر الإدخال المباشر لقاعدة البيانات / تدفق CSV إذا:

  • أنت بحاجة إلى إعداد قاعدة بيانات عالية السرعة لتصديرات XER المؤسسية الضخمة متعددة المشاريع.
  • أنت تحتاج فقط إلى استخراج البيانات الوصفية وحسابات التكلفة ومنحنيات التقدم عبر تحليلات SQL.

ملخص وأفضل الممارسات

عند بناء خطوط أنابيب مفتوحة المصدر لبيانات الجدول الزمني:

  1. لا تقم بتحليل .mpp يدويًا: مواصفة مايكروسوفت الثنائية معقدة وغير موثقة. دائمًا اعتمد على مكتبات مختبرة في الميدان مثل MPXJ.
  2. احذر من المناطق الزمنية للتاريخ: غالبًا ما تسجل جداول Primavera مدد العمل دون بيانات تعريف المنطقة الزمنية، معتمدة على تقاويم المشروع. تأكد من أن خط أنابيب الاستيعاب الخاص بك يأخذ في الاعتبار تحولات يوم العمل الذي يستغرق 8 ساعات مقابل أيام التقويم التي تستغرق 24 ساعة.
  3. تحقق من سلامة الإشارة المرجعية: في ملفات XER، غالبًا ما تحدث سجلات يتيمة (مثل المهام التي تشير إلى عقد WBS محذوفة) في تصديرات المشاريع التي تم إنشاؤها يدويًا. دائمًا تحقق من صحة المفاتيح الأجنبية بشكل دفاعي أثناء عملية ETL.

الأسئلة الشائعة

**Q1: 1. هل يمكن للمكتبات مفتوحة المصدر كتابة أو تحديث ملفات .mpp الثنائية الأصلية مباشرةً؟

A1: لا، بسبب تنسيق مايكروسوفت الثنائي المملوك، يمكن للمكتبات مفتوحة المصدر قراءة ملفات .mpp بشكل موثوق، لكن عمليات الكتابة عادةً ما تُصدَّر إلى تنسيقات قياسية مثل MSPDI (XML) أو MPX.

**Q2: هل أحتاج إلى تثبيت Microsoft Project أو Primavera P6 على الخادم الخاص بي لتحليل هذه الملفات؟

A2: لا، المكتبات مثل MPXJ و xerparser هي محللات مستقلة تعالج الملفات مباشرةً دون الحاجة إلى تراخيص برامج المضيف.

**Q3: ما هي أفضل مكتبة بايثون أصلية لتحليل ملفات Primavera P6 XER دون الاعتماد على جافا؟

A3: xerparser هي الخيار الأول النقي بايثون لتحليل تفريغ XER مباشرةً إلى القواميس الأصلية وإطارات بيانات pandas.

**Q4: هل يمكن لـ MPXJ تحويل ملفات Microsoft Project MPP إلى تنسيقات Primavera P6؟

A4: نعم، يمكن لـ MPXJ قراءة ملف .mpp وتصدير الجدول الزمني المُعَدل إلى تنسيق PMXML المتوافق مع Primavera.

**Q5: لماذا تكون ملفات Primavera XER أسهل في التحليل مقارنة بملفات Microsoft Project MPP؟

A5: ملفات XER قابلة للقراءة من قبل الإنسان، وتُعد تفريغات قاعدة بيانات علائقية مفصولة بعلامات جدولة، بينما ملفات MPP هي هياكل مستندات مركبة ثنائية مملوكة.

موارد تنسيقات الملفات

أخبار تنسيقات الملفات – وجهتك الوحيدة لجميع الأخبار المتعلقة بتنسيقات الملفات من جميع أنحاء العالم منتديات تنسيقات الملفات – انشر استفساراتك في منتديات تنسيقات الملفات للحصول على معلومات مفيدة من خبراء تنسيقات الملفات ومستخدمي المجتمع ويكي تنسيقات الملفات – استكشف فئات تنسيقات الملفات للحصول على معلومات حول مختلف تنسيقات الملفات واجهات برمجة التطبيقات والمكتبات مفتوحة المصدر لإدارة المشاريع