Visualizar las líneas de tiempo de los proyectos ayuda a los equipos a mantenerse alineados y cumplir con los plazos. Conholdate.Total for Java proporciona un SDK robusto que facilita la creación de un diagrama de Gantt en Java con solo unas pocas líneas de código. En esta guía verás cómo configurar la biblioteca, poblar los datos de tareas en una hoja de cálculo, convertir un gráfico de barras apiladas en una línea de tiempo al estilo Gantt y exportar el resultado a Excel.

Configuración de Conholdate.Total for Java

Antes de comenzar a programar, asegúrate de tener Java 17 o una versión posterior y un IDE compatible con Maven. Añade el repositorio Maven de Conholdate y la dependencia del SDK a tu pom.xml:

<repositories>
    <repository>
        <id>conholdate-repo</id>
        <name>Conholdate Maven Repository</name>
        <url>https://repository.conholdate.com/repo/</url>
    </repository>
</repositories>
<dependency>
    <groupId>com.conholdate</groupId>
    <artifactId>conholdate-total</artifactId>
    <version>24.9</version>
    <type>pom</type>
</dependency>

También puedes descargar los últimos JARs directamente desde la página de descarga. Una vez que el SDK está en tu classpath, estás listo para comenzar a crear el gráfico.

Construyéndolo paso a paso: crear un diagrama de Gantt en Java

Paso 1: Crear el libro de trabajo y rellenar los datos de la tarea

Un diagrama de Gantt construido de esta manera es realmente un gráfico de barras apiladas superpuesto a los datos de la hoja de cálculo, por lo que el primer paso es crear el Workbook, obtener la primera Worksheet y rellenar los nombres de las tareas, los desplazamientos de inicio y las duraciones que el gráfico leerá.

com.aspose.cells.Workbook workbook = new com.aspose.cells.Workbook();
com.aspose.cells.Worksheet sheet = workbook.getWorksheets().get(0);

com.aspose.cells.Cells cells = sheet.getCells();
cells.get("A1").putValue("Task");
cells.get("C1").putValue("Duration (Days)");
cells.get("D1").putValue("Start Offset (Days)");

cells.get("A2").putValue("Requirement Analysis");
cells.get("C2").putValue(5);
cells.get("D2").putValue(0);

cells.get("A3").putValue("Design");
cells.get("C3").putValue(7);
cells.get("D3").putValue(5);

cells.get("A4").putValue("Implementation");
cells.get("C4").putValue(24);
cells.get("D4").putValue(12);

cells.get("A5").putValue("Testing");
cells.get("C5").putValue(15);
cells.get("D5").putValue(36);

cells.get("A6").putValue("Deployment");
cells.get("C6").putValue(2);
cells.get("D6").putValue(51);

Columna A contiene el nombre de la tarea, la columna C contiene cuántos días lleva cada tarea y la columna D contiene cuántos días después del inicio del proyecto comienza cada tarea. Las dos series del gráfico (desplazamiento de inicio y duración) se leen directamente de las columnas D y C.

Paso 2: Añadir un gráfico de barras apiladas y configurar la serie

Con los datos en su lugar, agregue un gráfico BAR_STACKED a la hoja de cálculo y configure sus series. La serie de desplazamiento inicial empuja cada barra de tarea hacia la derecha; la serie de duración dibuja la barra de tarea visible encima de ella.

int chartIndex = sheet.getCharts().add(com.aspose.cells.ChartType.BAR_STACKED, 7, 0, 30, 10);
com.aspose.cells.Chart chart = sheet.getCharts().get(chartIndex);
chart.getTitle().setText("Gantt Chart");

// Add offset and duration as series
chart.getNSeries().add("D2:D6", true); // Start Offset
chart.getNSeries().add("C2:C6", true); // Duration

// Set task names as categories
chart.getNSeries().setCategoryData("A2:A6");

El gráfico está anclado a la hoja de cálculo en la fila 7, columna 0, y abarca 30 filas por 10 columnas.

Paso 3: Estilizar el gráfico para que parezca un diagrama de Gantt

El truco para que un gráfico de barras apiladas se lea como un diagrama de Gantt es hacer que la serie de desplazamiento sea invisible, de modo que solo se muestren las barras de duración, flotando en la posición de inicio correcta.

// Make offset bars invisible
chart.getNSeries().get(0).getArea().setFormatting(com.aspose.cells.FormattingType.NONE);

// Style duration bars
chart.getNSeries().get(1).getArea().setFormatting(com.aspose.cells.FormattingType.CUSTOM);
chart.getNSeries().get(1).getArea().setForegroundColor(com.aspose.cells.Color.getSteelBlue());
chart.getNSeries().get(1).getDataLabels().setShowValue(true);

Paso 4: Configurar ejes, leyenda y tamaño

Invierte el eje de categorías para que la primera tarea aparezca en la parte superior, etiqueta ambos ejes y desactiva la leyenda, ya que solo hay una serie significativa que leer.

// Axis settings
chart.getCategoryAxis().setPlotOrderReversed(true);
chart.getCategoryAxis().getTitle().setText("Tasks");
chart.getValueAxis().getTitle().setText("Days from Start");
chart.getValueAxis().getMajorGridLines().setVisible(true);

// Hide legend
chart.setShowLegend(false);

// Resize chart
chart.getChartObject().setWidth(700);
chart.getChartObject().setHeight(400);

Paso 5: Guardar el libro de trabajo

Finalmente, guarde el libro de trabajo. El SDK admite XLSX, XLS y otros formatos enumerados en el enum SaveFormat.

// Save the result
workbook.save("GanttChartResult.xlsx", com.aspose.cells.SaveFormat.XLSX);

Abra GanttChartResult.xlsx en Excel (o cualquier aplicación de hoja de cálculo compatible) para ver el diagrama de Gantt final incrustado en la hoja de cálculo.

Ejemplo completo de código: Ejemplo de diagrama de Gantt en Java

El siguiente ejemplo muestra cómo crear un diagrama de Gantt en Java de principio a fin.

public class GanttChartDemo {
    public static void main(String[] args) {
        // Create the workbook and get the first worksheet
        com.aspose.cells.Workbook workbook = new com.aspose.cells.Workbook();
        com.aspose.cells.Worksheet sheet = workbook.getWorksheets().get(0);

// Populate task names, durations, and start offsets
        com.aspose.cells.Cells cells = sheet.getCells();
        cells.get("A1").putValue("Task");
        cells.get("C1").putValue("Duration (Days)");
        cells.get("D1").putValue("Start Offset (Days)");

cells.get("A2").putValue("Requirement Analysis");
        cells.get("C2").putValue(5);
        cells.get("D2").putValue(0);

cells.get("A3").putValue("Design");
        cells.get("C3").putValue(7);
        cells.get("D3").putValue(5);

cells.get("A4").putValue("Implementation");
        cells.get("C4").putValue(24);
        cells.get("D4").putValue(12);

cells.get("A5").putValue("Testing");
        cells.get("C5").putValue(15);
        cells.get("D5").putValue(36);

cells.get("A6").putValue("Deployment");
        cells.get("C6").putValue(2);
        cells.get("D6").putValue(51);

// Add a stacked bar chart that will act as the Gantt chart
        int chartIndex = sheet.getCharts().add(com.aspose.cells.ChartType.BAR_STACKED, 7, 0, 30, 10);
        com.aspose.cells.Chart chart = sheet.getCharts().get(chartIndex);
        chart.getTitle().setText("Gantt Chart");

// Add offset and duration as series
        chart.getNSeries().add("D2:D6", true); // Start Offset
        chart.getNSeries().add("C2:C6", true); // Duration

// Set task names as categories
        chart.getNSeries().setCategoryData("A2:A6");

// Make offset bars invisible
        chart.getNSeries().get(0).getArea().setFormatting(com.aspose.cells.FormattingType.NONE);

// Style duration bars
        chart.getNSeries().get(1).getArea().setFormatting(com.aspose.cells.FormattingType.CUSTOM);
        chart.getNSeries().get(1).getArea().setForegroundColor(com.aspose.cells.Color.getSteelBlue());
        chart.getNSeries().get(1).getDataLabels().setShowValue(true);

// Axis settings
        chart.getCategoryAxis().setPlotOrderReversed(true);
        chart.getCategoryAxis().getTitle().setText("Tasks");
        chart.getValueAxis().getTitle().setText("Days from Start");
        chart.getValueAxis().getMajorGridLines().setVisible(true);

// Hide legend
        chart.setShowLegend(false);

// Resize chart
        chart.getChartObject().setWidth(700);
        chart.getChartObject().setHeight(400);

// Save the result
        workbook.save("GanttChartResult.xlsx", com.aspose.cells.SaveFormat.XLSX);
    }
}

Nota: Este ejemplo de código demuestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar cualquier ruta de archivo y valores de configuración para que coincidan con su entorno real, verifique que todas las dependencias requeridas estén correctamente instaladas y pruebe exhaustivamente en su entorno de desarrollo. Si encuentra algún problema, consulte la documentación oficial o póngase en contacto con el equipo de soporte para obtener ayuda.

Conclusión

Crear un diagrama de Gantt en Java se vuelve sencillo con Conholdate.Total for Java. Al poblar los datos de tareas en una hoja de cálculo, agregar un gráfico de barras apiladas y dar estilo a sus series y ejes, puedes generar cronogramas de aspecto profesional que viven directamente dentro de un archivo de Excel. Ocultar la serie de desplazamiento inicial mientras se da estilo a la serie de duración es la técnica clave que convierte un gráfico de barras apiladas ordinario en un diagrama de Gantt. Recuerda que se requiere una licencia comercial para implementaciones en producción; puedes obtener una licencia temporal en la página de licencia temporal o explorar los detalles de precios en la página de precios. Comienza a integrar diagramas de Gantt en tus aplicaciones hoy y mantén a tus partes interesadas informadas con horarios visuales claros.

Preguntas frecuentes

¿Cómo crear un diagrama de Gantt en Java usando Conholdate.Total?
Crear un Workbook, agregar un gráfico BAR_STACKED a una hoja de cálculo y añadir dos series: una serie oculta de desplazamiento inicial y una serie visible de duración. Establecer los nombres de las tareas como datos de categoría, dar estilo a la serie visible y guardar el libro de trabajo. El fragmento de código completo se proporciona en este artículo.

¿Puedo exportar el diagrama de Gantt a formatos diferentes de Excel?
Sí. Dado que el diagrama está incrustado en un libro de trabajo, puedes guardar el archivo usando cualquier valor del enumerado SaveFormat, como XLSX, XLS o ODS. Consulta la documentación oficial para obtener la lista completa.

¿Qué licencia se requiere para uso en producción?
Una licencia comercial es obligatoria. Puedes solicitar una licencia temporal en la página de licencia temporal y revisar los precios en la página de precios.

¿Cómo puedo mejorar el rendimiento de los diagramas de Gantt grandes?
Mantenga el rango de datos referenciado por cada serie lo más estrecho posible, evite la recalculación innecesaria del libro de trabajo y limite las llamadas de formato a las series y ejes que realmente necesita. Mantener un número razonable de tareas por gráfico también mantiene una renderización rápida en archivos de proyecto grandes.

Leer más