Przeczytaj wykres Gantta projektu przy użyciu języka Java

MS Project to popularne oprogramowanie do zarządzania projektami, szeroko stosowane do wydajnego organizowania, zarządzania i śledzenia działań projektowych. Umożliwia tworzenie zadań, dodawanie zasobów, przydzielanie zadań do zasobów, monitorowanie postępów oraz zarządzanie działaniami związanymi z budżetem. Widok wykresu Gantta jest domyślnym widokiem projektu. Zawiera listę zadań projektu i pokazuje ich wzajemne relacje. Pokazuje również harmonogram projektu za pomocą pasków Gantta. W tym artykule nauczymy się czytać wykres Gantta projektu MS za pomocą Javy.

W tym artykule zostaną omówione następujące tematy:

Co to jest wykres Gantta w programie Microsoft Project

Wykres Gantta to rodzaj wykresu słupkowego, który przedstawia harmonogram projektu. Jest to graficzne przedstawienie zadań projektowych w czasie i oferuje widok z lotu ptaka na cały projekt. Widok wykresu Gantta w programie Microsoft Project zawiera następujące informacje:

  • Harmonogram projektu
  • Szacunki czasowe
  • Zasoby projektu i członkowie zespołu
  • Priorytety zadań
  • Zależność zadania

Java API do odczytu wykresu Gantta projektu

Do odczytania widoku wykresu Gantta Projektu z pliku MPP będziemy używać API Aspose.Tasks for Java. Umożliwia programowe tworzenie, edytowanie lub manipulowanie plikami Microsoft Project w aplikacjach Java. Klasa Project interfejsu API reprezentuje projekt. Jest to główna klasa eksponująca różne metody wykonywania różnych funkcji. Umożliwia również odczyt jednego z obsługiwanych formatów zarządzania projektami, takich jak MPP, MPT, MPX i XML. Klasa GanttChartView interfejsu API reprezentuje widok wykresu Gantta. Udostępnia różne właściwości i metody do programowej pracy z wykresem Gantta.

Pobierz plik JAR interfejsu API lub dodaj następującą konfigurację pom.xml w aplikacji Java opartej na 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>

Odczytywanie widoku wykresu Gantta i pobieranie stylów słupków

Klasa GanttBarStyle interfejsu API reprezentuje styl słupkowy używany przez program MS Project w widoku wykresu Gantta. Możemy odczytać widok wykresu Gantta i pobrać style słupków, wykonując poniższe czynności:

  1. Najpierw załaduj plik projektu przy użyciu klasy Project.
  2. Następnie pobierz domyślny widok z ViewCollection według jego indeksu.
  3. Następnie utwórz instancję klasy GanttChartView i widok rzutowania typów.
  4. Opcjonalnie przeczytaj podstawowe właściwości i pokaż dane.
  5. Następnie uzyskaj listę stylów słupków widoku wykresu Gantta za pomocą getBarStyles().
  6. Na koniec przejrzyj style słupków jako obiekt klasy GanttBarStyle i pokaż wartości.

Poniższy przykład kodu pokazuje, jak odczytywać style słupków widoku wykresu Gantta w języku Java.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    View view = project.getViews().toList().get(0);
    GanttChartView gcView = (GanttChartView) view;

    // Pokaż podstawowe informacje
    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("-----------------------------------------------");

    // Pokaż style pasków
   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("-----------------------------------------------");
    }
}

// Ta funkcja zwraca nazwę pola
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;
}

// Ta funkcja zwraca nazwę środkowego kształtu
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;
}

// Ta funkcja zwraca nazwę kształtu początkowego lub końcowego
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]
-----------------------------------------------
...

Przeczytaj linie siatki widoku wykresu Gantta w Javie

Klasa Gridlines interfejsu API reprezentuje linie siatki, które pojawiają się w widoku wykresu Gantta. Możemy odczytać kolor, odstęp, wzór i typ linii siatki, wykonując poniższe czynności:

  1. Najpierw załaduj plik projektu przy użyciu klasy Project.
  2. Następnie pobierz domyślny widok z ViewCollection według jego indeksu.
  3. Następnie utwórz instancję klasy GanttChartView i widok rzutowania typów.
  4. Następnie uzyskaj listę linii siatki widoku wykresu Gantta za pomocą getGridlines().
  5. Na koniec przejdź przez linie siatki jako obiekt klasy Gridlines i pokaż wartości.

Poniższy przykład kodu pokazuje, jak odczytywać linie siatki widoku wykresu Gantta w Javie.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o liniach siatki
    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());
}

// Ta funkcja zwraca nazwę wzoru linii
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]

Wyodrębnij styl tekstu widoku wykresu Gantta w Javie

