Última atualização: 02 de setembro de 2026

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

Principais APIs de Código Aberto para Trabalhar com MS Project (MPP) & Primavera (XER) Arquivos

Na gestão de projetos corporativos, dois formatos de arquivo proprietários reinam supremos: Microsoft Project (.mpp) e Oracle Primavera P6 (.xer). Seja construindo um painel interno de análise, sincronizando cronogramas de construção com sistemas ERP, ou automatizando pipelines de status de projetos, ler e manipular esses arquivos de agendamento programaticamente é um requisito crítico.

No entanto, ambos os formatos apresentam obstáculos de engenharia notórios:

  • Arquivos MPP são binários, OLE Structured Storage não documentado ou formatos proprietários de documentos compostos com alterações de esquema em praticamente todas as principais versões do MS Project (2000, 2003, 2007, 2010, 2013, 2016, 2019, 2021).
  • Arquivos XER do Primavera são exportações de texto delimitado por tabulação estruturadas como tabelas de banco de dados relacional (%T tabelas com campos %F e registros %R), repletas de restrições complexas de integridade referencial, herança de múltiplos calendários e lógica de caminho crítico.

Existem SDKs comerciais como o Aspose.Tasks, mas os custos de licenciamento e o bloqueio de fornecedor tornam alternativas de código aberto robustas essenciais. Neste guia, analisamos as principais APIs, bibliotecas e analisadores de código aberto disponíveis para Java, Python e C# para lidar com arquivos MPP e XER de forma limpa e eficiente.

Comparação Rápida de Ferramentas de Código Aberto

Biblioteca / FerramentaLinguagem PrincipalFormatos SuportadosLeitura / EscritaMelhor Caso de Uso
MPXJJava (Python / .NET ligações)MPP, MPT, MPX, XER, PMXML, MSPDILeitura (MPP/XER); Escrita (MPX/MSPDI/PMXML)Java Empresarial, conversão multi‑formato, cronogramas tudo‑em‑um
xerparserPythonXERLer e AnalisarCiência de dados, análise de agendamento com pandas, pipelines ETL
python-mpxjPythonMPP, XER, XMLLer / ConverterWrapper Pythonic para MPXJ usando JPype
netezza-xer / xer-to-csvShell / Python / GoXERFluxo / ExportarExtraindo tabelas brutas semelhantes a SQL para bancos de dados relacionais
OpenProj / ProjectLibre CoreJavaMPP (versões antigas), XMLLer / RenderizarIntegração de Desktop/Motor para visualizações de Gantt de linha de base

1. MPXJ (Microsoft Project eXchange em Java)

O padrão indiscutível da indústria para interoperabilidade de cronogramas

Se existe um padrão ouro em bibliotecas de agendamento de código aberto, ele é o MPXJ. Mantido ativamente por mais de duas décadas por Jon Iles, o MPXJ foi originalmente criado para processar arquivos MPX do Microsoft Project, mas se expandiu para um motor de tradução universal para formatos de agendamento de projetos.

Principais Capacidades

  • Extração Direta de MPP: Analisa arquivos binários proprietários MPP em quase todas as versões do MS Project (Project 98 até os modernos Project 2016/2019/2021/365) sem exigir uma cópia instalada do Microsoft Project.
  • Análise de Primavera P6 XER & PMXML: Suporte nativo tanto para dumps baseados em texto .xer quanto para arquivos XML modernos do Primavera.
  • Modelo de Dados Normalizado: Exibe um modelo de objeto unificado (ProjectFile, Task, Resource, ResourceAssignment, Relation, WorkCalendar). Independentemente de sua entrada ser um MPP ou um XER, o código da sua aplicação interage com a mesma API.
  • Distribuição Multilíngue: Embora escrito em Java, o MPXJ distribui pacotes NuGet compilados nativamente para .NET (C#) via IKVM/CoreCLR, bem como um pacote Python (mpxj no PyPI).

Exemplo Rápido de Código: 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());
            }
        }
    }
}

Onde o MPXJ se destaca

  • Normalização verdadeira entre formatos (convertendo MPP para PMXML ou MSPDI compatível com XER).
  • Lógica complexa de calendário (turnos, exceções, horas de trabalho multi‑calendário).
  • Estabilidade de nível de produção com uma comunidade ativa.

2. xerparser (Python)

Análise Python nativa e leve para Primavera XER

Embora o MPXJ possa ser invocado via bindings Python, isso requer a execução de um backend JVM (via JPype). Quando você precisa de um analisador Python puramente nativo que execute sem dependências Java, xerparser é a solução ideal.

Um arquivo XER é essencialmente um instantâneo de banco de dados despejado em texto plano. xerparser decodifica essas tabelas em objetos Python estruturados e integra‑se perfeitamente ao pandas.

Principais Capacidades

  • Zero Dependências Java: Biblioteca Python 3 pura instalável via pip install xerparser.
  • Integridade Relacional: Mapeia tabelas principais do Primavera como TASK (Atividades), PROJECT (Metadados do Projeto), PROJWBS (hierarquias WBS), TASKRSRC (Atribuições) e TASKPRED (Vínculos lógicos).
  • Execução Rápida: Ideal para microsserviços conteinerizados, funções AWS Lambda e pipelines modernos de orquestração de dados (por exemplo, Apache Airflow, Prefect).

Exemplo Rápido de Código: 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())

Onde o xerparser se destaca

  • Engenharia de dados, análise de atrasos e reivindicações, e verificações de saúde de cronogramas (scripts de avaliação de 14 pontos do DCMA).
  • Cargas de trabalho serverless onde empacotar um runtime Java de mais de 50 MB é impraticável.

3. python-mpxj

Conectando Python com todo o poder do MPXJ

Se você está trabalhando em Python mas precisa processar arquivos binários .mpp, xerparser não pode ajudar porque ele só tem como alvo .xer. A ponte de código aberto mais confiável é python-mpxj.

Principais Capacidades

  • Inicia automaticamente uma JVM incorporada sem interface gráfica usando jpype1.
  • Expõe a API completa do MPXJ diretamente para desenvolvedores Python.
  • Permite a conversão direta de .mpp proprietário para formatos abertos modernos como .json ou .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. Utilitários de Análise Personalizados & Scripts de Ingestão de Banco de Dados

Manipulando XER bruto do Primavera via Processamento de Fluxo

Como o Primavera XER segue um formato de tabela previsível, muitas equipes de engenharia de código aberto utilizam decodificadores de fluxo tabular personalizados (escritos em Go, Python ou Rust) em vez de bibliotecas de cronograma de alto nível no estilo DOM.

A estrutura de um arquivo XER é formatada como:

%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

Vários scripts de código aberto no GitHub (como xer2sqlite e xer-to-csv) analisam essa estrutura diretamente para SQLite ou PostgreSQL. Essa abordagem é ideal se:

  1. Você só precisa consultar relacionamentos tabulares com SQL.
  2. Os cronogramas têm centenas de megabytes de tamanho com dezenas de milhares de tarefas, onde carregadores de árvore orientados a objetos provocariam erros de falta de memória.

Comparação Técnica: Qual Você Deve Escolher?

Escolha MPXJ se:

  • Você deve ler arquivos binários Microsoft Project .mpp sem pagar por software comercial proprietário.
  • Você precisa de inteligência profunda de cronograma: calendários de trabalho, cálculos de duração de atraso, computação do caminho crítico e variância da linha de base.
  • Sua pilha tecnológica é Java, Kotlin, C# (.NET) ou Python corporativo.

Escolha xerparser se:

  • Você lida exclusivamente com arquivos Primavera P6 .xer.
  • Seu pipeline é escrito em Python nativo e alimenta diretamente o pandas, NumPy ou visualizadores como Dash / Streamlit.
  • Você está implantando em ambientes de contêiner leves ou em runners sem servidor na nuvem.

Escolha ingestão direta de DB / fluxo CSV se:

  • Você precisa de um estágio de banco de dados de alta taxa de transferência para exportações massivas de XER de múltiplos projetos empresariais.
  • Você só precisa extrair metadados, contas de custo e curvas de progresso via análises SQL.

Resumo e Melhores Práticas

Ao construir pipelines de código aberto para dados de cronograma:

  1. Nunca analise .mpp manualmente: A especificação binária da Microsoft é complexa e não documentada. Sempre confie em bibliotecas testadas em batalha como MPXJ.
  2. Cuidado com fusos horários de data: Os cronogramas Primavera frequentemente registram durações de trabalho sem metadados de fuso horário, baseando-se nos calendários do projeto. Certifique‑se de que seu pipeline de ingestão considere turnos de jornada de trabalho de 8 horas versus dias de calendário de 24 horas.
  3. Valide a integridade referencial: Em arquivos XER, registros órfãos (por exemplo, tarefas que apontam para nós WBS excluídos) ocorrem frequentemente em exportações de projetos criadas manualmente. Sempre valide defensivamente as chaves estrangeiras durante o ETL.

Perguntas Frequentes

**Q1: 1. As bibliotecas de código aberto podem escrever ou atualizar arquivos binários nativos .mpp diretamente?

A1: Não, devido ao formato binário proprietário da Microsoft, as bibliotecas de código aberto podem ler arquivos .mpp de forma confiável, mas as gravações geralmente são exportadas para formatos padrão como MSPDI (XML) ou MPX.

**Q2: Preciso ter o Microsoft Project ou o Primavera P6 instalados no meu servidor para analisar esses arquivos?

A2: Não, bibliotecas como MPXJ e xerparser são analisadores independentes que processam arquivos diretamente sem exigir licenças de software host.

**Q3: Qual é a melhor biblioteca Python nativa para analisar arquivos XER do Primavera P6 sem dependências Java?

A3: xerparser é a principal escolha puramente Python para analisar despejos XER diretamente em dicionários nativos e DataFrames do pandas.

**Q4: O MPXJ pode converter arquivos MPP do Microsoft Project para formatos do Primavera P6?

A4: Sim, o MPXJ pode ler um arquivo .mpp e exportar o cronograma normalizado para o formato PMXML compatível com o Primavera.

**Q5: Por que os arquivos XER do Primavera são mais fáceis de analisar do que os arquivos MPP do Microsoft Project?

A5: arquivos XER são legíveis por humanos, dumps de banco de dados relacional delimitados por tabulação, enquanto arquivos MPP são proprietários, estruturas de documento composto binárias.

Recursos de Formato de Arquivo

Notícias de Formatos de Arquivo – Seu ponto único para todas as notícias relacionadas a formatos de arquivo de todo o mundo Fóruns de Formatos de Arquivo – Publique suas dúvidas nos fóruns de formatos de arquivo para obter informações úteis de especialistas e usuários da comunidade Wiki de Formatos de Arquivo –Explore categorias de formatos de arquivo para informações sobre vários formatos de arquivo APIs e Bibliotecas de Código Aberto para Gerenciamento de Projetos