آخرین به‌روزرسانی: 02 سپتامبر 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 باینری، ذخیره‌سازی ساختاری OLE بدون مستندات یا قالب‌های سند ترکیبی مالکیتی هستند که با تغییرات طرح‌واره در تقریباً هر نسخه اصلی MS Project (2000، 2003، 2007، 2010، 2013، 2016، 2019، 2021) همراه‌اند.
  • فایل‌های Primavera XER خروجی‌های متنی با جداسازی با تب هستند که به صورت جداول پایگاه‌داده رابطه‌ای ساختار یافته‌اند (%T جداول با فیلدهای %F و رکوردهای %R)، پر از محدودیت‌های پیچیده یکپارچگی ارجاعی، ارث‌بری چندتقویمی، و منطق مسیر بحرانی.

SDKهای تجاری مانند Aspose.Tasks وجود دارند، اما هزینه‌های مجوز و قفل‌گذاری فروشنده، جایگزین‌های منبع باز قوی را ضروری می‌سازند. در این راهنما، ما برترین APIها، کتابخانه‌ها و تجزیه‌کننده‌های منبع باز موجود برای Java، Python و C# را برای پردازش تمیز و کارآمد فایل‌های MPP و XER بررسی می‌کنیم.

مقایسه سریع ابزارهای منبع باز

کتابخانه / ابزارزبان اصلیقالب‌های پشتیبانی‌شدهخواندن / نوشتنبهترین مورد استفاده
MPXJجاوا (پایتون / .NET bindings)MPP, MPT, MPX, XER, PMXML, MSPDIخواندن (MPP/XER)؛ نوشتن (MPX/MSPDI/PMXML)جاوا سازمانی، تبدیل چند فرمت، برنامه‌ریزی همه‌جانبه
xerparserPythonXERخواندن و تجزیهعلم داده، تجزیه و تحلیل زمان‌بندی pandas، خطوط لوله ETL
python-mpxjپایتونMPP, XER, XMLخواندن / تبدیلwrapper پایتونی برای MPXJ با استفاده از JPype
netezza-xer / xer-to-csvShell / Python / GoXERجریان / استخراجاستخراج جداول خام شبیه SQL به پایگاه‌های داده رابطه‌ای
OpenProj / ProjectLibre CoreJavaMPP (نسخه‌های قدیمی)، XMLخواندن / رندریکپارچه‌سازی دسکتاپ/موتور برای نماهای گانت پایه

1. MPXJ (Microsoft Project eXchange در جاوا)

استاندارد بی‌چون و چرای صنعت برای قابلیت تبادل برنامه‌ریزی

اگر در کتابخانه‌های زمان‌بندی منبع باز یک استاندارد طلایی وجود داشته باشد، آن MPXJ است. این کتابخانه که به‌صورت فعال به‌مدت بیش از دو دهه توسط جان ایلز نگهداری می‌شود، در ابتدا برای پردازش فایل‌های MPX مایکروسافت پروجکت ساخته شد، اما به یک موتور ترجمهٔ جهانی برای فرمت‌های زمان‌بندی پروژه تبدیل شده است.

قابلیت‌های کلیدی

  • استخراج مستقیم 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 دقیقاً تعامل می‌کند.
  • توزیع چندزبانه: اگرچه به‌صورت جاوا نوشته شده است، 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 در واقع یک snapshot از پایگاه داده است که به متن ساده تبدیل شده است. xerparser این جداول را به اشیاء ساختار یافته پایتون تبدیل می‌کند و به‌صورت یکپارچه با pandas ادغام می‌شود.

قابلیت‌های کلیدی

  • بدون وابستگی به جاوا: کتابخانهٔ خالص پایتون ۳ که با 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).
  • بارهای کاری بدون سرور که بسته‌بندی یک زمان‌اجرای جاوا بیش از ۵۰ مگابایت عملی نیست.

۳. python-mpxj

اتصال پایتون با تمام قدرت MPXJ

اگر در پایتون کار می‌کنید اما باید فایل‌های باینری .mpp را پردازش کنید، xerparser نمی‌تواند به شما کمک کند زیرا فقط هدف .xer را دارد. قابل اعتمادترین پل منبع باز python-mpxj است.

قابلیت‌های کلیدی

  • به‌صورت خودکار یک JVM جاسازی‌شده بدون رابط کاربری با استفاده از jpype1 راه‌اندازی می‌کند.
  • API کامل MPXJ را مستقیماً برای توسعه‌دهندگان پایتون در دسترس می‌گذارد.
  • امکان تبدیل مستقیم از .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()}")

۴. ابزارهای تجزیه سفارشی و اسکریپت‌های واردسازی پایگاه‌داده

پردازش XER خام Primavera از طریق پردازش جریان

