Wizualizacja harmonogramów projektów pomaga zespołom pozostać zgranymi i dotrzymywać terminów. Conholdate.Total for Java zapewnia solidny SDK, który umożliwia łatwe tworzenie wykresu Gantta w Javie przy użyciu zaledwie kilku linii kodu. W tym przewodniku zobaczysz, jak skonfigurować bibliotekę, wypełnić dane zadań w arkuszu, przekształcić wykres słupkowy skumulowany w oś czasu w stylu Gantta oraz wyeksportować wynik do Excela.

Konfiguracja Conholdate.Total dla Java

Zanim rozpoczniesz kodowanie, upewnij się, że masz zainstalowaną Javę 17 lub nowszą oraz IDE zgodne z Mavenem. Dodaj repozytorium Maven Conholdate i zależność SDK do swojego pliku 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>

Możesz również pobrać najnowsze pliki JAR bezpośrednio ze strony pobierania. Gdy SDK znajduje się w Twojej ścieżce klas, jesteś gotowy, aby rozpocząć tworzenie wykresu.

Tworzenie krok po kroku: wykres Gantta w Javie

Krok 1: Utwórz skoroszyt i wypełnij dane zadań

Wykres Gantta zbudowany w ten sposób jest w rzeczywistości wykresem słupkowym warstwowym umieszczonym na danych arkusza, więc pierwszym krokiem jest utworzenie Workbook, pobranie pierwszego Worksheet i wypełnienie nazw zadań, przesunięć początkowych oraz czasów trwania, z których wykres będzie odczytywał dane.

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

Kolumna A zawiera nazwę zadania, kolumna C zawiera liczbę dni potrzebnych na wykonanie każdego zadania, a kolumna D zawiera liczbę dni po rozpoczęciu projektu, kiedy każde zadanie się rozpoczyna. Dwie serie wykresu (przesunięcie startu i czas trwania) są odczytywane bezpośrednio z kolumn D i C.

Krok 2: Dodaj wykres słupkowy skumulowany i skonfiguruj serie

Po umieszczeniu danych, dodaj wykres BAR_STACKED do arkusza i podłącz jego serie. Seria przesunięcia początkowego przesuwa każdy pasek zadania w prawo; seria trwania rysuje widoczny pasek zadania na jej wierzchu.

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

Wykres jest zakotwiczony w arkuszu w wierszu 7, kolumnie 0 i rozciąga się na 30 wierszy oraz 10 kolumn.

Krok 3: Stylizuj wykres, aby wyglądał jak wykres Gantta

Sztuczka polegająca na tym, aby wykres słupkowy skumulowany odczytywał się jako wykres Gantta, polega na ukryciu serii offset, tak aby widoczne były tylko słupki trwania, unoszące się w odpowiedniej pozycji początkowej.

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

Krok 4: Skonfiguruj osie, legendę i rozmiar

Odwróć oś kategorii, aby pierwsze zadanie pojawiło się na górze, oznacz obie osie i wyłącz legendę, ponieważ istnieje tylko jedna istotna seria do odczytania.

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

Krok 5: Zapisz skoroszyt

Na koniec zapisz skoroszyt. SDK obsługuje XLSX, XLS oraz inne formaty wymienione w wyliczeniu SaveFormat.

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

Otwórz GanttChartResult.xlsx w Excel (lub w dowolnej kompatybilnej aplikacji arkusza kalkulacyjnego), aby zobaczyć gotowy wykres Gantta osadzony w arkuszu.

Pełny przykład kodu: Przykład wykresu Gantta w Javie

Poniższy przykład demonstruje, jak utworzyć wykres Gantta w języku Java od początku do końca.

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

Uwaga: Ten przykład kodu demonstruje podstawową funkcjonalność. Przed użyciem go w swoim projekcie upewnij się, że zaktualizowałeś wszystkie ścieżki plików i wartości konfiguracyjne, aby odpowiadały rzeczywistemu środowisku, sprawdź, czy wszystkie wymagane zależności są prawidłowo zainstalowane, oraz dokładnie przetestuj w swoim środowisku programistycznym. Jeśli napotkasz jakiekolwiek problemy, zapoznaj się z oficjalną dokumentacją lub skontaktuj się z zespołem wsparcia, aby uzyskać pomoc.

Podsumowanie

Tworzenie wykresu Gantta w Javie staje się proste dzięki Conholdate.Total for Java. Poprzez wypełnienie danych zadań w arkuszu, dodanie wykresu słupkowego skumulowanego oraz stylizowanie jego serii i osi, możesz generować profesjonalnie wyglądające harmonogramy, które znajdują się bezpośrednio w pliku Excel. Ukrycie serii offsetu początkowego przy stylizacji serii trwania to kluczowa technika, która zamienia zwykły wykres słupkowy skumulowany w wykres Gantta. Pamiętaj, że do wdrożeń produkcyjnych wymagana jest licencja komercyjna; tymczasową licencję możesz uzyskać na stronie tymczasowej licencji lub zapoznać się ze szczegółami cen na stronie z cennikiem. Zacznij integrować wykresy Gantta w swoich aplikacjach już dziś i informuj interesariuszy o jasnych wizualnych harmonogramach.

Najczęściej zadawane pytania

Jak utworzyć wykres Gantta w Javie przy użyciu Conholdate.Total?
Utwórz Workbook, dodaj wykres BAR_STACKED do arkusza i dodaj dwie serie: ukrytą serię startowego offsetu oraz widoczną serię trwania. Ustaw nazwy zadań jako dane kategorii, sformatuj widoczną serię i zapisz skoroszyt. Pełny fragment kodu znajduje się w tym artykule.

Czy mogę wyeksportować wykres Gantta do formatów innych niż Excel?
Tak. Ponieważ wykres jest osadzony w skoroszycie, możesz zapisać plik używając dowolnej wartości z wyliczenia SaveFormat, takiej jak XLSX, XLS lub ODS. Zobacz oficjalną dokumentację po pełną listę.

Jakie licencjonowanie jest wymagane do użytku produkcyjnego?
Licencja komercyjna jest obowiązkowa. Możesz zamówić tymczasową licencję na stronie tymczasowej licencji oraz sprawdzić ceny na stronie cenowej.

Jak mogę poprawić wydajność dużych wykresów Gantta?
Utrzymuj zakres danych odwoływany przez każdą serię tak wąski, jak to możliwe, unikaj niepotrzebnych przeliczeń skoroszytu i ogranicz wywołania formatowania do serii i osi, które naprawdę potrzebujesz. Utrzymanie rozsądnej liczby zadań na wykres również przyspiesza renderowanie dużych plików projektów.

Czytaj więcej