Poslední aktualizace: 02. září 2026

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

Vedoucí open source API pro práci s MS Project (MPP) a Primavera (XER) soubory

V podnikovém řízení projektů vládnou dva proprietární formáty souborů: Microsoft Project (.mpp) a Oracle Primavera P6 (.xer). Ať už vytváříte interní analytický dashboard, synchronizujete stavební harmonogramy s ERP systémy nebo automatizujete pipeline stavů projektů, čtení a manipulace s těmito plánovacími soubory programově je kritickým požadavkem.

Nicméně oba formáty představují notorické inženýrské překážky:

  • MPP files jsou binární, nedokumentované OLE Structured Storage nebo proprietární formáty složených dokumentů se změnami schématu napříč prakticky každým hlavním vydáním MS Project (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Primavera XER files jsou tabulkově oddělené textové exporty strukturované jako relační databázové tabulky (%T tabulky s %F poli a %R záznamy), naplněné složitými omezeními referenční integrity, děděním více kalendářů a logikou kritické cesty.

Komerní SDK jako Aspose.Tasks existují, ale náklady na licence a vázanost na dodavatele činí robustní open-source alternativy nezbytnými. V tomto průvodci rozebíráme nejlepší open-source API, knihovny a parsery dostupné pro Javu, Python a C#, které umožňují čistě a efektivně pracovat se soubory MPP a XER.

Rychlé srovnání open-source nástrojů

Knihovna / NástrojPrimární jazykPodporované formátyČtení / zápisNejlepší případ použití
MPXJJava (Python / .NET vazby)MPP, MPT, MPX, XER, PMXML, MSPDIČtení (MPP/XER); Zápis (MPX/MSPDI/PMXML)Enterprise Java, konverze více formátů, vše v jednom plány
xerparserPythonXERČíst a zpracovatData science, analýza plánování pomocí pandas, ETL pipeline
python-mpxjPythonMPP, XER, XMLČíst / převéstPythonický wrapper kolem MPXJ používající JPype
netezza-xer / xer-to-csvShell / Python / GoXERProud / ExportExtrahování surových tabulek podobných SQL do relačních databází
OpenProj / ProjectLibre CoreJavaMPP (starší verze), XMLČíst / RenderovatIntegrace desktop/engine pro základní Ganttovy pohledy

1. MPXJ (Microsoft Project eXchange v Javě)

Nezpochybnitelný průmyslový standard pro interoperabilitu rozvrhů

Pokud existuje zlatý standard v open-source knihovnách pro plánování, je to MPXJ. Aktivně udržovaný více než dvě desetiletí Jonem Ilesem, MPXJ byl původně vytvořen pro zpracování souborů Microsoft Project MPX, ale rozšířil se na univerzální překladový engine pro formáty plánování projektů.

Klíčové schopnosti

  • Přímý extrakt MPP: Analyzuje proprietární binární soubory MPP napříč téměř všemi verzemi MS Project (Project 98 až po moderní Project 2016/2019/2021/365) bez nutnosti nainstalované kopie Microsoft Project.
  • Parsování Primavera P6 XER & PMXML: Nativní podpora jak textových výpisů .xer, tak moderních souborů Primavera XML.
  • Normalizovaný datový model: Poskytuje jednotný objektový model (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Bez ohledu na to, zda je vaším vstupem MPP nebo XER, váš aplikační kód pracuje se stejným API.
  • Vícejazyčná distribuce: Ačkoliv je napsán v Javě, MPXJ distribuuje nativně zkompilované NuGet balíčky pro .NET (C#) přes IKVM/CoreCLR, stejně jako Python balíček (mpxj na PyPI).

Rychlý příklad kódu: 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());
            }
        }
    }
}

Kde MPXJ vyniká

  • Skutečná normalizace napříč formáty (převod MPP na XER-kompatibilní PMXML nebo MSPDI).
  • Komplexní logika kalendáře (směny, výjimky, pracovní hodiny napříč více kalendáři).
  • Stabilita úrovně produkce s aktivní komunitou.

2. xerparser (Python)

Lehký, nativní Pythonový parser pro Primavera XER

Zatímco MPXJ lze volat pomocí Pythonových vazeb, vyžaduje to spuštění JVM backendu (prostřednictvím JPype). Když potřebujete čistě nativní Python parser, který běží bez Java závislostí, xerparser je řešení, na které se spolehnout.

Soubor XER je v podstatě snímek databáze vyexportovaný do plochého textu. xerparser dekóduje tyto tabulky do strukturovaných Python objektů a bezproblémově se integruje s pandas.

Klíčové schopnosti

  • Žádné Java závislosti: Čistá knihovna Python 3 instalovatelná pomocí pip install xerparser.
  • Relacionální integrita: Mapuje základní tabulky Primavera, jako jsou TASK (aktivity), PROJECT (metadata projektu), PROJWBS (hierarchie WBS), TASKRSRC (přiřazení) a TASKPRED (logické vazby).
  • Rychlé provádění: Ideální pro kontejnerizované mikroservisy, funkce AWS Lambda a moderní datové orchestraci pipeline (např. Apache Airflow, Prefect).

Rychlý příklad kódu: 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())

Kde xerparser vyniká

  • Datové inženýrství, analýza zpoždění a nároků a kontrola zdraví rozvrhu (DCMA 14‑bodové hodnotící skripty).
  • Serverless úlohy, kde je balení Java runtime nad 50 MB nepraktické.

3. python-mpxj