Klasa TextStyle interfejsu API reprezentuje wizualny styl tekstu elementu w widoku wykresu Gantta. Możemy odczytać kolor, kolor tła, czcionkę i styl czcionki, wykonując poniższe czynności:

  1. Najpierw załaduj plik projektu przy użyciu klasy Project.
  2. Następnie pobierz domyślny widok z ViewCollection według jego indeksu.
  3. Następnie utwórz instancję klasy GanttChartView i widok rzutowania typów.
  4. Następnie uzyskaj listę stylów tekstu widoku wykresu Gantta za pomocą getTextStyles().
  5. Na koniec zainicjuj obiekt klasy TextStyle dla pierwszego stylu tekstu i pokaż wartości.

Poniższy przykład kodu pokazuje, jak odczytywać style tekstu widoku wykresu Gantta w Javie.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o stylu tekstu
    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()));
}

// Ta funkcja zwraca nazwę stylu czcionki
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

Odzyskaj linie postępu widoku wykresu Gantta w Javie

Linie postępu pojawiają się w widoku Wykres Gantta, pokazując, czy zadania są opóźnione, czy zgodne z harmonogramem. Możemy odczytać różne właściwości linii postępu, wykonując poniższe czynności:

  1. Najpierw załaduj plik projektu przy użyciu klasy Project.
  2. Następnie pobierz domyślny widok z ViewCollection według jego indeksu.
  3. Następnie utwórz instancję klasy GanttChartView i widok rzutowania typów.
  4. Następnie uzyskaj listę linii postępu widoku wykresu Gantta za pomocą getProgressLines().
  5. Na koniec pokaż wartości atrybutów linii postępu.

Poniższy przykład kodu pokazuje, jak odczytywać wiersze postępu widoku wykresu Gantta w Javie.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o liniach postępu
    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());
}

Odczyt dolnej warstwy skali czasu w Javie

Skala czasu pokazuje jednostki czasu, dni, miesiące, rok kalendarzowy lub rok obrachunkowy. W widoku projektu są trzy poziomy skali czasu, które pokazują wartości skali czasu dla każdego poziomu, takie jak liczba, jednostka, etykieta, wyrównanie itp. Dolny poziom skali czasu możemy odczytać, wykonując poniższe czynności:

  1. Najpierw załaduj plik projektu przy użyciu klasy Project.
  2. Następnie pobierz domyślny widok z ViewCollection według jego indeksu.
  3. Następnie utwórz instancję klasy GanttChartView i widok rzutowania typów.
  4. Następnie pobierz ustawienia dolnej warstwy skali czasu widoku za pomocą getBottomTimescaleTier().
  5. Na koniec Pokaż wartości dolnej warstwy skali czasu.

Poniższy przykład kodu pokazuje, jak odczytać dolną warstwę skali czasu widoku wykresu Gantta w języku Java.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o najniższym poziomie skali czasu
    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()));
}

// Ta funkcja zwraca nazwę etykiety danych skali czasu
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;
}

// Ta funkcja zwraca tytuł linii trasowania
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;
}

// Ta funkcja zwraca nazwę jednostki skali czasu
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

Przeczytaj warstwę środkowej skali czasu w Javie

Podobnie możemy odczytać środkowy poziom skali czasu, wykonując kroki wspomniane wcześniej. Jednak ustawienia środkowej warstwy skali czasu widoku uzyskamy za pomocą getMiddleTimescaleTier() w kroku 4.

Poniższy przykład kodu pokazuje, jak odczytać warstwę środkowej skali czasu widoku wykresu Gantta w języku Java.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o środkowym poziomie skali czasu
    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

Odzyskaj najwyższy poziom skali czasu w Javie

Możemy również odczytać najwyższy poziom skali czasu, wykonując kroki wspomniane wcześniej. Jednak ustawienia najwyższego poziomu skali czasu widoku uzyskamy za pomocą getTopTimescaleTier() w kroku 4.

Poniższy przykład kodu pokazuje, jak odczytać górną warstwę skali czasu widoku wykresu Gantta w języku Java.

public static void main(String[] args) throws Exception
{
    // Ścieżka do katalogu dokumentów.
    String dataDir = "C:\\Files\\Tasks\\";

    // Załaduj projekt
    Project project = new Project(dataDir + "Project.mpp");

    // Pobierz domyślny widok jako GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Pokaż informacje o najwyższym poziomie skali czasu
    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

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby wypróbować bibliotekę bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule dowiedzieliśmy się, jak to zrobić

  • czytać widok wykresu Gantta programowo w Javie;
  • wyodrębnić style słupkowe widoku wykresu Gantta i styl tekstu;
  • pobierać linie siatki i linie postępu widoku wykresu Gantta;
  • odczytywanie jednostek skali czasu widoku wykresu Gantta przy użyciu języka Java.

Poza tym możesz dowiedzieć się więcej o Aspose.Tasks for Java API korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na forum.

Zobacz też