2023年12月7日发(作者:)
java解析MicrosoftProjectmpp文件(
背景:
在公司项目中,技术总监之前让我开发了一个甘特图的功能,当然这引用了一个开源的js框架。
我负责的是查找表单,将表单的数据通过递归的方式获取后,然后动态创建一个树形的符合那个js框架的xml文件,再加上前台的一些技
术,eg:Ajax 、 jQuery 、就OK了!
后来,技术总监说为了方便客户,让用户只需要用微软(Microsoft)的Project 工具,创建项目和任务计划的相关信息,即生成的就是一
个mpp文件,导入到项目中,就可以转换成之前开发的甘特图来显示。即就是要解析
用户导入的Project mpp文件,获取其中的信息,然后入库
说明:
我写了一个在我们公司项目中比较通用的一个java静态类来解析,然后由业务层来调用,这个类的功能就只是
负责解析文件,至于保存入库,每个公司都有自己的方式,我就不展示代码了........
------------------------------------------------------------------------------------------------
代码如下:
----------------------------------
package ;
import erationException;
import .*;
import ception;
import ce;
import ceAssignment;
import ;
import tFile;
import der;
import ;
import ption;
import ist;
import p;
import ;
import ;
public static class ParseProjectMpp{
public static List psrseProjectFile(File mppfile){
List list = new ArrayList();
MPPReader reader = new MPPReader();
ProjectFile projectFile;
try{
projectFile = (mppfile);
List taskList = Tasks();
for(Task task : taskList){
Map map = new HashMap();
("id",());
("taskName",e());
("startDate",rt());
("endDate",ish());
("beforeTask",getBeforeTaskId(task));//获取前置任务的Id
("resource",getResources(task));//获得资源
(map);
}
}catch(MPXJException e ){ tackTrace(); } return list; }
private static String getBeforeTaskId(Task task){ StringBuffer beforeTaskId = new StringBuffer(); if(task!=null){ List list = decessors(); if(list != null ){ if(()>0){ for(int i=0; i<(); i++){ Relation relation = (Relation)(i); (getTask().getID()); } } } } return ng(); }
private static String getResources(Task task){ if(task == null){ return ""; } StringBuffer sb = new StringBuffer(); List assignments = ourceAssignments(); for(ResourceAssignment ra : assignments){ Resource resource = ource(); if(resource != null){ sb = (e()); } } return ng(); }}


发布评论