获取层级的project任务  参考

启动javabridge

java -jar JavaBridge.jar SERVLET_LOCAL:

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.解析资源工作表

调用

$tmp = getAllResource($Filecontent);

获取project资源

function getAllResource($project)
{
$formatter = new Java('java.text.SimpleDateFormat', "yyyy-MM-dd HH:mm:ss");
$resource = $project->getAllResources();
$size = java_values($resource->size());
$buf = array();
if ($size > ) {
for ($i = ; $i < $size; $i++) {
$tmp = $resource[$i];
if (!(java_is_null($tmp))) {
//获取ID字段值
$items['getID'] = $tmp->getID() . '';
$id = intval($tmp->getID() . '');
//获取资源名称字段值
$items['name'] = $tmp->getName() . '';
$items['uid'] = $tmp->getUniqueID() . '';
$start = $tmp->getStart();
if (!(java_is_null($start))) {
$items['start'] = $formatter->format($start) . '';
}
$finish = $tmp->getFinish();
if (!(java_is_null($finish))) {
$items['finish'] = $formatter->format($finish) . '';
}
//获取名称字段值的缩写
$items['initials'] = $tmp->getInitials() . '';
//类型 Material材料,Work工时,Cost成本
$items['type'] = $tmp->getType() . '';
//工作字段值
$items['work'] = $tmp->getWork() . '';
//检索成本字段值
$items['cost'] = $tmp->getCost() . '';
//检索每次使用的成本
$items['costPerUse'] = $tmp->getCostPerUse() . '';
//检索基准成本值
$items['BaselineCost'] = $tmp->getBaselineCost() . '';
//自定义文本
$items['Text'] = $tmp->getText() . '';
$items['Text1'] = $tmp->getText() . '';
$items['Text2'] = $tmp->getText() . '';
//检索材料资源的单位标签
$items['materialLabel'] = $tmp->getMaterialLabel() . '';
//检索过度分配的标志
$items['overAllocated'] = $tmp->getOverAllocated() . '';
//检索资源的最大可用性
$items['maxUnits'] = $tmp->getMaxUnits() . '';
//获取标准费率字段值
$items['standardRate'] = $tmp->getStandardRate() . '';
//检索标准费率的格式
$items['standardRateUnits'] = $tmp->getStandardRateUnits() . '';
//检索加班费用字段的值
$items['overtimeCost'] = $tmp->getOvertimeCost() . '';
//检索此资源的加班费率
$items['overtimeRate'] = $tmp->getOvertimeRate() . '';
//检索加班费率的格式
$items['overtimeRateUnits'] = $tmp->getOvertimeRateUnits() . '';
//检索加班工作量
$items['overtimeWork'] = $tmp->getOvertimeWork() . '';
//成本累算选项包括:开始START,结束END和按比例分配PRORATED
$items['accrueAt'] = $tmp->getAccrueAt() . '';
// 从日期起可用
$items['availableFrom'] = $tmp->getAvailableFrom() . '';
//到日期为止
$items['availableTo'] = $tmp->getAvailableTo() . '';
//创建日期
$creationDate = $tmp->getCreationDate();
if (!(java_is_null($creationDate))) {
$items['creationDate'] = $formatter->format($creationDate) . '';
}
$items['outlineCode1'] = $tmp->getOutlineCode1() . '';
//检索与此资源关联的日历
//$items['resourceCalendar'] = $tmp->getResourceCalendar().'';
//检索资源的Windows帐户名称
$items['ntAccount'] = $tmp->getNtAccount() . '';
//检索此资源的注释文本
$items['notes'] = $tmp->getNotes() . '';
if ($items['name']) {
$buf[] = $items;
}
}
}
}
return $buf;
}

3.各级任务的资源分配

获取project的任务

$allTasks   = $Filecontent->getChildTasks();
$tasks_size = java_values($allTasks->size());
if($tasks_size){
getChildren($allTasks[]);
}

说明:

  $Filecontent->getChildTasks()获取的是文件,即$allTasks[0]为project文件,再向下是任务

获取多级任务的基本信息及获取分配资源

function getChildren($task)
{
$child = $task->getChildTasks();
$tasks_size = java_values($child->size());
$data = array();
for ($i = ; $i < $tasks_size; $i++) {
$tmp = getResource($child[$i]);
$items = array();
$items['id'] = $child[$i]->getID() . '';
$items['uniqueID'] = $child[$i]->getUniqueID() . '';
$items['name'] = $child[$i]->getName() . '';
//获取资源
$tmp = getResource($child[$i]);
if ($tmp) {
$items['resource'] = $tmp;
}
//获取下一级任务
$children = getChildren($child[$i]);
if ($children) {
$items['children'] = $children;
}
$data[] = $items;
}
return $data;
}

