写这个的思路是:将.mpp文件中的内容读取出来,我只需要他的一级和二级目录,一级目录、二级目录各一张表,二级目录表存一级目录的主键id,这点和网上其他的方法不太一样,大多数都是一张表就完事的,因为表不是我设计的,所以只能这么去做,下面开始码代码:

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

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

<!-- https://mvnrepository.com/artifact/net.sourceforge/mpxj -->
		<dependency>
		    <groupId>net.sourceforge</groupId>
		    <artifactId>mpxj</artifactId>
		    <version>4.5.0-rc1</version>
		</dependency>

然后是后台代码

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 = FileManagerUtil.getContentFromInputStream(attach2.getContent());
                    //字节转InputStream
                    InputStream sbs = new ByteArrayInputStream(content); 
                    MPPReader reader = new MPPReader();
                    ProjectFile  projectFile;
                    try {
                        projectFile = reader.read(sbs);
                       //读本地的.mpp文件,用于测试
                       //projectFile = reader.read("C:/Users/pls/Desktop/test.mpp");
                        List<Task> list = projectFile.getAllTasks();
                        Task t = (Task) list.get(0);
                        for(int i=1 ; i<list.size();i++){
                            Task task = list.get(i);
                            if(task.getParentTask() != null){
                                if(task.getParentTask().getUniqueID() == t.getUniqueID()){
                                    String rowguid = UUID.randomUUID().toString();
                                    Projectclass pc = new Projectclass();
                                    pc.setRowguid(rowguid);
                                    pc.setGcjssj(task.getFinish());
                                    pc.setGcmc(task.getName());
                                    pc.setGckssj(task.getStart());
                                    pc.setProjectguid(projectguid);//TODO 选择项目id
                                    service.insert(pc);//保存一级目录
                                    
                                    for (int j = 0; j < task.getChildTasks().size(); j++) {
                                        List<Task> tasklist =  task.getChildTasks();
                                        Task task2 = tasklist.get(j);
                                        if(task2.getParentTask().getUniqueID() == task.getUniqueID()){
                                            Projectschedule psc = new Projectschedule();
                                            psc.setRowguid(UUID.randomUUID().toString());
                                            psc.setOperatedate(new Date());
                                            psc.setJhkssj(task2.getStart());
                                            psc.setJhjssj(task2.getFinish());
                                            psc.setProjectClassguid(rowguid);
                                            psc.setJdmc(task2.getName());
                                            psc.setMilestone("0");
                                            
                                            service.insert(psc);//保存二级目录
                                        }
                                    }
                                }
                            }
                          }
                            
                    }
                    catch (MPXJException e) {
                        e.printStackTrace();
                    }
                    return true;
                }
                @Override
                public void afterSaveAttachToDB(Object arg0) {
                    
                }
            };
            fileUploadModel = new FileUploadModel9(new DefaultFileUploadHandlerImpl9(null, null, null,
                    handler, userSession.getUserGuid(), userSession.getDisplayName()));
        }
        return fileUploadModel;
    }




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