背景:
在公司项目中,技术总监之前让我开发了一个甘特图的功能,当然这引用了一个开源的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();
    }
}

java解析Microsoft Project mpp文件(相关推荐

  1. java 读取 解析微软Project .mpp 文件到甘特图

    1.引入价包; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</art ...

  2. Java解析rdf和xml文件以及处理excel

    一.Java解析rdf文件 1.下载jena库 首先,从这里下载 jena 包 apache-jana-2.7.*.tar.gz(我用的是2.7).解压. 打开 Eclipse,新建一个Java Pr ...

  3. Java解析eml邮件格式文件

    基本介绍 关于邮件的需求总是以邮件发送或接收为主,之前涉及的技术选型有Java Mail.Apache Commons Email.Spring Mail,由于工作上的需要对eml格式的文件进行解析, ...

  4. java 解析修改dex_Android dex文件解析

    1. 关于Android dex文件 dex文件作为Android APK的组成部分,其主要是Android的Java代码经过编译生成class文件,再经过dx命令生成的.这里面包括了APK的源码,反 ...

  5. java解析五元组_pcap文件解析,并且按照五元组分类

    [实例简介] pcap文件解析,并按照五元组分包,全部用java语言实现. [实例截图] [核心代码] PcapTestZZ ├── PcapTestZ │   ├── 111.206.37.1930 ...

  6. JAVA解析dcm医学影像文件,并提取文件信息

    一.安装 首先去Github下载源码,然后执行mvn install进行本地安装,Maven中央仓库,竟然没有该jar..安装成功之后如下: 然后在POM.XML文件中引入该jar包: <dep ...

  7. java解析excel生成sql文件

    序:需求是往数据库批量造测试数据.数量较多.用代码直接生成sql文件会省很多事. 注.引包:poi.jar系列引入即可. package demo;import java.io.File; impor ...

  8. java解析时已到达文件结尾_IO流读取到文件末尾继续读取

    import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...

  9. java 解析 ical_ical4j 实现ICS文件的生成和解析

    /*** 导入文件 * *@throwsParserException *@throwsIOException*/@Testpublic void importFile() throwsIOExcep ...

最新文章

  1. Android怎么访问私有数据(5)
  2. 神经网络前向引擎内存复用技术(基于caffe)
  3. 音视频技术开发周刊 | 135
  4. python的自带数据集_盘点 | Python自带的那些数据集
  5. python变量的作用_python 变量的作用范围
  6. HBase学习笔记——概念及原理
  7. 领域应用 | 大众点评搜索基于知识图谱的深度学习排序实践
  8. fcpx视觉特效插件包 - FxFactory for Mac 支持M1芯片
  9. javascript中正则表达式和ruby中的一点差异
  10. 从王者荣耀里我学会的前端新手指引
  11. AndroidStudio_安卓原生开发_什么是AndroidStudio NDK ---Android原生开发工作笔记140
  12. 网络用词:小狼狗小奶狗区别
  13. UVA11398 The Base-1 Number System【进制】
  14. Python Django开发中XSS内容过滤问题的解决
  15. mysql utf8转gbk cmd_修改xampp的mysql数据库utf8mb4为gbk以解决cmd内中文显示为问号
  16. UGUI Text组件扩展
  17. mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
  18. 电子工程师元器件应用必备宝典
  19. 202101汇率换算
  20. 如何使用内网穿透,将自己的内网接口暴露到外网

热门文章

  1. mysql的覆盖语句_求教一个mysql查询问题:为什么我的SQL语句不能覆盖所有情况?内详...
  2. 计算机网络综合布线装置,TYZST-2B 多功能综合布线实训台|综合布线系统实训装置...
  3. 网络基础链路层--eth协议arp协议mtu
  4. springboot审核功能怎么做_开发的微信小程序商城怎么利用分销功能做营销
  5. Solidworks安装SW2URDF插件安装后无法正常加载问题
  6. 【Linux】循序渐进学运维-服务篇-实验环境准备
  7. Ubuntu20.04使用过程中总是弹出检测到系统程序出现问题的解决方法
  8. python中如何画logistic_如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?
  9. python股票直方图代码_手把手教你用直方图、饼图和条形图做数据分析(Python代码)...
  10. mips汇编计算开方_全国计算机一级考试模拟题(11)