java 导入读取.mpp project文件(甘特图)

写这个的思路是:将.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;
    }




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


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过使用特定的库或工具来读取.mpp格式的数据。以下是两种常见的方法: 1. 使用OpenProj: OpenProj是一个开源的项目管理软件,它可以导入读取.mpp格式的数据。您可以在Java代码中使用相关的OpenProj库,通过加载.mpp文件并解析其中的数据。使用OpenProj库,您可以获得项目的名称、任务列表、任务时间表、任务关系等信息。以下是一个简单的示例代码: ```java import net.sf.mpxj.*; import net.sf.mpxj.reader.ProjectReader; import net.sf.mpxj.reader.UniversalProjectReader; public class MppReader { public static void main(String[] args) { try { // 加载.mpp文件 ProjectReader reader = new UniversalProjectReader(); ProjectFile project = reader.read("path/to/your/project.mpp"); // 获取项目信息 System.out.println("项目名称: " + project.getProjectProperties().getName()); // 获取任务列表并输出任务名称和开始时间 for (Task task : project.getAllTasks()) { System.out.println("任务名称: " + task.getName()); System.out.println("开始时间: " + task.getStart()); } } catch (MPXJException e) { e.printStackTrace(); } } } ``` 2. 使用MPXJ库: MPXJ是一个Java库,专门用于读取和处理多种项目文件格式,包括.mpp格式。通过使用MPXJ库,您可以加载.mpp文件,并通过API获取项目的各项信息。以下是一个简单的示例代码: ```java import net.sf.mpxj.*; import net.sf.mpxj.reader.ProjectReader; import net.sf.mpxj.reader.ProjectReaderUtility; public class MppReader { public static void main(String[] args) { try { // 加载.mpp文件 ProjectReader reader = ProjectReaderUtility.getProjectReader("path/to/your/project.mpp"); ProjectFile project = reader.read(); // 获取项目信息 System.out.println("项目名称: " + project.getProjectProperties().getName()); // 获取任务列表并输出任务名称和开始时间 for (Task task : project.getAllTasks()) { System.out.println("任务名称: " + task.getName()); System.out.println("开始时间: " + task.getStart()); } } catch (MPXJException e) { e.printStackTrace(); } } } ``` 以上是两种常见的通过Java读取.mpp格式数据的方法。您可以根据自己的需求选择适合的方法,并根据需要进一步处理和分析数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值