از آنجا که XER Primavera یک قالب جدول پیش‌بینی‌پذیر دارد، بسیاری از تیم‌های مهندسی منبع باز از رمزگشای‌های جریان جدولی سفارشی (نوشته شده به 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

چندین اسکریپت منبع باز در گیت‌هاب (مانند 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 تغذیه می‌شود.
  • شما در حال استقرار در محیط‌های سبک کانتینری یا رانرهای بدون سرور ابری هستید.

اگر Direct DB / CSV Stream Ingestion را انتخاب کنید:

  • شما به مرحله‌سازی پایگاه‌داده با توان بالا برای صادرات گسترده XER چندپروژه‌ای سازمانی نیاز دارید.
  • شما فقط نیاز دارید متادیتا، حساب‌های هزینه و منحنی‌های پیشرفت را از طریق تجزیه و تحلیل SQL استخراج کنید.

خلاصه و بهترین روش‌ها

هنگام ساخت خطوط لوله منبع باز برای داده‌های زمان‌بندی:

  1. هرگز .mpp را به‌صورت دستی تجزیه نکنید: مشخصات باینری مایکروسافت پیچیده و بدون مستندات است. همیشه به کتابخانه‌های آزموده‌شده مانند MPXJ تکیه کنید.
  2. به زمان‌مناطق تاریخ توجه کنید: برنامه‌های Primavera اغلب مدت زمان کار را بدون متادیتای منطقه زمانی ثبت می‌کنند و به تقویم‌های پروژه وابسته هستند. اطمینان حاصل کنید که خط لوله ورودی شما تغییرات شیفت‌های کاری ۸ ساعته را نسبت به روزهای تقویم ۲۴ ساعته در نظر بگیرد.
  3. یکپارچگی ارجاعی را اعتبارسنجی کنید: در فایل‌های XER، رکوردهای یتیم (مثلاً وظایفی که به گره‌های WBS حذف‌شده اشاره می‌کنند) به‌طور مکرر در صادرات پروژه‌های ایجاد شده به‌صورت دستی رخ می‌دهند. همیشه کلیدهای خارجی را به‌صورت پیشگیرانه در طول ETL اعتبارسنجی کنید.

سوالات متداول

**Q1: 1. آیا کتابخانه‌های منبع باز می‌توانند فایل‌های باینری بومی .mpp را به‌صورت مستقیم بنویسند یا به‌روزرسانی کنند؟

A1: نه، به دلیل فرمت باینری اختصاصی مایکروسافت، کتابخانه‌های منبع باز می‌توانند به‌طور قابل اعتماد فایل‌های .mpp را بخوانند، اما نوشتن معمولاً به فرمت‌های استانداردی مانند MSPDI (XML) یا MPX صادر می‌شود.

**Q2: آیا برای تجزیه این فایل‌ها نیاز دارم که Microsoft Project یا Primavera P6 بر روی سرورم نصب باشد؟

A2: نه، کتابخانه‌هایی مانند MPXJ و xerparser پارسرهای مستقل هستند که فایل‌ها را به‌صورت مستقیم پردازش می‌کنند بدون اینکه نیاز به مجوزهای نرم‌افزار میزبان داشته باشند.

**Q3: بهترین کتابخانه بومی پایتون برای تجزیه فایل‌های XER Primavera P6 بدون وابستگی به جاوا چیست؟

A3: xerparser برترین گزینهٔ خالص پایتون برای تجزیهٔ دُمپ‌های XER به‌صورت مستقیم به دیکشنری‌های بومی و DataFrameهای pandas است.

**Q4: آیا MPXJ می‌تواند فایل‌های MPP Microsoft Project را به فرمت‌های Primavera P6 تبدیل کند؟

A4: بله، MPXJ می‌تواند یک فایل .mpp را بخواند و برنامه زمان‌بندی نرمال‌سازی‌شده را به فرمت PMXML سازگار با Primavera صادر کند.

**Q5: چرا فایل‌های XER Primavera نسبت به فایل‌های MPP Microsoft Project آسان‌تر تجزیه می‌شوند؟

A5: فایل‌های XER قابل خواندن توسط انسان هستند، خروجی‌های پایگاه داده رابطه‌ای با جداساز تب، در حالی که فایل‌های MPP مالکیتی، ساختارهای سند ترکیبی باینری هستند.

منابع فرمت فایل

اخبار فرمت‌های فایل – منبع تک‌نقطه‌ای شما برای تمام اخبار مرتبط با فرمت‌های فایل از سراسر جهان انجمن‌های فرمت فایل – پرسش‌های خود را در انجمن‌های فرمت فایل ارسال کنید تا اطلاعات مفید از کارشناسان فرمت فایل و کاربران جامعه دریافت کنید ویکی فرمت فایل – دسته‌بندی‌های فرمت فایل را برای اطلاعات درباره فرمت‌های مختلف بررسی کنید APIها و کتابخانه‌های منبع باز برای مدیریت پروژه