您的位置:首页 > 编程语言 > Java开发

java解析Microsoft Project mpp文件(

2013-11-13 10:18 295 查看
背景:

在公司项目中,技术总监之前让我开发了一个甘特图的功能,当然这引用了一个开源的js框架。

我负责的是查找表单,将表单的数据通过递归的方式获取后,然后动态创建一个树形的符合那个js框架的xml文件,再加上前台的一些技术,eg:Ajax 、 jQuery 、Extjs....就OK了!

后来,技术总监说为了方便客户,让用户只需要用微软(Microsoft)的Project 工具,创建项目和任务计划的相关信息,即生成的就是一个mpp文件,导入到项目中,就可以转换成之前开发的甘特图来显示。即就是要解析

用户导入的Project mpp文件,获取其中的信息,然后入库

说明:

我写了一个在我们公司项目中比较通用的一个java静态类来解析,然后由业务层来调用,这个类的功能就只是

负责解析文件,至于保存入库,每个公司都有自己的方式,我就不展示代码了........

------------------------------------------------------------------------------------------------

代码如下:

----------------------------------

package com.cinsea.parsempp.ext;

import com.cinsea.exception.DataOperationException;

import net.sf.mpxj.*;

import net.sf.mpxj.MPXJException;

import net.sf.mpxj.Resource;

import net.sf.mpxj.ResourceAssignment;

import net.sf.mpxj.Task;

import net.sf.mpxj.ProjectFile;

import net.sf.mpxj.mpp.MPPReader;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public static class ParseProjectMpp{



public static List psrseProjectFile(File mppfile){

List list = new ArrayList();

MPPReader reader = new MPPReader();

ProjectFile projectFile;

try{

projectFile = reader.read(mppfile);

List taskList = projectFile.getAllTasks();

for(Task task : taskList){

Map map = new HashMap();

map.put("id",task.getID());

map.put("taskName",task.getName());

map.put("startDate",task.getStart());

map.put("endDate",task.getFinish());

map.put("beforeTask",getBeforeTaskId(task));//获取前置任务的Id

map.put("resource",getResources(task));//获得资源

list.add(map);

}

}catch(MPXJException e ){

e.printStackTrace();

}

return list;

}



private static String getBeforeTaskId(Task task){

StringBuffer beforeTaskId = new StringBuffer();

if(task!=null){

List list = task.getPredecessors();

if(list != null ){

if(list.size()>0){

for(int i=0; i<list.size(); i++){

Relation relation = (Relation)list.get(i);

beforeTaskId.append(relation.getTargetTask().getID());

}

}

}

}

return beforeTaskId.toString();

}



private static String getResources(Task task){

if(task == null){

return "";

}

StringBuffer sb = new StringBuffer();

List assignments = task.getResourceAssignments();

for(ResourceAssignment ra : assignments){

Resource resource = ra.getResource();

if(resource != null){

sb = sb.append(resource.getName());

}

}

return sb.toString();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: