php解析mpp文件中的多级任务
获取层级的project任务 参考

启动javabridge
java -jar JavaBridge.jar SERVLET_LOCAL:8089
1.读取mpp文件
$file_path = "/new.mpp";
$file_path = getcwd() . $file_path;
if (!file_exists($file_path)) {
var_dump("文件不存在");
return;
}
$mppRead = new Java('net.sf.mpxj.mpp.MPPReader');
try {
$Filecontent = $mppRead->read($file_path);
} catch (Exception $e) {
var_dump($e);
return;
}
2.获取任务
获取project的任务
$allTasks = $Filecontent->getChildTasks();
$tasks_size = java_values($allTasks->size());
if($tasks_size){
getChildren($allTasks[0]);
}
说明:
$Filecontent->getChildTasks()获取的是文件,即$allTasks[0]为project文件,再向下是任务
获取任务的基本信息
function getChildren($task)
{
$child = $task->getChildTasks();
$tasks_size = java_values($child->size());
$data = array();
$formatter = new Java('java.text.SimpleDateFormat', "yyyy-MM-dd HH:mm:ss");
for ($i = ; $i < $tasks_size; $i++) {
$tmp = getResource($child[$i]);
$items = array();
$items['id'] = $child[$i]->getID() . '';
$items['level'] = $child[$i]->getOutlineLevel() . '';
$items['uniqueID'] = $child[$i]->getUniqueID() . '';
$items['name'] = $child[$i]->getName() . '';
$items['duration'] = $child[$i]->getDuration() . '';
$start = $child[$i]->getStart();
$items['start'] = $formatter->format($start) . '';
$finish = $child[$i]->getFinish();
$items['finish'] = $formatter->format($finish) . '';
$items['percentComplete'] = $child[$i]->getPercentageComplete() . '';
//成本金额
$items['cost'] = $child[$i]->getCost() . '';
//实际成本ACWP
$items['ActualCost'] = $child[$i]->getActualCost() . '';
//联系人字段包含负责任务的个人的姓名
$items['contact'] = $child[$i]->getContact() . '';
//设置执行工作的实际成本
$items['ACWP'] = $child[$i]->getACWP() . '';
$items['BCWS'] = $child[$i]->getBCWS() . '';
$items['BCWP'] = $child[$i]->getBCWP() . '';
//任务的总工时或人员小时数
$items['work'] = $child[$i]->getWork() . '';
//获取剩余工作字段值
$items['RemainingWork'] = $child[$i]->getRemainingWork() . '';
//自定义文本
$items['Text'] = $child[$i]->getText() . '';
$items['Text1'] = $child[$i]->getText() . '';
$items['Text2'] = $child[$i]->getText() . '';
$children = getChildren($child[$i]);
if ($children) {
$items['children'] = $children;
}
$data[] = $items;
}
return $data;
}


获取资源 详见
获取前置任务 详见
踩了不少坑,终于解析出来了想要的信息
MPXJ还有好多没用上,还有待于继续研究
php解析mpp文件中的多级任务的更多相关文章
- php解析mpp文件中的资源
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL: 1.读取mpp文件 $file_path = " ...
- php解析mpp文件中的前置任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- php解析mpp文件
php没有找到相应的包 Java的mpxj可以实现 所以借助JavaBridge.jar 1.安装jdk,设置环境变量(我的版本jdk1.8.0_131) 2.下载mpjx 在http://www.m ...
- awk 解析maps文件中的地址
maps文件一般是这个样子: pi@raspberrypi:~ $ sudo cat /proc//maps 54b88000-54c8d000 r-xp b3: /lib/systemd/syste ...
- iOS如何解析crash文件中的地址
1.目录中存放app文件 2.打开文件 3.执行命令otool -arch arm64 -l ./QQStock | grep -B 1 -A 10 "LC_SEGM" | gr ...
- python解析pcap文件中的http数据包
使用scapy.scapy_http就可以方便的对pcap包中的http数据包进行解析 scapy_http可以在https://github.com/invernizzi/scapy-http下载, ...
- Maven让资源文件处理插件能够解析资源文件中的Maven属性
<build> <resources> <resource> <directory>${project.basedir}/src/main/resour ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
随机推荐
- java中的设计模式一 装饰模式
1.装饰模式(Decorator)的定义:又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 2.装饰模式以对客户端透明的方式动态的给一个对象附加上 ...
- (DNS)dnsmasq部署DNS
转自:https://www.hi-linux.com/posts/30947.html Dnsmasq提供DNS缓存和DHCP服务.Tftp服务功能.作为域名解析服务器(DNS),Dnsmasq可以 ...
- Ext 组件的一些操作
原文:http://linder0209.iteye.com/blog/1039200 1.Ext.Component 该组件在渲染的时候会默认的创建div DOM,是根据this.autoEl的配置 ...
- 【嵌入式】——arm裸机开发 step by step 之 串口通信
一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...
- animation过渡效果
References: http://developer.android.com/training/animation/index.html http://developer.android.com/ ...
- GENA
GENA这是事件消息采用格式,是所谓“普通事件通知体系Generic Event Notification Architecture”的缩写
- Ogre 编辑器三(自动生成与更新Ogre对象编辑界面)
最开始设计这个编辑器时,其中一个要求就是能在运行过程中,通过UI来更新各对象,这样我们就能明确每个Ogre对象更新其属性影响的渲染效果.比如点光源,方向光源,聚光灯各属性与效果,深度测试开启与关闭,深 ...
- c 二维数组动态分配和释放
c动态语言 函数声明的头文件在<stdlib.h>里 使用malloc函数为字符串分配内存 -->记得释放内存 free() #include <stdio.h> #in ...
- 对 /etc/rc.d/init.d 目录的一点理解
转载 一.Linux的引导过程 系统启动之后,在进入init.d之前,我们先来看看系统都做了什么工作.系统加电之后,首先进行的硬件自检,然后是bootload对系统的初始化,加载内核. 内核被加载到内 ...
- QA:无法为具有固定名称“MySql.Data.MySqlClient”...
Question: 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlC ...