Прочитайте диаграмму Ганта проекта с использованием Java

MS Project — это популярное программное обеспечение для управления проектами, широко используемое для эффективной организации, управления и отслеживания проектной деятельности. Это позволяет создавать задачи, добавлять ресурсы, распределять задачи по ресурсам, отслеживать ход выполнения и управлять действиями, связанными с бюджетом. Представление диаграммы Ганта — это представление проекта по умолчанию. В нем перечислены задачи проекта и показана их связь друг с другом. Он также показывает график проекта с использованием диаграмм Ганта. В этой статье мы научимся читать диаграмму Ганта проекта MS с помощью Java.

В этой статье должны быть раскрыты следующие темы:

Что такое диаграмма Ганта в Microsoft Project

Диаграмма Ганта — это тип гистограммы, показывающий расписание проекта. Это графическое представление задач проекта в зависимости от времени, которое позволяет увидеть весь проект с высоты птичьего полета. Представление диаграммы Ганта в Microsoft Project показывает следующее:

  • Расписание проекта
  • Оценки времени
  • Ресурсы проекта и члены команды
  • Приоритеты задач
  • Зависимость от задачи
Gantt Chart View of a Project in Microsoft Project.

Gantt Chart View of a Project in Microsoft Project.

Java API для чтения диаграммы Ганта проекта

Для чтения диаграммы Ганта проекта из файла MPP мы будем использовать API Aspose.Tasks for Java. Он позволяет программно создавать, редактировать или управлять файлами Microsoft Project в приложениях Java. Класс Project API представляет собой проект. Это основной класс, предоставляющий различные методы для выполнения различных функций. Он также позволяет читать один из поддерживаемых форматов управления проектами, таких как MPP, MPT, MPX и XML. Класс GanttChartView API представляет представление диаграммы Ганта. Он предоставляет различные свойства и методы для работы с диаграммой Ганта программно.

Пожалуйста, либо скачайте JAR API, либо добавьте следующую конфигурацию pom.xml в приложение Java на основе 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>

Чтение диаграммы Ганта и получение стилей столбцов

Класс API GanttBarStyle представляет стиль столбцов, используемый MS Project в представлении диаграммы Ганта. Мы можем прочитать представление диаграммы Ганта и получить стили столбцов, выполнив следующие шаги:

  1. Во-первых, загрузите файл проекта с помощью класса Project.
  2. Затем получите представление по умолчанию из ViewCollection по его индексу.
  3. Затем создайте экземпляр класса GanttChartView и представление типа.
  4. При желании можно прочитать основные свойства и показать данные.
  5. После этого получите список стилей столбцов представления диаграммы Ганта с помощью getBarStyles().
  6. Наконец, прокрутите стили полос как объект класса GanttBarStyle и покажите значения.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    View view = project.getViews().toList().get(0);
    GanttChartView gcView = (GanttChartView) view;

    // Показать основную информацию
    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("-----------------------------------------------");

    // Показать стили баров
    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("-----------------------------------------------");
    }
}

// Эта функция возвращает имя поля
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;
}

// Эта функция возвращает имя средней формы
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;
}

// Эта функция возвращает имя начальной или конечной формы
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]
-----------------------------------------------
...

Прочитайте линии сетки представления диаграммы Ганта в Java

Класс Gridlines API представляет линии сетки, которые отображаются в представлении диаграммы Ганта. Мы можем прочитать цвет, интервал, шаблон и тип линии сетки, выполнив следующие шаги:

  1. Во-первых, загрузите файл проекта с помощью класса Project.
  2. Затем получите представление по умолчанию из ViewCollection по его индексу.
  3. Затем создайте экземпляр класса GanttChartView и представление типа.
  4. После этого получите список линий сетки представления диаграммы Ганта, используя getGridlines().
  5. Наконец, прокрутите линии сетки как объект класса Gridlines и покажите значения.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию о линиях сетки
    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());
}

// Эта функция возвращает имя шаблона линии
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]

Извлечь текстовый стиль представления диаграммы Ганта в Java

Класс TextStyle API представляет визуальный стиль текста для элемента в представлении диаграммы Ганта. Мы можем прочитать цвет, цвет фона, шрифт и стиль шрифта, выполнив следующие шаги:

  1. Во-первых, загрузите файл проекта с помощью класса Project.
  2. Затем получите представление по умолчанию из ViewCollection по его индексу.
  3. Затем создайте экземпляр класса GanttChartView и представление типа.
  4. После этого получите список текстовых стилей представления диаграммы Ганта с помощью getTextStyles().
  5. Наконец, инициализируйте объект класса TextStyle для первого текстового стиля и покажите значения.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию о стиле текста
    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()));
}

// Эта функция возвращает имя стиля шрифта
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

Получить линии прогресса представления диаграммы Ганта в Java

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

  1. Во-первых, загрузите файл проекта с помощью класса Project.
  2. Затем получите представление по умолчанию из ViewCollection по его индексу.
  3. Затем создайте экземпляр класса GanttChartView и представление типа.
  4. После этого получите список строк прогресса представления диаграммы Ганта с помощью getProgressLines().
  5. Наконец, покажите значения атрибутов строки прогресса.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию о строках прогресса
    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());
}

Чтение нижнего уровня шкалы времени в Java

Шкала времени показывает единицы времени, дни, месяцы, календарный год или финансовый год. В представлении проекта есть три уровня шкалы времени, чтобы показать значения шкалы времени для каждого уровня, такие как количество, единица измерения, метка, выравнивание и т. д. Мы можем прочитать нижний уровень шкалы времени, выполнив шаги, указанные ниже:

  1. Во-первых, загрузите файл проекта с помощью класса Project.
  2. Затем получите представление по умолчанию из ViewCollection по его индексу.
  3. Затем создайте экземпляр класса GanttChartView и представление типа.
  4. После этого получите настройки нижнего уровня шкалы времени представления с помощью getBottomTimescaleTier().
  5. Наконец, покажите значения нижнего уровня временной шкалы.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию о нижнем уровне шкалы времени
    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()));
}

// Эта функция возвращает имя метки данных шкалы времени.
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;
}

// Эта функция возвращает заголовок выравнивания
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;
}

// Эта функция возвращает имя единицы шкалы времени
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

Чтение среднего уровня шкалы времени в Java

Точно так же мы можем прочитать средний уровень шкалы времени, выполнив шаги, упомянутые ранее. Однако мы получим настройки среднего уровня шкалы времени представления, используя getMiddleTimescaleTier() на шаге 4.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию об уровне средней временной шкалы
    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

Получить верхний уровень шкалы времени в Java

Мы также можем прочитать верхний уровень шкалы времени, выполнив шаги, упомянутые ранее. Однако мы получим настройки верхнего уровня временной шкалы представления, используя getTopTimescaleTier() на шаге 4.

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

public static void main(String[] args) throws Exception
{
    // Путь к каталогу документов.
    String dataDir = "C:\\Files\\Tasks\\";

    // Загрузить проект
    Project project = new Project(dataDir + "Project.mpp");

    // Получите представление по умолчанию как GanttChartView
    GanttChartView gcView = (GanttChartView) project.getViews().toList().get(0);

    // Показать информацию об уровне верхней временной шкалы
    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

Получить бесплатную лицензию

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

Вывод

В этой статье мы узнали, как

  • читать представление диаграммы Ганта программно на Java;
  • извлечь стили столбцов диаграммы Ганта и стиль текста;
  • получить линии сетки и линии прогресса представления диаграммы Ганта;
  • читать единицы шкалы времени представления диаграммы Ганта с использованием Java.

Кроме того, вы можете узнать больше об Aspose.Tasks for Java API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на форуме.

Смотрите также