获取任务分配的资源信息的详细实现

function getResource($task)
{
$resource = $task->getResourceAssignments();
$size = java_values($resource->size());
$buf = array();
if ($size > ) {
for ($i = ; $i < $size; $i++) {
$tmp = $resource[$i]->getResource();
if (!(java_is_null($tmp))) {
$items['name'] = $tmp->getName() . '';
$items['Units'] = $resource[$i]->getUnits() . '';
$items['Cost'] = $resource[$i]->getCost() . '';
if ($items['name']) {
$buf[] = $items;
}
}
}
}
return $buf;
}

php解析mpp文件中的资源的更多相关文章

  1. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  2. php解析mpp文件中的前置任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

  3. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  4. Windows Store App 全球化:引用分离资源文件中的资源

    大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...

  5. C#调用Resources.resx资源文件中的资源

    使用到了.NET中的资源文件,也就是Resources.resx,于是就学会了如何调用资源文件中的资源.首先,资源文件可以从项目属性中的资源标签添加.比如,我添加一个图片,叫做aaa.png,添加入资 ...

  6. php解析mpp文件

    php没有找到相应的包 Java的mpxj可以实现 所以借助JavaBridge.jar 1.安装jdk,设置环境变量(我的版本jdk1.8.0_131) 2.下载mpjx 在http://www.m ...

  7. 利用“反射”动态加载R文件中的资源

    前几天做一个Android下面数据库相关的应用.用ListVIew展示表中数据的时候我希望能给表中每一条记录,加一个展示的图片.但是用数据库保存图片是比较难搞的.于是就把所需图片都保存到res下的dr ...

  8. awk 解析maps文件中的地址

    maps文件一般是这个样子: pi@raspberrypi:~ $ sudo cat /proc//maps 54b88000-54c8d000 r-xp b3: /lib/systemd/syste ...

  9. iOS如何解析crash文件中的地址

    1.目录中存放app文件 2.打开文件 3.执行命令otool -arch arm64 -l ./QQStock  | grep -B 1 -A 10 "LC_SEGM" | gr ...

随机推荐

  1. 【WPF】修改数据层ViewModel后,UI界面未同步更新

    界面:WPF(MVVM)中将集合类控件ItemsControl的ItemsSource绑定到了ViewModel中的ObservableCollection列表,ItemsControl.ItemTe ...

  2. [uart]linux uart应用层配置

    http://www.raviyp.com/embedded/189-serial-port-programming-in-linux-using-c-working-code

  3. JDK观察者模式和事件机制比较<转>

    原文:(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型) 作者:zuoxiaolong8810(左潇龙),转载请注明出处. 本章我们讨论一个除前面的单例以及代理模式之外,一个WEB项目 ...

  4. zookeeper快照清理

    从3.4版本以后,在配置文件中有2个参数分别设置快照的清理.默认没有打开. autopurge.purgeInterval=1 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0 ...

  5. Extjs4.x MVC开发模式,效率提高的两大秘诀

    最近做MVC开发的,遇到一个蛋疼的问题,每次加载模块都需要耗时3~4秒钟,才可以显示出完整的页面,通过监控,发现主要还是在Controller里慢,加载js文件等都是非常快的,但一到controlle ...

  6. ansible wc -l 对结果值取大小的操作

    [root@localhost ansible]# cat zss.yml - hosts: zss tasks: - name: step1 ping: - name: step2 install ...

  7. 三篇文章了解 TiDB 技术内幕——说计算

    在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句. 假设我们有这样一个表的定义: CREATE ...

  8. Navi.Soft31.WinForm框架(含下载地址)

    1概述 1.1应用场景 尽管互联网高速发展,互联网软件也随之越来越多,但桌面应用程序在某些领域中还是不可替代,如MIS,ERP,CRM等软件产品,同时,这类软件均包括一些通用的功能,如:与数据库操作, ...

  9. Java BEAN与EJB的区别

    Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以 ...

  10. tensorflow模型量化压缩

    参考 https://blog.csdn.net/xygl2009/article/details/80596392 https://blog.csdn.net/xsfl1234/article/de ...