শেষ আপডেট: 02 Sept, 2026

MS Project (MPP) এবং Primavera (XER) ফাইলের জন্য শীর্ষ ওপেন সোর্স API গুলি
এন্টারপ্রাইজ প্রকল্প ব্যবস্থাপনায়, দুটি স্বত্বাধিকারী ফাইল ফরম্যাট শীর্ষে রয়েছে: 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টেবিলগুলি%Fফিল্ড এবং%Rরেকর্ড সহ), জটিল রেফারেন্সিয়াল ইন্টিগ্রিটি কনস্ট্রেইন্ট, মাল্টি-ক্যালেন্ডার ইনহেরিটেন্স, এবং ক্রিটিক্যাল-পাথ লজিক দিয়ে পূর্ণ।
Aspose.Tasks এর মতো বাণিজ্যিক SDK গুলি রয়েছে, তবে লাইসেন্সিং খরচ এবং বিক্রেতা লক-ইন শক্তিশালী ওপেন-সোর্স বিকল্পগুলোকে অপরিহার্য করে তোলে। এই গাইডে, আমরা শীর্ষ ওপেন-সোর্স API, লাইব্রেরি, এবং পার্সারগুলোকে বিশ্লেষণ করব, যা জাভা, পাইথন, এবং C# এ MPP এবং XER ফাইলগুলোকে পরিষ্কার ও কার্যকরভাবে হ্যান্ডেল করতে পারে।
ওপেন-সোর্স টুলগুলির দ্রুত তুলনা
| লাইব্রেরি / টুল | প্রধান ভাষা | সমর্থিত ফরম্যাট | পড়া / লেখা | সেরা ব্যবহার ক্ষেত্র |
|---|---|---|---|---|
| MPXJ | Java (Python / .NET বাইন্ডিংস) | MPP, MPT, MPX, XER, PMXML, MSPDI | পড়া (MPP/XER); লেখা (MPX/MSPDI/PMXML) | এন্টারপ্রাইজ Java, মাল্টি-ফরম্যাট রূপান্তর, অল-ইন-ওয়ান সময়সূচি |
| xerparser | পাইথন | XER | পড়ুন ও পার্স করুন | ডেটা সায়েন্স, প্যান্ডাস শিডিউলিং বিশ্লেষণ, ETL পাইপলাইন |
| python-mpxj | Python | MPP, XER, XML | পড়ুন / রূপান্তর করুন | JPype ব্যবহার করে MPXJ এর চারপাশে পাইথনিক র্যাপার |
| netezza-xer / xer-to-csv | Shell / Python / Go | XER | স্ট্রিম / রপ্তানি | রিলেশনাল ডেটাবেসে র’ SQL-সদৃশ টেবিলগুলি বের করা |
| OpenProj / ProjectLibre Core | Java | MPP (older versions), XML | পড়া / রেন্ডার | বেসলাইন গ্যান্ট ভিউগুলির জন্য ডেস্কটপ/ইঞ্জিন ইন্টিগ্রেশন |
1. MPXJ (মাইক্রোসফট প্রজেক্ট এক্সচেঞ্জ ইন জাভা)
নির্বাচিত সময়সূচি আন্তঃক্রিয়ার জন্য অপ্রতিদ্বন্দ্বী শিল্প মান
যদি ওপেন-সোর্স শিডিউলিং লাইব্রেরিগুলিতে একটি স্বর্ণমান থাকে, তা হল MPXJ। জন আইলেসের দ্বারা দুই দশকের বেশি সময় ধরে সক্রিয়ভাবে রক্ষণাবেক্ষণ করা, MPXJ মূলত মাইক্রোসফট প্রজেক্ট MPX ফাইল প্রক্রিয়া করার জন্য তৈরি হয়েছিল, তবে এটি প্রকল্প শিডিউলিং ফরম্যাটের জন্য একটি সার্বজনীন অনুবাদ ইঞ্জিনে রূপান্তরিত হয়েছে।
মূল সক্ষমতা
- ডাইরেক্ট MPP এক্সট্র্যাকশন: প্রায় সব MS Project সংস্করণে (প্রজেক্ট ৯৮ থেকে আধুনিক প্রজেক্ট ২০১৬/২০১৯/২০২১/৩৬৫) মালিকানাধীন বাইনারি MPP ফাইল পার্স করে, মাইক্রোসফট প্রজেক্টের ইনস্টল করা কপি প্রয়োজন না করে।
- Primavera P6 XER & PMXML পার্সিং: টেক্সট-ভিত্তিক
.xerডাম্প এবং আধুনিক Primavera XML ফাইল উভয়ের জন্য নেটিভ সাপোর্ট। - নরমালাইজড ডেটা মডেল: একটি একীভূত অবজেক্ট মডেল (
ProjectFile,Task,Resource,ResourceAssignment,Relation,WorkCalendar) প্রকাশ করে। আপনার ইনপুট MPP হোক বা XER, আপনার অ্যাপ্লিকেশন কোড একই API-র সঙ্গে ইন্টারঅ্যাক্ট করে। - মাল্টি-ল্যাঙ্গুয়েজ ডিস্ট্রিবিউশন: যদিও জাভা-তে লেখা, MPXJ IKVM/CoreCLR এর মাধ্যমে .NET (C#) এর জন্য নেটিভ-কম্পাইলড NuGet প্যাকেজ এবং একটি Python প্যাকেজ (
mpxjon 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 কে XER-সামঞ্জস্যপূর্ণ PMXML বা MSPDI-তে রূপান্তর করা)।
- জটিল ক্যালেন্ডার লজিক (শিফট, ব্যতিক্রম, বহু-ক্যালেন্ডার কাজের সময়)।
- প্রোডাকশন-গ্রেড স্থায়িত্ব সক্রিয় কমিউনিটির সঙ্গে।
2. xerparser (পাইথন)
হালকা, নেটিভ পাইথন পার্সিং প্রিমাভেরা XER-এর জন্য
যদিও MPXJ কে পাইথন বাইন্ডিংসের মাধ্যমে আহ্বান করা যায়, তা করার জন্য একটি JVM ব্যাকএন্ড (JPype এর মাধ্যমে) চালাতে হয়। যখন আপনাকে একটি সম্পূর্ণ নেটিভ পাইথন পার্সার দরকার যা জাভা নির্ভরতা ছাড়া চালায়, xerparser হল সর্বোত্তম সমাধান।
একটি XER ফাইল মূলত একটি ডেটাবেস স্ন্যাপশট যা ফ্ল্যাট টেক্সটে ডাম্প করা হয়। xerparser এই টেবিলগুলোকে গঠিত পাইথন অবজেক্টে ডিকোড করে এবং pandas এর সঙ্গে নির্বিঘ্নে সংহত হয়।
মূল সক্ষমতা
- শূন্য জাভা নির্ভরতা:
pip install xerparserএর মাধ্যমে ইনস্টলযোগ্য শুদ্ধ পাইথন ৩ লাইব্রেরি। - রিলেশনাল ইন্টেগ্রিটি:
TASK(অ্যাক্টিভিটি),PROJECT(প্রজেক্ট মেটাডেটা),PROJWBS(WBS হায়ারার্কি),TASKRSRC(অ্যাসাইনমেন্ট), এবংTASKPRED(লজিক লিঙ্ক) এর মতো মূল Primavera টেবিলগুলোকে ম্যাপ করে। - দ্রুত এক্সিকিউশন: কন্টেইনারাইজড মাইক্রোসার্ভিস, 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।
মূল সক্ষমতা
jpype1ব্যবহার করে স্বয়ংক্রিয়ভাবে একটি হেডলেস এমবেডেড JVM চালু করে।- পূর্ণ MPXJ API সরাসরি পাইথন ডেভেলপারদের কাছে উন্মুক্ত করে।
- মালিকানাধীন
.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 হ্যান্ডলিং
প্রিমাভেরা XER একটি পূর্বানুমানযোগ্য টেবিল ফরম্যাট অনুসরণ করার কারণে, অনেক ওপেন-সোর্স ইঞ্জিনিয়ারিং দল কাস্টম ট্যাবুলার স্ট্রিম ডিকোডার (গো, পাইথন, বা রাস্টে লেখা) ব্যবহার করে উচ্চ-স্তরের 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ফাইলগুলো পড়তে হবে। - আপনাকে গভীর শিডিউল বুদ্ধিমত্তা দরকার: কার্যকরী ক্যালেন্ডার, ল্যাগ সময়কাল গণনা, ক্রিটিকাল পাথ গণনা, এবং বেসলাইন ভ্যারিয়েন্স।
- আপনার প্রযুক্তি স্ট্যাক হল Java, Kotlin, C# (.NET), অথবা এন্টারপ্রাইজ Python।
যদি xerparser ব্যবহার করা হয়:
- আপনি একমাত্র Primavera P6
.xerফাইলগুলো পরিচালনা করেন। - আপনার পাইপলাইনটি native Python-এ লেখা এবং সরাসরি pandas, NumPy, অথবা Dash / Streamlit এর মতো ভিজুয়ালাইজারগুলিতে ফিড করে।
- আপনি লীন কন্টেইনার পরিবেশ বা সার্ভারলেস ক্লাউড রানার-এ ডিপ্লয় করছেন।
যদি Direct DB / CSV স্ট্রিম ইনজেশন ব্যবহার করা হয়:
- আপনাকে বিশাল বহু-প্রকল্প এন্টারপ্রাইজ XER রপ্তানির জন্য উচ্চ-থ্রুপুট ডেটাবেস স্টেজিং প্রয়োজন।
- আপনাকে শুধুমাত্র মেটাডেটা, খরচ অ্যাকাউন্ট এবং অগ্রগতি কার্ভগুলি SQL অ্যানালিটিক্সের মাধ্যমে বের করতে হবে।
সারাংশ ও সেরা অনুশীলনসমূহ
শিডিউল ডেটার জন্য ওপেন-সোর্স পাইপলাইন তৈরি করার সময়:
.mppকখনও ম্যানুয়ালি পার্স করবেন না: মাইক্রোসফটের বাইনারি স্পেসিফিকেশন জটিল এবং ডকুমেন্টেড নয়। সর্বদা MPXJ এর মতো পরীক্ষিত লাইব্রেরির উপর নির্ভর করুন।- Date Timezones সম্পর্কে সতর্ক থাকুন: Primavera শিডিউলগুলি প্রায়ই সময় অঞ্চল মেটাডেটা ছাড়া কাজের সময়কাল রেকর্ড করে, প্রকল্প ক্যালেন্ডারের উপর নির্ভর করে। নিশ্চিত করুন আপনার ইনজেশন পাইপলাইন ৮-ঘণ্টার কর্মদিবস শিফট এবং ২৪-ঘণ্টার ক্যালেন্ডার দিনের পার্থক্য বিবেচনা করে।
- Referential Integrity যাচাই করুন: XER ফাইলে, অনাথ রেকর্ড (যেমন, মুছে ফেলা WBS নোডের দিকে নির্দেশ করা টাস্ক) ম্যানুয়ালি তৈরি করা প্রকল্প রপ্তানিতে প্রায়ই দেখা যায়। ETL এর সময় সর্বদা সুরক্ষামূলকভাবে ফরেন কী যাচাই করুন।
প্রশ্নোত্তর
**Q1: ১. ওপেন-সোর্স লাইব্রেরিগুলি কি সরাসরি নেটিভ বাইনারি .mpp ফাইল লিখতে বা আপডেট করতে পারে?
A1: না, মাইক্রোসফটের মালিকানাধীন বাইনারি ফরম্যাটের কারণে, ওপেন-সোর্স লাইব্রেরিগুলি নির্ভরযোগ্যভাবে .mpp ফাইল পড়তে পারে, তবে লেখার কাজ সাধারণত MSPDI (XML) বা MPX এর মতো স্ট্যান্ডার্ড ফরম্যাটে রপ্তানি করা হয়।
**Q2: এই ফাইলগুলো পার্স করার জন্য কি আমাকে সার্ভারে Microsoft Project বা Primavera P6 ইনস্টল করতে হবে?
A2: না, MPXJ এবং xerparser এর মতো লাইব্রেরিগুলি স্বতন্ত্র পার্সার যা ফাইলগুলো সরাসরি প্রক্রিয়া করে এবং হোস্ট সফটওয়্যার লাইসেন্সের প্রয়োজন হয় না।
**Q3: Java নির্ভরতা ছাড়া Primavera P6 XER ফাইল পার্স করার জন্য সেরা নেটিভ Python লাইব্রেরি কোনটি?
A3: xerparser হল XER ডাম্প সরাসরি নেটিভ ডিকশনারি এবং pandas DataFrames-এ পার্স করার জন্য শীর্ষস্থানীয় শুদ্ধ-Python বিকল্প।
**Q4: MPXJ কি Microsoft Project MPP ফাইলগুলোকে Primavera P6 ফরম্যাটে রূপান্তর করতে পারে?
A4: হ্যাঁ, MPXJ একটি .mpp ফাইল পড়তে পারে এবং স্বাভাবিকীকৃত সময়সূচি Primavera-সামঞ্জস্যপূর্ণ PMXML ফরম্যাটে রপ্তানি করতে পারে।
**Q5: Microsoft Project MPP ফাইলের তুলনায় কেন Primavera XER ফাইলগুলো পার্স করা সহজ?
A5: XER ফাইলগুলি মানব-পঠনযোগ্য, ট্যাব-ডিলিমিটেড রিলেশনাল ডেটাবেস ডাম্প, যেখানে MPP ফাইলগুলি মালিকানাধীন, বাইনারি যৌগিক ডকুমেন্ট গঠন।
ফাইল ফরম্যাট রিসোর্সসমূহ
ফাইল ফরম্যাট সংবাদ – ফাইল ফরম্যাট সম্পর্কিত বিশ্বব্যাপী সব খবরের একমাত্র গন্তব্য ফাইল ফরম্যাট ফোরাম – ফাইল ফরম্যাট ফোরামে আপনার প্রশ্ন পোস্ট করুন যাতে ফাইল ফরম্যাট বিশেষজ্ঞ ও কমিউনিটি ব্যবহারকারীদের থেকে উপযোগী তথ্য পেতে পারেন ফাইল ফরম্যাট উইকি – বিভিন্ন ফাইল ফরম্যাটের তথ্যের জন্য ফাইল ফরম্যাট ক্যাটেগরি অন্বেষণ করুন ওপেন সোর্স API এবং লাইব্রেরি প্রজেক্ট ম্যানেজমেন্টের জন্য