转载请注明来源:http://blog.youkuaiyun.com/loongshawn/article/details/51038051
- 《Java利用mpxj解析mpp格式文件》
- 《SpringBoot添加Email发送功能》
- 《SpringBoot配置log4j输出日志》
- 《SpringBoot定时任务说明》
- 《SpringBoot接口服务处理Whitelabel Error Page》
- 《构建基于阿里云OSS文件上传服务》
1、mpp文件介绍
MPP是Microsoft Project项目管理软件的文件扩展名,此软件旨在帮助个人跟踪,组织或维护项目。
2、mpp显示效果
可以通过在线的mpp阅读工具打开的,该工具免费,但限制了上传文件大小不超过2M。
https://www.projectplan365.com/projectviewernow/tViews.aspx#
3、mpp结构说明
通过上图可以看出,文件主体内容就是一条一条的记录,记录内容包括:任务ID、任务名、Duration、Start日期、Finish日期、Predecessors业务流、自定义字段。
接下来,我们先来了解下mpp文档的解析工具类,目前主要是通过MPXJ工具类来解析该文件。
MPXJ官方网站:http://www.mpxj.org/index.html
MPXJ官方API说明文档:http://www.mpxj.org/apidocs/index.html
实例中引入的maven依赖版本:
<dependency>
<groupId>net.sf.mpxj</groupId>
<artifactId>mpxj</artifactId>
<version>5.2.2</version>
</dependency>
Package net.sf.mpxj.mpp
上面这个包是处理MPP文件解析的主要集合,通过net.sf.mpxj.mpp.MPPReader类来构建读文件管道。
每条具体的任务都需要通过这个类net.sf.mpxj.Task来解析。
// 普通任务ID
Integer task_id =task.getID();
// 独立任务ID
Integer task_unique_id =task.getUniqueID();
// 大纲ID
Integer task_outline_level =task.getOutlineLevel();
// 任务周期
double task_duration =task.getDuration().getDuration();
// 任务名
String task_name = task.getName();
// 任务开始日期
Date task_start_date = task.getStart();
// 任务结束日期
Date task_finish_date = task.getFinish();
// 任务流
List<Relation> task_predecessors = task.getPredecessors();
4、mpp解析代码
解析线上mpp文件,同时获取TaskInfo
// NO.1 解析mpp文件,同时获取TaskInfo
public static List<TaskInfo> readInputStream(InputStream in,String fileName){
List<TaskInfo> taskList = new ArrayList<TaskInfo>();
InputStream ins = in;
try{
MPPReader mppRead = new MPPReader();
ProjectFile pf = mppRead.read(in);
logger.info("MPXJUtils.method [readInputStream]: fileName-" + fileName);
List<Task> tasks = pf.getAllTasks();
logger.info("MPXJUtils.method [readInputStream]: taskSize-" + tasks.size());
for (int i = 0; i < tasks.size(); i++) {
Task task = tasks.get(i);
Integer task_id = task.getID();
Integer task_unique_id = task.getUniqueID();
Integer task_outline_level = task.getOutlineLevel();
double task_duration = task.getDuration().getDuration();
String task_name = task.getName();
Date task_start_date = task.getStart();
Date task_finish_date = task.getFinish();
List<Relation> task_predecessors = task.getPredecessors();
logger.info("MPXJUtils.method [readInputStream] taskInfo:" + task_id + "|" + task_unique_id + "|" + task_outline_level + "|" + task_duratio