获取层级的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. iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客

    原文地址:http://blog.csdn.net/qq_31810357/article/details/51111702 前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人 ...

  2. client version is higher than daemon version (client is v.1.29 daemon is v.1.22)

    安装好coreseek,建了索引,启动了服务,用php建了一个test.php,用于测试:<?phpinclude_once('sphinxapi.php');//向搜索引擎发起请求 $cl = ...

  3. C#中的volatile关键字

    volatile 关键字指示一个字段可以由多个同时执行的线程修改. 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制. 这样可以确保该字段在任何时间呈现的都是最新的值. vo ...

  4. Ubuntu 安装 vnc server

    安装原因,因为需要有桌面操作, 服务器上配置 vnc 即可实现. 在 ubuntu 14.04 上已经实现. 安装先关软件 sudo apt-get update sudo apt-get insta ...

  5. net-snmp 的配置

    http://www.cnblogs.com/oloroso/p/4595123.html

  6. 9g10在nandflash扇区的分配地址

  7. QQ小薇机器人

    https://github.com/b3log/xiaov XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息,发现有“感兴趣”的 ...

  8. c# 连等算式都在做什么

    在研究两个整数互换的方法时(详细看这里),发现了一个有趣的现象. a ^= b ^= a ^= b; ≠ a ^= b;b ^= a;a ^= b; 有兴趣的童鞋可以看看下面代码的结果是什么: int ...

  9. 使用OpenOffice.org将各类文档转为PDF

    http://blog.zhaojie.me/2010/05/convert-document-to-pdf-via-openoffice.html ————————————————————————— ...

  10. ErrorProvider控件使用

    在Windows应用程序开发中,我们可以通过处理输入控件(如TextBox控件)的Validating事件,对用户的输入进行有效性验证,当用户输入不正确时,可以使用错误提示控件ErrorProvide ...