Leia o gráfico de Gantt do projeto usando Java

O MS Project é um software de gerenciamento de projetos popular, amplamente utilizado para organizar, gerenciar e acompanhar as atividades do projeto com eficiência. Ele permite criar as tarefas, adicionar recursos, alocar tarefas aos recursos, monitorar o andamento e gerenciar atividades relacionadas ao orçamento. A visualização do gráfico de Gantt é a visualização padrão do projeto. Ele lista as tarefas do projeto e mostra suas relações entre si. Também mostra o cronograma do projeto usando barras de Gantt. Neste artigo, aprenderemos a ler o gráfico de Gantt do projeto MS usando Java.

Os seguintes tópicos serão abordados neste artigo:

O que é gráfico de Gantt no Microsoft Project

Um gráfico de Gantt é um tipo de gráfico de barras que mostra o cronograma do projeto. É uma representação gráfica das tarefas do projeto em função do tempo e oferece uma visão panorâmica de todo o projeto. A exibição do gráfico de Gantt no Microsoft Project mostra o seguinte:

  • Cronograma do projeto
  • Estimativas de tempo
  • Recursos do projeto e membros da equipe
  • Prioridades da tarefa
  • Dependência de tarefa
Gantt Chart View of a Project in Microsoft Project.

Gantt Chart View of a Project in Microsoft Project.

API Java para ler gráfico de Gantt do projeto

Para ler a visualização do gráfico de Gantt de um projeto do arquivo MPP, usaremos a API Aspose.Tasks for Java. Ele permite criar, editar ou manipular arquivos do Microsoft Project programaticamente em aplicativos Java. A classe Project da API representa um projeto. É a classe principal que expõe vários métodos para executar diferentes funções. Também permite a leitura de um dos formatos de gerenciamento de projetos suportados, como MPP, MPT, MPX e XML. A classe GanttChartView da API representa uma visualização de gráfico de Gantt. Ele expõe várias propriedades e métodos para trabalhar com o gráfico de Gantt programaticamente.

Faça o download 8 do JAR da API ou adicione a seguinte configuração pom.xml em um aplicativo Java baseado em Maven.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-tasks</artifactId>
    <version>22.5</version>
    <classifier>jdk18</classifier>
</dependency>

Ler visualização de gráfico de Gantt e recuperar estilos de barra

A classe GanttBarStyle da API representa um estilo de barra usado pelo MS Project na visualização do gráfico de Gantt. Podemos ler a visualização do gráfico de Gantt e recuperar os estilos de barra seguindo as etapas abaixo:

  1. Primeiramente, carregue o arquivo de projeto usando a classe Project.
  2. Em seguida, obtenha a exibição padrão do ViewCollection por seu índice.
  3. Em seguida, crie uma instância da classe GanttChartView e da exibição typecast.
  4. Opcionalmente, leia as propriedades básicas e mostre os dados.
  5. Depois disso, obtenha uma lista de estilos de barra da visualização do gráfico de Gantt usando getBarStyles().
  6. Por fim, percorra os estilos de barra como objeto de classe GanttBarStyle e mostre os valores.

O exemplo de código a seguir mostra como ler estilos de barra do modo de exibição de gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    View view = project.getViews().toList().get(0);
    GanttChartView gcView = (GanttChartView) view;

    // Mostrar informações básicas
    System.out.println("Bar Rounding: " + gcView.getBarRounding());
    System.out.println("Show Bar Splits: " + gcView.getShowBarSplits());
    System.out.println("Show Drawings: " + gcView.getShowDrawings());
    System.out.println("RollUp Gantt Bars: " + gcView.getRollUpGanttBars());
    System.out.println("Hide Rollup Bars When Summary Expanded: " + gcView.getHideRollupBarsWhenSummaryExpanded());
    System.out.println("Bar Size: " + gcView.getBarSize());
    System.out.println("Bar Styles count: " + gcView.getBarStyles().size());
    System.out.println("-----------------------------------------------");

    // Mostrar estilos de barra
    for (GanttBarStyle barStyle : gcView.getBarStyles())
    {	
      System.out.println("Row: " +  barStyle.getRow());
        System.out.println("Name: " +  barStyle.getName());
        System.out.println("ShowFor: " +  barStyle.getShowForTaskUid());
        System.out.println("From:" +  getbarStylesFromToName(barStyle.getFrom()));
        System.out.println("To:" +   getbarStylesFromToName(barStyle.getTo()));
        System.out.println("Middle Shape:" +   getbarStylesMiddleShapeName(barStyle.getMiddleShape()));
        System.out.println("Middle Shape Color:" + barStyle.getMiddleShapeColor());
        System.out.println("Start Shape:" +   getbarStylesShapeName(barStyle.getStartShape()));
        System.out.println("End Shape:" +   getbarStylesShapeName(barStyle.getEndShape()));
        System.out.println("End Shape Color:" + barStyle.getEndShapeColor());
        System.out.println("-----------------------------------------------");
    }
}

// Esta função retorna o nome do campo
private static String getbarStylesFromToName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = Field.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}

// Esta função retorna o nome da forma intermediária
private static String getbarStylesMiddleShapeName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = GanttBarMiddleShape.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}

// Esta função retorna o nome da forma inicial ou final
private static String getbarStylesShapeName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = GanttBarEndShape.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}
Bar Rounding: true
Show Bar Splits: true
Show Drawings: true
RollUp Gantt Bars: false
Hide Rollup Bars When Summary Expanded: false
Bar Size: 3
Bar Styles count: 40
-----------------------------------------------
Row: 1
Name: Task
ShowFor: null
From:TaskStart
To:TaskFinish
Middle Shape:RectangleBar
Middle Shape Color:java.awt.Color[r=0,g=0,b=255]
Start Shape:NoBarEndShape
End Shape:NoBarEndShape
End Shape Color:java.awt.Color[r=0,g=0,b=0]
-----------------------------------------------
...

Ler linhas de grade da exibição de gráfico de Gantt em Java

A classe Gridlines da API representa as linhas de grade que aparecem em uma visualização de gráfico de Gantt. Podemos ler a cor, intervalo, padrão e tipo da linha de grade seguindo as etapas abaixo:

  1. Primeiramente, carregue o arquivo de projeto usando a classe Project.
  2. Em seguida, obtenha a exibição padrão do ViewCollection por seu índice.
  3. Em seguida, crie uma instância da classe GanttChartView e da exibição typecast.
  4. Depois disso, obtenha uma lista de linhas de grade da visualização do gráfico de Gantt usando o getGridlines().
  5. Finalmente, percorra as linhas de grade como o objeto de classe Gridlines e mostre os valores.

O exemplo de código a seguir mostra como ler as linhas de grade da exibição do gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações de linhas de grade
    System.out.println("Gridlines Count: " + gcView.getGridlines().size());
    Gridlines gridlines = gcView.getGridlines().get(0);

    System.out.println("Gridlines Type: " + gridlines.getType());
    System.out.println("Gridlines Interval: " + gridlines.getInterval());
    System.out.println("Gridlines NormalColor: " + gridlines.getNormalColor());
    System.out.println("Gridlines NormalPattern: " + getLinePatternName(gridlines.getNormalPattern()));
    System.out.println("Gridlines IntervalPattern: " +gridlines.getIntervalPattern());
    System.out.println("Gridlines IntervalColor: " + gridlines.getIntervalColor());
}

// Esta função retorna o nome do padrão de linha
private static String getLinePatternName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = LinePattern.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}
Gridlines Count: 14
Gridlines Type: 3
Gridlines Interval: 0
Gridlines NormalColor: java.awt.Color[r=192,g=192,b=192]
Gridlines NormalPattern: Solid
Gridlines IntervalPattern: 0
Gridlines IntervalColor: java.awt.Color[r=192,g=192,b=192]

Extrair estilo de texto da exibição de gráfico de Gantt em Java

A classe TextStyle da API representa o estilo visual do texto de um item em uma visualização de gráfico de Gantt. Podemos ler a cor, a cor do plano de fundo, a fonte e o estilo da fonte seguindo as etapas abaixo:

  1. Primeiramente, carregue o arquivo de projeto usando a classe Project.
  2. Em seguida, obtenha a exibição padrão do ViewCollection por seu índice.
  3. Em seguida, crie uma instância da classe GanttChartView e da exibição typecast.
  4. Depois disso, obtenha uma lista de estilos de texto da visualização do gráfico de Gantt usando getTextStyles().
  5. Por fim, inicialize o objeto da classe TextStyle para o primeiro estilo de texto e mostre os valores.

O exemplo de código a seguir mostra como ler estilos de texto do modo de exibição de gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações de estilo de texto
    System.out.println("Text Styles Count: " + gcView.getTextStyles().size());
    TextStyle textStyle = gcView.getTextStyles().get(0);

    System.out.println("Background Color: " + textStyle.getBackgroundColor());
    System.out.println("Text Color: " + textStyle.getColor());
    System.out.println("Font Family: " + textStyle.getFont().getFontFamily());
    System.out.println("Font Size: " + textStyle.getFont().getSize());
    System.out.println("Font Style: " + getFontStyleName(textStyle.getFont().getStyle()));
}

// Esta função retorna o nome do estilo da fonte
private static String getFontStyleName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = FontStyles.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}
Text Styles Count: 19
Background Color: java.awt.Color[r=0,g=0,b=0]
Text Color: java.awt.Color[r=0,g=0,b=255]
Font Family: Arial
Font Size: 8.0
Font Style: Regular

Recuperar linhas de progresso da visualização de gráfico de Gantt em Java

As linhas de progresso aparecem na exibição Gráfico de Gantt mostrando se as tarefas estão atrasadas ou dentro do cronograma. Podemos ler as várias propriedades das linhas de progresso seguindo os passos abaixo:

  1. Primeiramente, carregue o arquivo de projeto usando a classe Project.
  2. Em seguida, obtenha a exibição padrão do ViewCollection por seu índice.
  3. Em seguida, crie uma instância da classe GanttChartView e da exibição typecast.
  4. Depois disso, obtenha uma lista de linhas de progresso da visualização do gráfico de Gantt usando getProgressLines().
  5. Por fim, mostre os valores de atributo da linha de progresso.

O exemplo de código a seguir mostra como ler as linhas de progresso da exibição do gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações das linhas de progresso
    System.out.println("ProgressLines.BeginAtDate: " + gcView.getProgressLines().getBeginAtDate().toString());
    System.out.println("ProgressLines.isBaselinePlan: " + gcView.getProgressLines().isBaselinePlan());
    System.out.println( "ProgressLines.DisplaySelected: " + gcView.getProgressLines().getDisplaySelected());
    System.out.println("ProgressLines.SelectedDates.Count: " + gcView.getProgressLines().getSelectedDates().size());

    System.out.println("ProgressLines.DisplayAtRecurringIntervals: " + gcView.getProgressLines().getDisplayAtRecurringIntervals());
    System.out.println("ProgressLines.RecurringInterval.Interval: " +  gcView.getProgressLines().getRecurringInterval().getInterval()  );
    System.out.println("ProgressLines.RecurringInterval.WeeklyDays.Count" +  gcView.getProgressLines().getRecurringInterval().getWeeklyDays().size());
    System.out.println("RecurringInterval.DayType.Friday: "  +  (int) gcView.getProgressLines().getRecurringInterval().getWeeklyDays().get(1));
    System.out.println("RecurringInterval.DayType.Saturday: "  + (int)gcView.getProgressLines().getRecurringInterval().getWeeklyDays().get(2));
    System.out.println("RecurringInterval.DayType.Sunday: " +  (int)gcView.getProgressLines().getRecurringInterval().getWeeklyDays().get(0));

    System.out.println("ProgressLines.ShowDate" + gcView.getProgressLines().getShowDate());

    System.out.println("ProgressLines.ProgressPointShape: " +  gcView.getProgressLines().getProgressPointShape());
    System.out.println("ProgressLines.ProgressPointColor: " +  gcView.getProgressLines().getProgressPointColor());
    System.out.println("ProgressLines.LineColor: " + gcView.getProgressLines().getLineColor());
    System.out.println("ProgressLines.LinePattern" +  gcView.getProgressLines().getLinePattern());

    System.out.println("ProgressLines.OtherProgressPointShape: " + gcView.getProgressLines().getOtherProgressPointShape());
    System.out.println("ProgressLines.OtherProgressPointColor: " + gcView.getProgressLines().getOtherProgressPointColor().toString());
    System.out.println("ProgressLines.OtherLineColor: " + gcView.getProgressLines().getOtherLineColor());
}

Leia a camada de escala de tempo inferior em Java

A escala de tempo mostra unidades de tempo, dias, meses, ano civil ou ano fiscal. Existem três camadas de escala de tempo na visualização do projeto para mostrar os valores de escala de tempo para cada camada, como contagem, unidade, rótulo, alinhamento etc. Podemos ler a camada de escala de tempo inferior seguindo as etapas abaixo:

  1. Primeiramente, carregue o arquivo de projeto usando a classe Project.
  2. Em seguida, obtenha a exibição padrão do ViewCollection por seu índice.
  3. Em seguida, crie uma instância da classe GanttChartView e da exibição typecast.
  4. Depois disso, obtenha as configurações da camada de escala de tempo inferior da exibição usando o getBottomTimescaleTier().
  5. Por fim, mostre os valores da camada de escala de tempo inferior.

O exemplo de código a seguir mostra como ler a camada de escala de tempo inferior da exibição do gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações do nível inferior da escala de tempo
    System.out.println("BottomTimescaleTier Count: " + gcView.getBottomTimescaleTier().getCount());
    System.out.println("BottomTimescaleTier Unit: " + getTimescaleUnitName(gcView.getBottomTimescaleTier().getUnit()));
    System.out.println("BottomTimescaleTier UsesFiscalYear: " + gcView.getBottomTimescaleTier().getUsesFiscalYear());
    System.out.println("BottomTimescaleTier Alignment: " + getAlignmentName(gcView.getBottomTimescaleTier().getAlignment()));
    System.out.println("BottomTimescaleTier ShowTicks: " + gcView.getBottomTimescaleTier().getShowTicks());
    System.out.println("BottomTimescaleTier Label: " + getDateLabelName(gcView.getBottomTimescaleTier().getLabel()));
}

// Esta função retorna o nome do rótulo de dados de escala de tempo
private static String getDateLabelName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = DateLabel.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}

// Esta função retorna o título do alinhamento
private static String getAlignmentName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = StringAlignment.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}

// Esta função retorna o nome da unidade de escala de tempo
private static String getTimescaleUnitName(int val) throws IllegalArgumentException, IllegalAccessException {
  String name = null;
  java.lang.reflect.Field[] fields = TimescaleUnit.class.getDeclaredFields();
  for (java.lang.reflect.Field f : fields) {
    int fVal = f.getInt(f);
      if( fVal == val)
      {
        name = f.getName();
      }
  }
  return name;
}
BottomTimescaleTier Count: 2
BottomTimescaleTier Unit: Days
BottomTimescaleTier UsesFiscalYear: true
BottomTimescaleTier Alignment: Center
BottomTimescaleTier ShowTicks: true
BottomTimescaleTier Label: DayOfMonthDd

Leia a camada de escala de tempo média em Java

Da mesma forma, podemos ler a camada de escala de tempo intermediária seguindo as etapas mencionadas anteriormente. No entanto, obteremos as configurações da camada de escala de tempo intermediária da exibição usando getMiddleTimescaleTier() na etapa 4.

O exemplo de código a seguir mostra como ler a camada de escala de tempo intermediária da exibição do gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações do nível de escala de tempo médio
    System.out.println("MiddleTimescaleTier Count: " + gcView.getMiddleTimescaleTier().getCount());
    System.out.println("TimescaleUnit Weeks: " +  getTimescaleUnitName(gcView.getMiddleTimescaleTier().getUnit()));
    System.out.println("MiddleTimescaleTier Alignment: " + getAlignmentName(gcView.getMiddleTimescaleTier().getAlignment()));
    System.out.println("MiddleTimescaleTier ShowTicks: " + gcView.getMiddleTimescaleTier().getShowTicks());
    System.out.println("MiddleTimescaleTier Label: " +  getDateLabelName(gcView.getMiddleTimescaleTier().getLabel()));
}
MiddleTimescaleTier.Count: 1
TimescaleUnit.Weeks: Months
MiddleTimescaleTier.Alignment: Center
MiddleTimescaleTier.ShowTicks: true
MiddleTimescaleTier.Label: MonthMmmmYyyy

Recuperar o nível de escala de tempo superior em Java

Também podemos ler a camada de escala de tempo superior seguindo as etapas mencionadas anteriormente. No entanto, obteremos as configurações da camada de escala de tempo superior da exibição usando getTopTimescaleTier() na etapa 4.

O exemplo de código a seguir mostra como ler a camada de escala de tempo superior da exibição do gráfico de Gantt em Java.

public static void main(String[] args) throws Exception
{
    // O caminho para o diretório de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carregar o projeto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtenha a visualização padrão como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar informações do nível de escala de tempo superior
    System.out.println("TopTimescaleTier Unit: " + getTimescaleUnitName(gcView.getTopTimescaleTier().getUnit()));
    System.out.println("TopTimescaleTier UsesFiscalYear: " + gcView.getTopTimescaleTier().getUsesFiscalYear() );
    System.out.println("TopTimescaleTier Alignment: " +  getAlignmentName(gcView.getTopTimescaleTier().getAlignment()));
    System.out.println("TopTimescaleTier ShowTicks: " + gcView.getTopTimescaleTier().getShowTicks());
    System.out.println("TopTimescaleTier Label" + getDateLabelName(gcView.getTopTimescaleTier().getLabel()));
}
TopTimescaleTier Unit: Quarters
TopTimescaleTier UsesFiscalYear: true
TopTimescaleTier Alignment: Center
TopTimescaleTier ShowTicks: true
TopTimescaleTier Label: QuarterQtrQYyyy

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para experimentar a biblioteca sem limitações de avaliação.

Conclusão

Neste artigo, aprendemos como

  • leia a visualização do gráfico de Gantt programaticamente em Java;
  • extrair estilos de barra e estilo de texto da visualização do gráfico de Gantt;
  • recuperar linhas de grade e linhas de progresso da visualização do gráfico de Gantt;
  • leia unidades de escala de tempo da visualização do gráfico de Gantt usando Java.

Além disso, você pode aprender mais sobre Aspose.Tasks for Java API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no fórum.

Veja também