Lea el diagrama de Gantt del proyecto usando Java

MS Project es un popular software de gestión de proyectos, ampliamente utilizado para organizar, gestionar y realizar un seguimiento de las actividades de los proyectos de manera eficiente. Permite crear tareas, agregar recursos, asignar tareas a recursos, monitorear el progreso y administrar actividades relacionadas con el presupuesto. La vista de diagrama de Gantt es la vista predeterminada del proyecto. Enumera las tareas del proyecto y muestra su relación entre sí. También muestra el cronograma del proyecto usando barras de Gantt. En este artículo, aprenderemos cómo leer el diagrama de Gantt del proyecto MS usando Java.

En este artículo se tratarán los siguientes temas:

¿Qué es el diagrama de Gantt en Microsoft Project?

Un gráfico de Gantt es un tipo de gráfico de barras que muestra el cronograma del proyecto. Es una representación gráfica de las tareas del proyecto contra el tiempo y ofrece una vista panorámica de todo el proyecto. La vista de diagrama de Gantt en Microsoft Project muestra lo siguiente:

  • Cronograma del proyecto
  • Estimaciones de tiempo
  • Recursos del proyecto y miembros del equipo
  • Prioridades de tareas
  • Dependencia de tareas
Gantt Chart View of a Project in Microsoft Project.

API de Java para leer el diagrama de Gantt del proyecto

Para leer la vista de diagrama de Gantt de un proyecto del archivo MPP, usaremos la API Aspose.Tasks for Java. Permite crear, editar o manipular archivos de Microsoft Project mediante programación en aplicaciones Java. La clase Project de la API representa un proyecto. Es la clase principal que expone varios métodos para realizar diferentes funciones. También permite leer uno de los formatos de gestión de proyectos admitidos, como MPP, MPT, MPX y XML. La clase GanttChartView de la API representa una vista de diagrama de Gantt. Expone varias propiedades y métodos para trabajar con el diagrama de Gantt mediante programación.

Descargue el JAR de la API o agregue la siguiente configuración pom.xml en una aplicación Java basada en 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>

Leer vista de diagrama de Gantt y recuperar estilos de barra

La clase GanttBarStyle de la API representa un estilo de barra utilizado por MS Project en la vista de diagrama de Gantt. Podemos leer la vista del diagrama de Gantt y recuperar los estilos de barra siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cargue el archivo del proyecto utilizando la clase Project.
  2. A continuación, obtenga la vista predeterminada de ViewCollection por su índice.
  3. Luego, cree una instancia de la clase GanttChartView y la vista typecast.
  4. Opcionalmente, lea las propiedades básicas y muestre los datos.
  5. Después de eso, obtenga una lista de estilos de barra de la vista de diagrama de Gantt usando getBarStyles().
  6. Finalmente, recorra los estilos de barra como objeto de clase GanttBarStyle y muestre los valores.

El siguiente ejemplo de código muestra cómo leer estilos de barra de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    View view = project.getViews().toList().get(0);
    GanttChartView gcView = (GanttChartView) view;

    // Mostrar información básica
    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 función devuelve el nombre del 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 función devuelve el nombre de la forma media
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 función devuelve el nombre de forma inicial o 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]
-----------------------------------------------
...

Leer líneas de cuadrícula de la vista de diagrama de Gantt en Java

La clase Gridlines de la API representa líneas de cuadrícula que aparecen en una vista de diagrama de Gantt. Podemos leer el color, el intervalo, el patrón y el tipo de la línea de la cuadrícula siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cargue el archivo del proyecto utilizando la clase Project.
  2. A continuación, obtenga la vista predeterminada de ViewCollection por su índice.
  3. Luego, cree una instancia de la clase GanttChartView y la vista typecast.
  4. Después de eso, obtenga una lista de líneas de cuadrícula de la vista de diagrama de Gantt usando getGridlines().
  5. Finalmente, recorra las líneas de cuadrícula como el objeto de clase Gridlines y muestre los valores.

El siguiente ejemplo de código muestra cómo leer líneas de cuadrícula de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información de líneas de cuadrícula
    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 función devuelve el nombre del patrón de línea
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]

Extraiga el estilo de texto de la vista de diagrama de Gantt en Java

