なにか作る

なにかを作るブログです。

Microsoft Project のファイルを扱うための MPXJ ライブラリを使ってみた

MPXJ ってなに

Excel のデータが POI ライブラリによって操作できるように、Microsoft Project のデータを変更するためのライブラリもこの世にはある。その一つが MPXJ だ。

MPXJ - Microsoft Project Exchange

調べた限りだと、無償のライブラリはこれしかなさそう。

  • Microsoft Project ファイルに限らず、Primavera など他の形式にも対応。
  • Java で実装されているが、IKVM の技術を使っているので .NET でも使えるよ、ということを謳っている。
  • 対応している主要なファイル形式
    • mpp : 通常の Project 用のファイル形式
    • mpx : 古い Project 用(~Project 98)のファイル形式
    • xml : 他のアプリケーションとのインポートやエクスポートに使用するファイル形式。

覚えておきたい

  • mpp ファイルは書き込み不可。解析が超大変のようでライブラリでのサポートは断念したらしい。
    • 正直これは痛いけれど、仕方ない…。
  • POI ライブラリに依存。
  • Maven Central に登録してあるけど、公式のものじゃないらしい。Nuget にあるのは公式。

コード例

ファイルの操作

// ゼロから作成
ProjectFile file1 = new ProjectFile();

// ファイルの読み込み
ProjectReader reader = new MPPReader();
ProjectFile file2 = reader.read(inputStream);

// ファイルの書き込み
ProjectWriter writer = new MSPDIWriter();
writer.write(file2, outputStream);

タスクの操作

// タスクの追加
Task task = projectFile.addTask();

// タスクの属性の設定
task.setName("ER図作成"); // タスク名
task.setDuration(Duration.getInstance(1, TimeUnits.DAYS));

// タスクの親子関係の設定
Task taskParent = projectFile.addTask();
Task taskChild = projectFile.addTask();
taskParentChild.addChildTask(taskChild);