آخرین بهروزرسانی: 02 سپتامبر 2026

برترین 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) | جاوا سازمانی، تبدیل چند فرمت، برنامهریزی همهجانبه |
| xerparser | Python | XER | خواندن و تجزیه | علم داده، تجزیه و تحلیل زمانبندی pandas، خطوط لوله ETL |
| python-mpxj | پایتون | MPP, XER, XML | خواندن / تبدیل | wrapper پایتونی برای MPXJ با استفاده از JPype |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | جریان / استخراج | استخراج جداول خام شبیه SQL به پایگاههای داده رابطهای |
| OpenProj / ProjectLibre Core | Java | MPP (نسخههای قدیمی)، 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 تجزیه میکنند. این روش در صورتی بهینه است که:
- فقط نیاز دارید روابط جدولی را با SQL پرسوجو کنید.
- زمانبندیها صدها مگابایت حجم دارند و شامل دهها هزار کار هستند، بهطوری که بارگذارهای درختمحور شیءگرا باعث خطاهای کمبود حافظه میشوند.
مقایسه فنی: کدام را باید انتخاب کنید؟
اگر MPXJ را انتخاب کنید:
- باید فایلهای باینری Microsoft Project
.mppرا بدون پرداخت هزینه برای نرمافزارهای تجاری مالکیتی بخوانید. - به هوش عمیق زمانبندی نیاز دارید: تقویمهای کاری، محاسبه مدت تاخیر، محاسبه مسیر بحرانی و انحراف پایه.
- پشته فناوری شما Java، Kotlin، C# (.NET) یا پایتون سازمانی است.
اگر xerparser را انتخاب کنید:
- شما بهطور انحصاری فایلهای Primavera P6
.xerرا مدیریت میکنید. - خط لوله شما با Python بومی نوشته شده و مستقیماً به pandas، NumPy یا ابزارهای تصویری مانند Dash / Streamlit تغذیه میشود.
- شما در حال استقرار در محیطهای سبک کانتینری یا رانرهای بدون سرور ابری هستید.
اگر Direct DB / CSV Stream Ingestion را انتخاب کنید:
- شما به مرحلهسازی پایگاهداده با توان بالا برای صادرات گسترده XER چندپروژهای سازمانی نیاز دارید.
- شما فقط نیاز دارید متادیتا، حسابهای هزینه و منحنیهای پیشرفت را از طریق تجزیه و تحلیل SQL استخراج کنید.
خلاصه و بهترین روشها
هنگام ساخت خطوط لوله منبع باز برای دادههای زمانبندی:
- هرگز
.mppرا بهصورت دستی تجزیه نکنید: مشخصات باینری مایکروسافت پیچیده و بدون مستندات است. همیشه به کتابخانههای آزمودهشده مانند MPXJ تکیه کنید. - به زمانمناطق تاریخ توجه کنید: برنامههای Primavera اغلب مدت زمان کار را بدون متادیتای منطقه زمانی ثبت میکنند و به تقویمهای پروژه وابسته هستند. اطمینان حاصل کنید که خط لوله ورودی شما تغییرات شیفتهای کاری ۸ ساعته را نسبت به روزهای تقویم ۲۴ ساعته در نظر بگیرد.
- یکپارچگی ارجاعی را اعتبارسنجی کنید: در فایلهای 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ها و کتابخانههای منبع باز برای مدیریت پروژه