Javaを使用してプロジェクトのガントチャートを読む

MS Projectは人気のあるプロジェクト管理ソフトウェアであり、プロジェクトアクティビティを効率的に整理、管理、追跡するために広く使用されています。これにより、タスクの作成、リソースの追加、リソースへのタスクの割り当て、進行状況の監視、および予算関連のアクティビティの管理が可能になります。ガントチャートビューは、プロジェクトのデフォルトビューです。プロジェクトタスクを一覧表示し、それらの相互関係を示します。また、ガントバーを使用したプロジェクトのスケジュールも表示されます。この記事では、Javaを使用してMSプロジェクトのガントチャートを読み取る方法を学習します。

この記事では、次のトピックについて説明します。

MicrosoftProjectのガントチャートとは

ガントチャートは、プロジェクトのスケジュールを示す棒グラフの一種です。これは、時間に対するプロジェクトタスクのグラフィック表現であり、プロジェクト全体の鳥瞰図を提供します。 Microsoft Projectのガントチャートビューには、次のように表示されます。

  • プロジェクトスケジュール
  • 時間の見積もり
  • プロジェクトリソースとチームメンバー
  • タスクの優先順位
  • タスクの依存関係

プロジェクトのガントチャートを読み取るJavaAPI

MPPファイルからプロジェクトのガントチャートビューを読み取るには、Aspose.Tasks for JavaAPIを使用します。これにより、JavaアプリケーションでプログラムによってMicrosoft Projectファイルを作成、編集、または操作できます。 APIのProjectクラスはプロジェクトを表します。これは、さまざまな機能を実行するためのさまざまなメソッドを公開するメインクラスです。また、MPP、MPTMPXXMLなどのサポートされているプロジェクト管理形式の1つを読み取ることもできます。 APIのGanttChartViewクラスは、ガントチャートビューを表します。ガントチャートをプログラムで操作するためのさまざまなプロパティとメソッドを公開します。

APIのJARをダウンロードするか、MavenベースのJavaアプリケーションに次のpom.xml構成を追加してください。

<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クラスは、ガントチャートビューでMSProjectによって使用されるバースタイルを表します。以下の手順に従って、ガントチャートビューを読み取り、バースタイルを取得できます。

  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でガントチャートビューのグリッド線を読む

APIのGridlinesクラスは、ガントチャートビューに表示されるグリッド線を表します。以下の手順に従って、グリッド線の色、間隔、パターン、およびタイプを読み取ることができます。

  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でガントチャートビューのテキストスタイルを抽出する

APIのTextStyleクラスは、ガントチャートビューのアイテムのテキストの視覚的なスタイルを表します。以下の手順に従って、色、背景色、フォント、およびフォントスタイルを読み取ることができます。

  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の最下位タイムスケール層を読む

タイムスケールは、時間単位、日、月、暦年、または会計年度を示します。プロジェクトビューには3つのタイムスケールティアがあり、カウント、単位、ラベル、配置などの各ティアのタイムスケール値を表示します。以下の手順に従って、最下位のタイムスケールティアを読み取ることができます。

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

// この関数はAlignmentタイトルを返します
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で中間タイムスケール層を読む

同様に、前述の手順に従うことで、中間のタイムスケール層を読み取ることができます。ただし、手順4のgetMiddleTimescaleTier()を使用して、ビューの中間タイムスケール層の設定を取得します。

次のコード例は、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でトップタイムスケール層を取得する

前述の手順に従って、最上位のタイムスケール層を読み取ることもできます。ただし、手順4のgetTopTimescaleTier()を使用して、ビューの最上位のタイムスケール層の設定を取得します。

次のコード例は、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を使用してガントチャートビューのタイムスケール単位を読み取ります。

さらに、ドキュメントを使用して、JavaAPIのAspose.Tasksについて詳しく知ることができます。あいまいな点がありましたら、フォーラムまでお気軽にお問い合わせください。

関連項目