2023年12月7日发(作者:)

java读取project_java导入读取.mppproject文件(甘特图)

写这个的思路是:将.mpp文件中的内容读取出来,我只需要他的一级和二级目录,一级目录、二级目录各一张表,二级目录表存一级目录

的主键id,这点和网上其他的方法不太一样,大多数都是一张表就完事的,因为表不是我设计的,所以只能这么去做,下面开始码代码:

首先是文件,这里用到了mpxj 包

这里要注意的是,比4.5.0低的版本,如果你读取的是2010以上版本的.mpp文件会报错

forge

mpxj

4.5.0-rc1

然后是后台代码

public FileUploadModel9 getFileUploadModel() {//这个方法框架的方法,主要看下面这么获取文件

if (fileUploadModel == null) {

AttachHandler9 handler = new AttachHandler9(){

private static final long serialVersionUID = 1L;

@Override

public boolean beforeSaveAttachToDB(Object attach) {

FrameAttachStorage attach2 = (FrameAttachStorage)attach;

byte[] content = tentFromInputStream(tent());

//字节转InputStream

InputStream sbs = new ByteArrayInputStream(content);

4000

MPPReader reader = new MPPReader();

ProjectFile projectFile;

try {

projectFile = (sbs);

//读本地的.mpp文件,用于测试

//projectFile = ("C:/Users/pls/Desktop/");

List list = Tasks();

Task t = (Task) (0);

for(int i=1 ; i

Task task = (i);

if(entTask() != null){

if(entTask().getUniqueID() == queID()){

String rowguid = UUID().toString();

Projectclass pc = new Projectclass();guid(rowguid);

ssj(ish());

c(e());

ssj(rt());

jectguid(projectguid);//TODO 选择项目id

(pc);//保存一级目录

for (int j = 0; j < ldTasks().size(); j++) {

List tasklist = ldTasks();

Task task2 = (j);

if(entTask().getUniqueID() == queID()){

Projectschedule psc = new Projectschedule();

guid(UUID().toString());

ratedate(new Date());

ssj(rt());

ssj(ish());

jectClassguid(rowguid);

c(e());

estone("0");

(psc);//保存二级目录

}

}

}

}

}

}

catch (MPXJException e) {

tackTrace();

}

return true;

}

@Override

public void afterSaveAttachToDB(Object arg0) {

}

};fileUploadModel = new FileUploadModel9(new DefaultFileUploadHandlerImpl9(null, null, null,

handler, rGuid(), playName()));

}

return fileUploadModel;

}

这样,就完成了读取,入库的操作,只要在页面上刷新下,就可以读出数据了