Визуализация графиков проектов помогает командам оставаться согласованными и соблюдать сроки. Conholdate.Total for Java предоставляет мощный SDK, который упрощает создание диаграммы Ганта в Java всего в несколько строк кода. В этом руководстве вы увидите, как настроить библиотеку, заполнить данные задач в листе, преобразовать сложенную столбчатую диаграмму в таймлайн в стиле Ганта и экспортировать результат в Excel.

Настройка Conholdate.Total для Java

Прежде чем начать кодировать, убедитесь, что у вас установлен Java 17 или новее и IDE, совместимая с Maven. Добавьте репозиторий Maven Conholdate и зависимость SDK в ваш 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>

Вы также можете скачать последние JAR‑файлы напрямую со страницы загрузки. Как только SDK будет в вашем classpath, вы будете готовы начать построение диаграммы.

Пошаговое создание: построение диаграммы Ганта на Java

Шаг 1: Создать рабочую книгу и заполнить данные задач

Диаграмма Ганта, построенная таким образом, на самом деле является сложенной столбчатой диаграммой, наложенной на данные листа, поэтому первым шагом является создание Workbook, получение первого Worksheet и заполнение названий задач, начальных смещений и длительностей, из которых будет считывать диаграмма.

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);

Столбец A содержит название задачи, столбец C содержит количество дней, необходимое для выполнения каждой задачи, а столбец D содержит количество дней после начала проекта, когда начинается каждая задача. Две серии диаграммы (смещение начала и продолжительность) считываются напрямую из столбцов D и C.

Шаг 2: Добавьте сложенную столбчатую диаграмму и настройте серии

С данными на месте добавьте диаграмму BAR_STACKED на лист и настройте её серии. Серия смещения начала сдвигает каждую полосу задачи вправо; серия длительности рисует видимую полосу задачи поверх неё.

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");

Диаграмма привязана к листу в строке 7, столбце 0, и охватывает 30 строк и 10 столбцов.

Шаг 3: Оформите диаграмму, чтобы она выглядела как диаграмма Ганта

Трюк, позволяющий отображать сложенную гистограмму как диаграмму Ганта, заключается в том, чтобы сделать серию смещения невидимой, чтобы отображались только полосы длительности, плавающие в правильной начальной позиции.

// 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);

Шаг 4: Настройка осей, легенды и размера

Поверните ось категорий так, чтобы первая задача была вверху, подпишите обе оси и отключите легенду, так как есть только одна значимая серия для чтения.

// 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);

Шаг 5: Сохранить рабочую книгу

Наконец, сохраните рабочую книгу. SDK поддерживает XLSX, XLS и другие форматы, перечисленные в перечислении SaveFormat.

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

Откройте GanttChartResult.xlsx в Excel (или в любом совместимом приложении для работы с таблицами), чтобы увидеть готовую диаграмму Ганта, встроенную в лист.

Полный пример кода: пример диаграммы Ганта на Java

В следующем примере демонстрируется, как создать диаграмму Ганта на Java от начала до конца.

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);
    }
}

Примечание: Этот пример кода демонстрирует основную функциональность. Прежде чем использовать его в вашем проекте, убедитесь, что обновили все пути к файлам и значения конфигурации в соответствии с вашей реальной средой, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если вы столкнётесь с какими‑либо проблемами, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.

Заключение

Создание диаграммы Ганта в Java становится простым с Conholdate.Total for Java. Заполняя данные задач в листе, добавляя сложенную столбчатую диаграмму и оформляя её серии и оси, вы можете генерировать профессионально выглядящие временные шкалы, которые находятся непосредственно внутри файла Excel. Скрытие серии смещения начала при оформлении серии длительности — ключевая техника, превращающая обычную сложенную столбчатую диаграмму в диаграмму Ганта. Помните, что для развертывания в продакшн требуется коммерческая лицензия; временную лицензию можно получить на temporary license page или изучить детали ценообразования на pricing page. Начните интегрировать диаграммы Ганта в свои приложения уже сегодня и держите заинтересованных сторон в курсе с помощью понятных визуальных расписаний.

Часто задаваемые вопросы

Как создать диаграмму Ганта в Java с использованием Conholdate.Total?
Создайте Workbook, добавьте диаграмму BAR_STACKED на лист, и добавьте две серии: скрытую серию смещения начала и видимую серию длительности. Установите имена задач как данные категорий, оформите видимую серию и сохраните книгу. Полный фрагмент кода предоставлен в этой статье.

Могу ли я экспортировать диаграмму Ганта в форматы, отличные от Excel?
Да. Поскольку диаграмма встроена в рабочую книгу, вы можете сохранить файл, используя любое значение из перечисления SaveFormat, например XLSX, XLS или ODS. См. официальную документацию для полного списка.

Какой тип лицензии требуется для использования в продакшене?
Коммерческая лицензия обязательна. Вы можете запросить временную лицензию на странице временной лицензии и ознакомиться с ценами на странице с ценами.

Как я могу улучшить производительность больших диаграмм Ганта?
Сохраняйте диапазон данных, используемый каждой серией, как можно более узким, избегайте ненужных перерасчетов книги и ограничьте вызовы форматирования только теми сериями и осями, которые действительно нужны. Поддержание разумного количества задач на одну диаграмму также ускоряет рендеринг больших файлов проектов.

Читать далее