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;
}
这样,就完成了读取,入库的操作,只要在页面上刷新下,就可以读出数据了


发布评论