分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

php解析mpp文件

发布时间:2023-09-06 01:27责任编辑:傅花花关键词:暂无标签

php没有找到相应的包

Java的mpxj可以实现

所以借助JavaBridge.jar

1.安装jdk,设置环境变量(我的版本jdk1.8.0_131)

2.下载mpjx

  在http://www.mpxj.org/官网MPXJ in Java,进入下载页

  (我的版本mpxj-7.0.2)

  解压,将mpxj.jar和lib下面的commons-collections4-4.1.jar、poi-3.17.jar、rtfparserkit-1.10.0.jar放到Java安装目录下的jre/lib/ext下面

  测试

在www/mpp新建mpxjtest.java

 import net.sf.mpxj.mpp.*; import net.sf.mpxj.MPXJException; import net.sf.mpxj.Resource; ?import net.sf.mpxj.ResourceAssignment; import net.sf.mpxj.Task; ?import net.sf.mpxj.ProjectFile; import java.util.List; ?import java.io.*; ?public class mpxjtest { ?public static void main(String[] args) throws MPXJException { ????File file = new File("aa.mpp"); ?????MPPReader mppRead = new MPPReader(); ?????ProjectFile pf = mppRead.read(file); ?????System.out.println(pf); ????List tasks = pf.getAllTasks(); ?????mpxjtest mt = new mpxjtest(); ?????System.out.println("总任务数: " + tasks.size()); ?????System.out.println("ID|任务名|资源|开始时间|结束时间|完成百分比"); ?????for (int i = 1; i < tasks.size(); i++) { ????????System.out.println(((Task) tasks.get(i)).getUniqueID() + "|" + ((Task) tasks.get(i)).getName() + "|" + mt.getResource((Task) tasks.get(i)) + "|" + ((Task) tasks.get(i)).getStart() + "|" + ((Task) tasks.get(i)).getFinish() + "|" + ((Task) tasks.get(i)).getPercentageComplete()); ????} ????????} public String getResource(Task task) { ????StringBuffer buf = new StringBuffer(); ????List assignments = task.getResourceAssignments(); ???for (int i = 0; i < assignments.size(); i++) { ???????ResourceAssignment assignment = (ResourceAssignment) assignments .get(i); ???????Resource resource = assignment.getResource(); ????????if (resource != null) { ???????????buf.append(resource.getName()).append(" "); ????????} ????} ???return buf.toString(); } }

3.php调用java

JavaBridge.jar--用于搭建WEB服务器接口的核心JAVA应用程序包

Java.inc--供PHP语言调用的方法包,主要是Java类

首先运行JavaBridge.jar启动WEB服务器接口,在JavaBridge.jar所在目录运行命令

java -jar JavaBridge.jar SERVLET_LOCAL:8089

注:

  不加SERVLET_LOCAL:8089,默认的就是8080

修改php.ini里的allow_url_include为ON

  测试

新建aa.php

<?php require_once("http://localhost:8080/JavaBridge/java/Java.inc");$System = java("java.lang.System");echo $System->getProperties();

成功

  注:

    要调用自己开发的类,类必须是public类型的。要调用的方法也必须是public类型的

4.php解析mpp

<?php$fileName = "aa.mpp";$data = parseMSPJ($fileName);echo "success";$fp = fopen(‘./a.txt‘, ‘a+b‘);fwrite($fp, var_export($data, true));fclose($fp);function parseMSPJ($fileName){ ???$file_path ??= $fileName; ???require_once ‘http://localhost:8089/JavaBridge/java/Java.inc‘; ???$data ???????= array();if (empty($file_path)) {return $data;} ???$mppRead ????= new Java(‘net.sf.mpxj.mpp.MPPReader‘); ???$Filecontent = $mppRead->read($file_path); ???$Alltasks ???= $Filecontent->getAllTasks(); ???$Tasks_size ?= java_values($Alltasks->size()); ???// ID|任务名|开始时间|结束时间|完成百分比|资源|工期 ???for ($i = 1; $i < $Tasks_size; $i++) { ???????????$separator = ‘|‘; ???????????$tmp= getResource($Alltasks[$i]); ???????????$string ???= $Alltasks[$i]->getUniqueID() . $separator . $Alltasks[$i]->getName() . $separator .$tmp.$separator.$Alltasks[$i]->getStart() . $separator . $Alltasks[$i]->getFinish() . $separator . $Alltasks[$i]->getPercentageComplete(); ???????????$data[] ???= explode(‘|‘, $string); ???} ???return $data;}function getResource($task){ ???$resource = $task->getResourceAssignments(); ???$size ????= java_values($resource->size()); ???$buf ?????= ‘‘; ???if($size>0){ ???for ($i = 0; $i < $size; $i++) { ???????$tmp = $resource[$i]->getResource(); ???????if(!(java_is_null($tmp))){ ???????????$buf[] = $tmp->getName(); ???????????} ???} ???} ???return $buf;}

将解析出的文件内容,写入a.txt

php解析mpp文件

原文地址:http://www.cnblogs.com/baby123/p/7923354.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved