php解析mpp文件中的资源
获取层级的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文件中的资源的更多相关文章
- php解析mpp文件中的多级任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 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> ...
- Windows Store App 全球化:引用分离资源文件中的资源
大部分应用程序仅需要单个默认资源文件,例如Strings/zh-CN/Resources.resw,但是在某些应用程序中,最好将资源分离到多个资源文件中,以便更好地组织资源内容,这样就需要考虑如何引用 ...
- C#调用Resources.resx资源文件中的资源
使用到了.NET中的资源文件,也就是Resources.resx,于是就学会了如何调用资源文件中的资源.首先,资源文件可以从项目属性中的资源标签添加.比如,我添加一个图片,叫做aaa.png,添加入资 ...
- php解析mpp文件
php没有找到相应的包 Java的mpxj可以实现 所以借助JavaBridge.jar 1.安装jdk,设置环境变量(我的版本jdk1.8.0_131) 2.下载mpjx 在http://www.m ...
- 利用“反射”动态加载R文件中的资源
前几天做一个Android下面数据库相关的应用.用ListVIew展示表中数据的时候我希望能给表中每一条记录,加一个展示的图片.但是用数据库保存图片是比较难搞的.于是就把所需图片都保存到res下的dr ...
- 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 ...
随机推荐
- eclipse mars 4.5.1 自定义工具栏
window>>perspective>>Customize Perspective
- TCC分布式事务
https://github.com/changmingxie/tcc-transaction
- [Linux]基本I/O重定向
在我们设置定时任务的时候经常会使用标准输出和标准错误输出.这个在Linux是一个非常重要的概念,而且这个很有用.程序应该有数据库的来源端.数据的目的端,以及报告问题的地方,它们被称为标准输入.标准输出 ...
- Instant Django 1.5 Application Development Starter
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic d ...
- Linux定时任务Crontab命令详解_转
转自:Linux定时任务Crontab命令详解 (部分修改) linux 定时系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服 ...
- 枚举Enum和常量0之间的恩怨
1,任何为0的常量表达式都能隐式的转换成枚举Enum. 对于这一点,在程序中没少吃苦头.特别是对于函数重载的情况,往往让人一头雾水. 看看下面的代码(摘自MSDN),你能猜到输出吗? public e ...
- 数组新增,修改json数据
1.向数组中添加json数据 var arr=[]; var json = {"name":"apple","color":"re ...
- JQ 点击指定文本框显示div。点击其他区域隐藏DIV
<input id="username" type="text" style="width:90%;margin-top: 40px;" ...
- radio切换,点击方法onclick
<label><input name="Status1" type="radio" value="first" check ...
- Linux epoll版定时器
#ifndef __MYTIMER_H_ #define __MYTIMER_H_ /*************** 高并发场景下的定时器 *****************/ //定时器回调函数 t ...