Останнє оновлення: 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 Structured Storage або власними складеними документами, зі змінами схеми майже у кожному великому випуску MS Project (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER файли є таблично-розділеними текстовими експортами, структурованими як таблиці реляційної бази даних (%T таблиці з полями %F та записами %R), насиченими складними обмеженнями цілісності посилань, успадкуванням багатьох календарів та логікою критичного шляху.

Комерційні SDK, такі як Aspose.Tasks, існують, але витрати на ліцензування та прив’язка до постачальника роблять необхідними надійні відкриті альтернативи. У цьому посібнику ми розбираємо провідні відкриті API, бібліотеки та парсери, доступні для Java, Python та C#, щоб ефективно та чисто працювати з файлами MPP та XER.

Швидке порівняння інструментів з відкритим кодом

Бібліотека / ІнструментОсновна моваПідтримувані форматиЧитання / ЗаписНайкращий випадок використання
MPXJJava (Python / .NET прив’язки)MPP, MPT, MPX, XER, PMXML, MSPDIЧитання (MPP/XER); Запис (MPX/MSPDI/PMXML)Enterprise Java, конвертація багатьох форматів, все-в-одному розклади
xerparserPythonXERЧитати та розбиратиData science, аналіз планування pandas, ETL‑конвеєри
python-mpxjPythonMPP, XER, XMLЧитати / КонвертуватиPython‑подібна обгортка навколо MPXJ з використанням JPype
netezza-xer / xer-to-csvShell / Python / GoXERПотік / ЕкспортВитягування сирих таблиць, схожих на SQL, у реляційні БД
OpenProj / ProjectLibre CoreJavaMPP (старіші версії), XMLЧитання / ВідображенняІнтеграція Desktop/Engine для базових переглядів діаграм Ганта

1. MPXJ (Microsoft Project eXchange на Java)

Неперевершений галузевий стандарт для сумісності розкладів

Якщо існує золотий стандарт у бібліотеках планування з відкритим кодом, це MPXJ. Активно підтримується протягом понад двох десятиліть Джоном Айлсом, MPXJ спочатку був створений для обробки файлів Microsoft Project 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.
  • Багатомовний розподіл: Хоча написаний на 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 у сумісний з XER PMXML або MSPDI).
  • Складна логіка календаря (зміни, виключення, робочі години з кількома календарями).
  • Стабільність виробничого рівня з активною спільнотою.

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 перевершує

  • Інженерія даних, аналітика затримок‑претензій та перевірки здоров’я розкладу (скрипти оцінки DCMA за 14 пунктами).
  • Безсерверні навантаження, де пакування Java‑runtime розміром понад 50 МБ є непрактичним.

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. Такий підхід є оптимальним, якщо:

  1. Вам потрібно лише виконувати запити до табличних зв’язків за допомогою SQL.
  2. Розклади мають розмір у сотні мегабайт і містять десятки тисяч завдань, при цьому об’єктно-орієнтовані завантажувачі дерев можуть викликати помилки нестачі пам’яті.

Технічне порівняння: що обрати?

Виберіть MPXJ, якщо:

  • Ви повинні читати бінарні файли Microsoft Project .mpp без необхідності купувати пропрієтарне комерційне ПЗ.
  • Вам потрібна глибока інтелектуальна обробка розкладів: робочі календарі, розрахунок затримок, обчислення критичного шляху та відхилення базової лінії.
  • Ваш технологічний стек — це Java, Kotlin, C# (.NET) або корпоративний Python.

Виберіть xerparser, якщо:

  • Ви виключно працюєте з файлами Primavera P6 .xer.
  • Ваш конвеєр написаний на рідному Python і безпосередньо передає дані в pandas, NumPy або візуалізатори типу Dash / Streamlit.
  • Ви розгортаєте в легких контейнерних середовищах або безсерверних хмарних виконавцях.

Виберіть пряме підключення до БД / CSV потокове споживання, якщо:

  • Вам потрібна високопродуктивна підготовка бази даних для масивних багатопроектних корпоративних XER-експортів.
  • Вам потрібно лише витягнути метадані, рахунки вартості та криві прогресу за допомогою SQL‑аналітики.

Підсумок та найкращі практики

При створенні відкритих конвеєрів для даних розкладу:

  1. Ніколи не парсити .mpp вручну: Специфікація бінарного формату Microsoft складна і не документована. Завжди використовуйте випробувані бібліотеки, такі як MPXJ.
  2. Остерігайтеся часових поясів: Розклади Primavera часто записують тривалість робіт без метаданих часового поясу, спираючись на календарі проекту. Переконайтеся, що ваш конвеєр інжестії враховує зміни 8‑годинного робочого дня порівняно з 24‑годинними календарними днями.
  3. Перевіряйте референціальну цілісність: У файлах 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 — провідний чисто‑Python варіант для розбору дампів XER безпосередньо у нативні словники та DataFrame pandas.

**Q4: Чи може MPXJ конвертувати файли Microsoft Project MPP у формати Primavera P6?

A4: Так, MPXJ може читати файл .mpp і експортувати нормалізований графік у формат PMXML, сумісний з Primavera.

**Q5: Чому файли Primavera XER легше розбирати, ніж файли Microsoft Project MPP?

A5: XER‑файли є людсько‑читабельними, табуляцією розділеними дампами реляційних баз даних, тоді як MPP‑файли є пропрієтарними, бінарними складеними документними структурами.

Ресурси форматів файлів

Новини про формати файлів – Ваш єдиний ресурс для всіх новин, пов’язаних з форматами файлів з усього світу Форуми про формати файлів – Розмістіть ваші запитання на форумах про формати файлів, щоб отримати корисну інформацію від експертів з форматів файлів та користувачів спільноти Вікі про формати файлів – Досліджуйте категорії форматів файлів, щоб отримати інформацію про різні формати файлів Відкриті API та бібліотеки для управління проектами