La clase TextStyle de la API representa el estilo visual del texto de un elemento en una vista de diagrama de Gantt. Podemos leer el color, el color de fondo, la fuente y el estilo de fuente siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cargue el archivo del proyecto utilizando la clase Project.
  2. A continuación, obtenga la vista predeterminada de ViewCollection por su índice.
  3. Luego, cree una instancia de la clase GanttChartView y la vista typecast.
  4. Después de eso, obtenga una lista de estilos de texto de la vista de diagrama de Gantt usando getTextStyles().
  5. Finalmente, inicialice el objeto de la clase TextStyle para el primer estilo de texto y muestre los valores.

El siguiente ejemplo de código muestra cómo leer estilos de texto de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información 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 función devuelve el nombre del estilo de fuente
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 líneas de progreso de la vista de diagrama de Gantt en Java

Las líneas de progreso aparecen en la vista Diagrama de Gantt y muestran si las tareas están atrasadas o según lo programado. Podemos leer las diversas propiedades de las líneas de progreso siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cargue el archivo del proyecto utilizando la clase Project.
  2. A continuación, obtenga la vista predeterminada de ViewCollection por su índice.
  3. Luego, cree una instancia de la clase GanttChartView y la vista typecast.
  4. Después de eso, obtenga una lista de líneas de progreso de la vista de diagrama de Gantt usando getProgressLines().
  5. Finalmente, muestre los valores de los atributos de la línea de progreso.

El siguiente ejemplo de código muestra cómo leer las líneas de progreso de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información de líneas de progreso
    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());
}

Leer el nivel de escala de tiempo inferior en Java

La escala de tiempo muestra unidades de tiempo, días, meses, año calendario o año fiscal. Hay tres niveles de escala de tiempo en la vista del proyecto para mostrar los valores de escala de tiempo para cada nivel, como recuento, unidad, etiqueta, alineación, etc. Podemos leer el nivel de escala de tiempo inferior siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cargue el archivo del proyecto utilizando la clase Project.
  2. A continuación, obtenga la vista predeterminada de ViewCollection por su índice.
  3. Luego, cree una instancia de la clase GanttChartView y la vista typecast.
  4. Después de eso, obtenga la configuración del nivel de escala de tiempo inferior de la vista usando getBottomTimescaleTier().
  5. Finalmente, muestre los valores inferiores del nivel de la escala de tiempo.

El siguiente ejemplo de código muestra cómo leer el nivel de escala de tiempo inferior de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información de nivel de escala de tiempo inferior
    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 función devuelve el nombre de la etiqueta de datos de escala de tiempo
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 función devuelve el título de la alineación
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 función devuelve el nombre de la unidad de escala de tiempo
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

Leer nivel de escala de tiempo medio en Java

De manera similar, podemos leer el nivel de escala de tiempo medio siguiendo los pasos mencionados anteriormente. Sin embargo, obtendremos la configuración del nivel de escala de tiempo medio de la vista utilizando getMiddleTimescaleTier() en el paso 4.

El siguiente ejemplo de código muestra cómo leer el nivel de escala de tiempo medio de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información de nivel de escala de tiempo medio
    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 el nivel de escala de tiempo superior en Java

También podemos leer el nivel de escala de tiempo superior siguiendo los pasos mencionados anteriormente. Sin embargo, obtendremos la configuración del nivel de escala de tiempo superior de la vista utilizando getTopTimescaleTier() en el paso 4.

El siguiente ejemplo de código muestra cómo leer el nivel de escala de tiempo superior de la vista de diagrama de Gantt en Java.

public static void main(String[] args) throws Exception
{
    // La ruta al directorio de documentos.
    String dataDir = "C:\\Files\\Tasks\\";

    // Carga el proyecto
    Project project = new Project(dataDir + "Project.mpp");

    // Obtener la vista predeterminada como GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Mostrar información de nivel de escala de tiempo 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

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido cómo

  • lea la vista del diagrama de Gantt mediante programación en Java;
  • extraiga los estilos de barra y el estilo de texto de la vista del diagrama de Gantt;
  • recuperar líneas de cuadrícula y líneas de progreso de la vista de diagrama de Gantt;
  • leer unidades de escala de tiempo de la vista de diagrama de Gantt usando Java.

Además, puede obtener más información sobre Aspose.Tasks for Java API utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en el foro.

Ver también