Propojení Pythonu s plnou silou MPXJ

Pokud pracujete v Pythonu, ale musíte zpracovávat binární soubory .mpp, xerparser vám nemůže pomoci, protože cílí pouze na .xer. Nejspolehlivějším open-source mostem je python-mpxj.

Klíčové schopnosti

  • Automaticky spouští bezhlavý vestavěný JVM pomocí jpype1.
  • Zpřístupňuje kompletní MPXJ API přímo vývojářům v Pythonu.
  • Umožňuje přímou konverzi z proprietárního .mpp do moderních otevřených formátů, jako jsou .json nebo .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. Vlastní nástroje pro parsování a skripty pro načítání databáze

Zpracování surových souborů Primavera XER pomocí streamového zpracování

Protože Primavera XER používá předvídatelný tabulkový formát, mnoho open-source inženýrských týmů využívá vlastní dekodéry tabulkových streamů (psané v Go, Pythonu nebo Rustu) místo vysoce úrovňových knihoven pro rozvrh ve stylu DOM.

Struktura souboru XER je formátována jako:

%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

Několik open-source skriptů na GitHubu (například xer2sqlite a xer-to-csv) parsuje tuto strukturu přímo do SQLite nebo PostgreSQL. Tento přístup je optimální, pokud:

  1. Potřebujete pouze dotazovat tabulární vztahy pomocí SQL.
  2. Plány mají velikost stovek megabajtů s desítkami tisíc úkolů, kde by objektově orientované načítače stromů vyvolaly chyby nedostatku paměti.

Technické srovnání: Které si vybrat?

Zvolte MPXJ, pokud:

  • Musíte číst binární soubory Microsoft Project .mpp bez placení za proprietární komerční software.
  • Potřebujete hlubokou inteligenci plánů: pracovní kalendáře, výpočty prodlev, výpočet kritické cesty a odchylky základní linie.
  • Váš technologický stack je Java, Kotlin, C# (.NET) nebo podnikovým Pythonem.

Zvolte xerparser, pokud:

  • Exkluzivně pracujete se soubory Primavera P6 .xer.
  • Váš pipeline je napsán v nativním Pythonu a přímo vstupuje do pandas, NumPy nebo vizualizérů jako Dash / Streamlit.
  • Nasazujete do úsporných kontejnerových prostředí nebo serverless cloudových běžců.

Zvolte přímý DB/CSV stream ingest, pokud:

  • Potřebujete vysokokapacitní databázové zpracování pro masivní exporty XER z více projektů podniku.
  • Potřebujete pouze extrahovat metadata, nákladové účty a křivky postupu pomocí SQL analytiky.

Shrnutí a osvědčené postupy

Při vytváření open-source pipeline pro plánovací data:

  1. Nikdy neparsujte .mpp ručně: Specifikace binárního formátu Microsoftu je složitá a nezdokumentovaná. Vždy se spoléhejte na osvědčené knihovny jako MPXJ.
  2. Dejte pozor na časová pásma dat: Plány Primavera často zaznamenávají pracovní doby bez metadat časového pásma a spoléhaly se na projektové kalendáře. Zajistěte, aby váš ingestní pipeline zohledňoval posuny 8‑hodinových pracovních dnů oproti 24‑hodinovým kalendářním dnům.
  3. Ověřte referenční integritu: V souborech XER se často vyskytují osiřelé záznamy (např. úkoly odkazující na smazané uzly WBS) u ručně vytvořených exportů projektů. Vždy obranně ověřujte cizí klíče během ETL.

Často kladené otázky

**Q1: 1. Mohou open-source knihovny přímo zapisovat nebo aktualizovat nativní binární soubory .mpp?

A1: Ne, kvůli proprietárnímu binárnímu formátu Microsoftu mohou open-source knihovny spolehlivě číst soubory .mpp, ale zápisy jsou obvykle exportovány do standardních formátů jako MSPDI (XML) nebo MPX.

**Q2: Potřebuji mít na serveru nainstalovaný Microsoft Project nebo Primavera P6, abych mohl tyto soubory parsovat?

A2: Ne, knihovny jako MPXJ a xerparser jsou samostatné parsery, které zpracovávají soubory přímo, aniž by vyžadovaly licence na hostitelský software.

**Q3: Jaká je nejlepší nativní knihovna Pythonu pro parsování souborů Primavera P6 XER bez závislosti na Javě?

A3: xerparser je špičková čistě Pythonová volba pro parsování XER výpisů přímo do nativních slovníků a pandas DataFrames.

**Q4: Umí MPXJ převést soubory Microsoft Project MPP do formátů Primavera P6?

A4: Ano, MPXJ může načíst soubor .mpp a exportovat normalizovaný plán do formátu PMXML kompatibilního s Primavera.

**Q5: Proč jsou soubory Primavera XER snazší k parsování než soubory Microsoft Project MPP?

A5: XER soubory jsou čitelné pro člověka, tabulkově oddělené výpisy relačních databází, zatímco MPP soubory jsou proprietární, binární složené dokumentové struktury.

Zdroje formátů souborů

Novinky o formátech souborů – Váš jediné místo pro všechny novinky týkající se formátů souborů z celého světa Fóra o formátech souborů – Zadejte své dotazy ve fórech o formátech souborů a získejte užitečné informace od odborníků na formáty souborů a uživatelů komunity Wiki o formátech souborů – Prozkoumejte kategorie formátů souborů pro informace o různých formátech souborů Open Source API a knihovny pro řízení projektů