Java解析Project mpp文件Word格式.docx

上传人:b****8 文档编号:22618903 上传时间:2023-02-04 格式:DOCX 页数:12 大小:178.62KB
下载 相关 举报
Java解析Project mpp文件Word格式.docx_第1页
第1页 / 共12页
Java解析Project mpp文件Word格式.docx_第2页
第2页 / 共12页
Java解析Project mpp文件Word格式.docx_第3页
第3页 / 共12页
Java解析Project mpp文件Word格式.docx_第4页
第4页 / 共12页
Java解析Project mpp文件Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Java解析Project mpp文件Word格式.docx

《Java解析Project mpp文件Word格式.docx》由会员分享,可在线阅读,更多相关《Java解析Project mpp文件Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

Java解析Project mpp文件Word格式.docx

importnet.sf.mpxj.ProjectFile;

importjava.util.List;

importjava.io.*;

publicclassParseProjectMpp{

/**

*@Data2011-1-13

*@author吴理琪

*@parammppFilePath

*/

publicstaticvoidmain(String[]args){

StringmppFilePath="

c:

\\wRitchie.mpp"

;

Filefile=newFile(mppFilePath);

MPPReadermppRead=newMPPReader();

ProjectFilepf;

try{

pf=mppRead.read(file);

System.out.println("

mpp文件:

"

+mppFilePath);

Project文件绝对路径:

"

+pf.getProjectFilePath());

ParseProjectMppppm=newParseProjectMpp();

List<

Task>

tasks=pf.getAllTasks();

ppm.parseProjectMpp(tasks);

}catch(MPXJExceptione){

e.printStackTrace();

}

}

*遍历任务,解析mpp文件,并可进行相应该实际业务逻辑

*

*@paramtasks

