获取层级的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. RabbitMQ文档翻译——Hello World!(下)

    Receiving That's it for our sender. Our receiver is pushed messages from RabbitMQ, so unlike the sen ...

  2. C语言 · 乘法运算

    算法提高 乘法运算   时间限制:1.0s   内存限制:512.0MB      问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有 ...

  3. Selenium (4) —— Selenium是什么? WebDriver是什么?做什么?(101 Tutorial)

    Selenium (4) -- Selenium是什么? WebDriver是什么?做什么?(101 Tutorial) selenium版本: v2.48.0 (Standalone Seleniu ...

  4. flume中HdfsSink参数说明

    flume到hdfsSink: type hdfs path 写入hdfs的路径,需要包含文件系统标识,比如:hdfs://namenode/flume/webdata/ 可以使用flume提供的日期 ...

  5. 微信公众平台开发 - 动手篇。使用weinxinFundation开始一个微信公众平台的开发

    本文主要讲解如何使用 weinxinFundation 进行二次开发. 步骤如下: 1.创建新的web项目. 在eclipse里新建一个dynamicly web project,比如本文叫weixi ...

  6. 【oneday_onepage】——Microsoft adds a wing, more closets to the homes of SharePoint Online tenants

    To prevent SharePoint Online customers from feeling boxed in, Microsoft wants to improve the way the ...

  7. Entity Framework应用:根据实体的EntityState状态实现增删改查

    在上一篇文章中,我们讲解了使用EF实现简单的增删改成,在这篇文章中我们使用实体的EntityState状态来优化数据的增删改查. 一.修改数据 上篇文章中的修改数据的方法是EF官方推荐的方式,即先查询 ...

  8. IDEA 中 同一个微服务 按照多个端口启动

    网上讲这个东西的很多,抄来抄去的,大部分类似,多数没讲明白为什么那么配置. 譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配区别 ...

  9. MFC函数——CWnd::OnEraseBkgnd

    CWnd::OnEraseBkgnd afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 如果它擦除了背景,则返回非零值:否则返回0. 参数: pDC 指定了设备环 ...

  10. [hadoop读书笔记] Hadoop下各技术应用场景

    1.数据采集 对于数据采集主要分为三类,即结构化数据库采集,日志和文件采集,网页采集. 对于结构化数据库,采用Sqoop是合适的,可以实现结构化数据库中数据并行批量入库到hdfs存储.对于网页采集,前 ...