获取层级的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. RedHat 6 yum 使用网易源

    . . . . . 刚装好了 RedHat 6 系统,但是使用 yum 的时候总是提示 nothing to do,并且什么都做不了.后来经过一番搜索才知道,红帽的 yum 在线更新是收费的,而且必须 ...

  2. JavaScript 中 类型转换

    转自 https://www.cnblogs.com/wuxiaoshang/p/5835627.html // 转换成字符型 var married = false; alert(married.t ...

  3. [synergy]两台机器公用键盘鼠标

    两台机器公用键盘鼠标 如果是Linux: 下载synergy相关的deb包,然后

  4. ios开发,app调用资源文件到C++的方法

    为了读取资源文件到cpp.供opencv处理,采取的方式是把之前的cpp文件的后缀改成:.mm 然后会出现各种报错,原因是因为命名冲突,前面加上cv::就行. const char* imagePat ...

  5. Linux文本编辑器(九)

    [教程主题]:Linux文本编辑器 [1]vi vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任 何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令. 由于对U ...

  6. 莫衷一是——i+++j 该怎样计算?

    这是一个有趣的计算, 3 个加号相连.那么,究竟是怎样结合的呢?是依照: i + (++j)来运算,还是依照(i++) + j 来运算呢? 这个问题在相似于 C / C++中讨论是没有多大意义的,由于 ...

  7. 【C】——C语言字符串比较函数

    c语言字符串函数详解 void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memm ...

  8. Sword libcurl使用

    libcurl编译 >> ./configure --prefix=/opt/soft/curl --disable-ldap --disable-ldaps >> make ...

  9. 自然语言交流系统 phxnet团队 创新实训 个人博客 (五)

    有关我们这个项目:智能自然语言交流系统,所借鉴的技术有: 第一:我们使用了科大讯飞的在线语音转换,涉及的有文本传给云端服务器的文字转换成语音和本地的语音上传给服务器转换成文字. 涉及的相关的代码有: ...

  10. idea+maven无法自动加载jar包

    没有配置maven的环境变量所致 执行mvn -version进行检测