MPXJというMicrosoft Projectのファイルへアクセスするためのライブラリを試してみました。MPXJは以下のファイル形式に対応しています。
- Microsoft Project Exchange (MPX)
- Microsoft Project (MPP,MPT)
- Microsoft Project Data Interchange (MSPDI XML)
- Microsoft Project Database (MPD),Planner (XML).
MPXJはJavaで書かれているのですがIKVMにより.NETからも使うことができます。
インストールと設定
- Browse MPXJ: Microsoft Project Exchange Files on SourceForge.netからmpxj-3.1.0.zipをダウンロードし、任意のディレクトリへ展開する。
- 展開後lib.netディレクトリにある以下のファイルをVisual Studioのプロジェクトから参照できるように設定する。
- IKVM.OpenJDK.ClassLibrary.dll
- IKVM.Runtime.dll
- mpxj.dll
- poi-3.2-FINAL-20081019.dll
- MPXJのクラスリファレンスはOverview (MPXJ API)を参照
これだけ。サンプルとしてこんなコードを書いてみました。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using net.sf.mpxj;
using net.sf.mpxj.reader;
using net.sf.mpxj.writer;
namespace MPXJTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
OpenProjectFile(openFileDialog1.FileName);
}
private void OpenProjectFile(string fileName)
{
ProjectReader reader = ProjectReaderUtility.getProjectReader(fileName);
ProjectFile projectFile = reader.read(fileName);
ProjectHeader projectHeader = projectFile.getProjectHeader();
textBox1.Text = "プロジェクト名: " + projectHeader.getProjectTitle();
textBox1.Text += "\r\nプロジェクト開始日: " + projectHeader.getStartDate();
textBox1.Text += "\r\nプロジェクト終了日: " + projectHeader.getFinishDate();
textBox1.Text += "\r\n担当者";
foreach (Resource resource in projectFile.getAllResources().toArray())
textBox1.Text += "\r\n" + resource.getID() + ": " + resource.getName();
textBox1.Text += "\r\nタスク";
foreach (Task task in projectFile.getAllTasks().toArray())
textBox1.Text += "\r\n" + GetTaskLevelIndent(task) + task.getName();
}
private string GetTaskLevelIndent(Task task)
{
string level = "";
while ((task = task.getParentTask()) != null)
level += "|--";
return level;
}
}
}
このコードは指定されたMicrosoft Projectのファイルからプロジェクト名、プロジェクト開始日、プロジェクト終了日、担当者一覧、タスク一覧をテキストボックスへ出力するものです。
マイクロソフトのWebサイトで提供しているベンダーに対する提案依頼書の要請 – テンプレート – Microsoft Office Onlineを読み込んだ結果はこちら。
プロジェクト名: プロジェクト開始日: Mon Jan 01 08:00:00 GMT 2007 プロジェクト終了日: Thu Feb 01 12:00:00 GMT 2007 担当者 0: 1: 購買マネージャ 2: ユーザー チーム 3: 評価委員会 4: 意思決定グループ タスク ベンダーに対する提案依頼書 (RFP) の要請 |--このテンプレートの目的を説明するメモを読む |--RFP の基準 |--|--RFP 作成の正式なプロセスが必要かどうかを判断する基準のレビュー |--|--購買担当に RFP を作成する必要があることについて通知 |--RFP 要請プロセス |--|--要求の定義 |--|--|--製品とサービスのニーズを理解するためにユーザーにインタビュー |--|--|--要求の文書化 |--|--|--回答の評価基準の定義 |--|--|--評価チームの特定 |--|--RFP の作成 |--|--|--購買担当から RFP の書式のテンプレートを取得 |--|--|--RFP のドラフト作成 |--|--|--購買担当、該当分野の専門家と RFP をレビュー |--|--|--RFP の改良 |--|--|--RFP の内容の準備完了 |--|--市場調査 |--|--|--該当する製品またはサービスを提供するベンダー候補企業の特定 |--|--|--事前の情報提供依頼書 (RFI) が必要かどうかを決定 |--|--|--RFI の回答の収集 (必要な場合) |--|--|--RFP の対象企業の最終決定 |--|--業界への RFP の送付 |--|--|--特定の回答段階についての期限の決定 |--|--|--期限と連絡先を記載した RFP の完成 |--|--|--RFP を対象企業に送付 |--|--|--RFP についての説明会の実施 (必要な場合) |--|--RFP 収集プロセスの完了 |--収集後のプロセス |--|--"入札意思あり" の回答のまとめ |--|--質問回答プロセス |--|--|--入札企業からの質問のまとめ |--|--|--質問に対する正式な回答の準備 |--|--|--'入札意思あり' と表明したすべての企業に回答を公開 |--|--提案書のレビュー |--|--|--初期評価を実施して問題を明確化 |--|--|--設定した基準に基づいて提案書を評価 |--|--|--基準を満たしていない提案企業を除外 |--|--|--残りの提案企業との話し合いの準備 |--|--個別会議/交渉 |--|--|--最終選考に残った企業にソリューションのプレゼンテーションを依頼 |--|--|--最終選考に残った企業のソリューションとデモを分析 |--|--選択の決定 |--|--|--提案書の最終分析 |--|--|--ベンダーの選択 |--|--|--契約の締結 |--|--|--選ばれなかった提案企業からフィードバックを収集 |--|--収集後のフェーズの完了 |--ベンダーからの提案依頼書 (RFP) の収集の完了
必要な情報だけを抜いてCSV出力するようなプログラムは簡単に書けそうですね。
弊社のプロジェクト管理ソフトProjectscapeでMicrosoft Projectファイルインポート機能をサポートするのにも使えそうな感じが…もう少し評価してみたいと思います。