publicvoidparseProjectMpp(List<

tasks){

System.out.println("

任务总数:

+tasks.size());

System.out

.println("

ID|任务名称|资源名称|开始时间|结束时间|完成百分比|任务层数|任务子级数"

);

for(TaskoneTask:

//相关具体业务逻辑代码,如保存至数据库...

//本教程代码为简单,直接输入

System.out.println(oneTask.getUniqueID()+"

|"

+oneTask.getName()

+"

+this.getResource(oneTask)+"

+oneTask.getStart()+"

+oneTask.getFinish()+"

+oneTask.getPercentageComplete()+"

+oneTask.getOutlineLevel()+"

+oneTask.getOutlineNumber());

*获取资源

*@paramtask

*@return资源名称

@SuppressWarnings("

rawtypes"

publicStringgetResource(Tasktask){

StringBufferbuf=newStringBuffer();

List<

ResourceAssignment>

assignments=task.getResourceAssignments();

for(ResourceAssignmentassignment:

assignments){

Resourceresource=assignment.getResource();

if(resource!

=null){

buf.append(resource.getName()).append("

"

}

returnbuf.toString();

}

运行结果

\wRitchie.mpp

C:

\项目2010.mpp

12

ID|任务名称|资源名称|开始时间|结束时间|完成百分比|任务层数|任务子级数

0|项目2010||WedJan1208:

00:

00CST2011|MonJan3117:

00CST2011|0.0|0|0

2|mpp教程启动阶段|吴理琪,|WedJan1208:

00CST2011|WedJan1217:

00CST2011|0.0|1|1

5|mpp教程调研、分析阶段||WedJan1208:

00CST2011|FriJan1417:

00CST2011|0.0|1|2

8|网络调研|吴理琪,wRitchie,|WedJan1208:

00CST2011|ThuJan1317:

00CST2011|0.0|2|2.1

10|访问用户|wRitchie,|WedJan1208:

00CST2011|0.0|2|2.2

3|mpp教程设计阶段|吴理琪,|MonJan1708:

00CST2011|ThuJan2017:

00CST2011|0.0|1|3

11|架构设计|wRitchie,|MonJan1708:

00CST2011|MonJan1717:

00CST2011|0.0|2|3.1

4|mpp教程示例开发阶段|wRitchie,吴理琪,|MonJan2408:

00CST2011|MonJan2417:

00CST2011|0.0|1|4

12|示例代码开发|wRitchie,吴理琪,|FriJan2108:

00CST2011|0.0|2|4.1

6|mpp教程测试阶段|吴理琪,|WedJan1208:

00CST2011|TueJan2517:

00CST2011|0.0|1|5

7|mpp教程培训阶段|wRitchie,|ThuJan2708:

00CST2011|0.0|1|6

13|文档编著||WedJan2608:

00CST2011|0.0|2|6.1

四、代码解释

读取mpp文件:

ProjectReaderreader=newMPPReader();

ProjectFileproject=reader.read("

wRitchie.mpp"

读取mpp文件后,可以读资源

for(Resourceresource:

project.getAllResources())

{

System.out.println("

Resource:

+resource.getName()+"

(UniqueID="

+resource.getUniqueID()+"

)"

读取mpp文件后,可以读取所有任务

for(Tasktask:

project.getAllTasks())

Task:

+task.getName()+"

ID="

+task.getID()+"

UniqueID="

+task.getUniqueID());

获取指定ID或UniqueID资源或任务方法

Resourcer=project.getResourceByUniqueID(Integer.valueOf(88));

Taskt=project.getTaskByUniqueID(Integer.valueOf(88));

获取所有任务层次关系方法

List<

tasks=project.getChildTasks();

Tasktask=tasks.get(0);

tasks=task.getChildTasks();

publicvoidlistHierarchy(ProjectFilefile)

for(Tasktask:

file.getChildTasks())

{

+task.getName());

listHierarchy(task,"

System.out.println();

privatevoidlistHierarchy(Tasktask,Stringindent)

for(Taskchild:

task.getChildTasks())

System.out.println(indent+"

+child.getName());

listHierarchy(child,indent+"

前置任务关系

file.getAllTasks())

List<

Relation>

predecessors=task.getPredecessors();

if(predecessors!

=null&

&

predecessors.isEmpty()==false)

System.out.println(task.getName()+"

predecessors:

for(Relationrelation:

predecessors)

Task:

+file.getTaskByUniqueID(relation.getTaskUniqueID()).getName());

Type:

+relation.getType());

Lag:

+relation.getDuration());

relation.getTargetTask().getID()对应前置任务标识号;

relation.getType()对应前置任务类型:

relation.getLag()对应延隔时间,单位(日)

获取得形如

+relation.getTargetTask().getID()+relation.getType()+"

+"

+relation.getLag());

获得所有资源名称

for(ResourceAssignmentassignment:

file.getAllResourceAssignments())

Tasktask=assignment.getTask();

StringtaskName;

if(task==null)

taskName="

(nulltask)"

else

taskName=task.getName();

Resourceresource=assignment.getResource();

StringresourceName;

if(resource==null)

resourceName="

(nullresource)"

resourceName=resource.getName();

Assignment:

Task="

+taskName+"

Resource="

+resourceName);

获取指定任务的资源名称

Assignmentsfortask"

:

for(ResourceAssignmentassignment:

task.getResourceAssignments())

日历

ProjectCalendar>

baseCalendars=file.getBaseCalendars();

//资源日历

resourceCalendars=file.getResourceCalendars();

//标准日历

ProjectCalendardefaultCalendar=file.getCalendar();

//根据具体任务日历

ProjectCalendartaskCalendar=task.getCalendar();

资源分配工期

//开始时间

TimephasedResourceAssignment>

planned=assignment.getTimephasedPlanned();

//结束时间

complete=assignment.getTimephasedComplete();

源码研究,对源码感兴趣可解压下载下来的mpxj-4.0.0.zip包,导入eclipse中。

其它,目前,编者目前使用mpxj-4.0实际开发中,支持读取MicrosoftOfficeProject2003/2007/2010,其它版本暂未做测试。

缺点,mpxj-4.0目前不能写mpp文件。

如有疑问,可Email:

wRitchie@

二〇一一年一月八日星期六

于北京.海淀

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1