php读取mpp,php解析mpp文件中的前置任务

获取层级的project任务  参考

a713ef82fd3aff17b99284c6b07cffcb.png

启动javabridge

java -jar JavaBridge.jar SERVLET_LOCAL:8089

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.获取任务

获取project的任务

$allTasks = $Filecontent->getChildTasks();

$tasks_size = java_values($allTasks->size());

if($tasks_size){

getChildren($allTasks[0]);

}

说明:

$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['name'] = $child[$i]->getName() . '';

//前置任务

$prev_task = getProcessors($child[$i]);

if ($prev_task) {

$items['prev_task'] = $prev_task;

}

//获取下一级任务

$children = getChildren($child[$i]);

if ($children) {

$items['children'] = $children;

}

$data[] = $items;

}

return $data;

}

获取任务流(即前置任务)具体实现

function getProcessors($task)

{

$items = array();

$rs = '';

$predecessorLinks = $task->getPredecessors();

$size = java_values($predecessorLinks->size());

$data = array();

for ($i = ; $i < $size; $i++) {

$tmp = $predecessorLinks[$i]->getTargetTask()->getUniqueID() . '';

if ($tmp) {

$items[] = $tmp;

}

}

if ($items) {

$rs = implode(',', $items);

}

return $rs;

}

48964f898995699a0e25f8860398cff4.png

f09ec45923c65382a6ae9013129e4aa7.png

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: 1.读取mpp文件 $file_path = &quot ...

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

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

php解析mpp文件

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

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 ...

python解析pcap文件中的http数据包

使用scapy.scapy_http就可以方便的对pcap包中的http数据包进行解析 scapy_http可以在https://github.com/invernizzi/scapy-http下载, ...

Maven让资源文件处理插件能够解析资源文件中的Maven属性

${project.basedir}/src/main/resour ...

Python3解析dex文件

一.说明 1.1 背景说明 看的时候反复听说“PE文件格式”,到Android安全兴起就不断听说“dex文件格式”.意思是看得懂的,但自己不能手解析一番总觉得不踏实,所以决定 ...

随机推荐

AChecker &plus; Selenium2对需要登录的页面进行自动化可访问性测试

前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.   名词解释: 网站可访问性测试:国内基本没有 ...

&lbrack;CrunchBang&rsqb;tint2默认设置

#--------------------------------------------- # TINT2 CONFIG FILE #-------------------------------- ...

Android开发日志问题

以前在Android开发中发现,日志打印好多,调试的时候各种加Log,之后就各种不删除,导致项目后期花大把时间删除日志打印. 学到一个好方法: 在所有尽可能高的父类里面加上一个常量 DEBUG ,一开 ...

js控制父子页面传值(iframe和window&period;open)

在html中,window对象代表浏览器中一个打开的窗口,就像我们C/S中做窗体一样,在该页的window对象就是new了一个新的窗体对象. 就像做C/S开发一样,浏览器是一个软件,每一个网页都是它n ...

【C&plus;&plus;】动态开辟二维数组

二维数组在内存中的分配例如以下: C方式呈现: #include usi ...

一个RESTful&plus;MySQL程序

前言 本章内容适合初学者(本人也是初学者). 上一章内容(http://www.cnblogs.com/vanezkw/p/6414392.html)是在浏览器中显示Hello World,今天我们要 ...

Linux搭建SVN服务器(服务端)

Linux搭建SVN服务器(服务端) 1 安装SVN SVN客户端:TortoiseSVN,官网下载:https://tortoisesvn.net/downloads.html(客户端) # yum ...

一条SQL语句执行得很慢的原因有哪些?&lpar;转&rpar;

一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论. 1.大多数情况是正常的,只是偶尔会出现很慢的情况. 2.在数据 ...

springboot logback 相关使用

参考: https://www.cnblogs.com/EasonJim/p/9159195.html https://blog.csdn.net/tianyaleixiaowu/article/de ...

Java 基础 面向对象和抽象类

面向对象变量 局部变量和成员变量区别 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或者{}语句里面的变量是局部变量 区别二:在内存中的位置不同 成员变量存储在对内存的对象中 局部变 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己写的示例 仅供参考: public static void main(String[] args) { File file; file = new File("e:\\客户管理项目计划V1.0.mpp"); LinkedHashMap infoMap = new LinkedHashMap(); Map userSbMap = new HashMap(); List resourceList = new ArrayList(); String a = readMpp(file, infoMap, userSbMap, resourceList); } public static String readMpp(File file, LinkedHashMap infoMap, Map userSbMap, List resourceList) { MPPFile mpp; String result = ""; try { mpp = new MPPFile(file); LinkedList allList = mpp.getAllTasks(); allList.remove(0); for (int i = 0; i < allList.size(); i++) { Task t = (Task) allList.get(i); Map taskMap = new HashMap(); String flag = t.getUniqueID().toString(); taskMap.put("唯一标识号", t.getUniqueID().toString()); taskMap.put("标识号", t.getID().toString()); taskMap.put("任务名称", t.getName()); taskMap.put("大纲级别", t.getOutlineLevel().toString()); //处理开始时间 Date planStartDate = t.getStart(); String planStart = "-1"; if (planStartDate != null) { planStart = new Long(planStartDate.getTime()).toString(); } //处理完成时间 Date planStopDate = t.getFinish(); String planFinish = "-1"; if (planStopDate != null) { planFinish = new Long(planStopDate.getTime()).toString(); } //处理实际开始时间 Date actStartDate = t.getActualStart(); String actStart = "-1"; if (actStartDate != null) { actStart = new Long(actStartDate.getTime()).toString(); } //处理实际结束日期 Date actStopDate = t.getActualFinish(); String actFinish = "-1"; if (actStopDate != null) { actFinish = new Long(actStopDate.getTime()).toString(); } //处理里程碑 Boolean markedB = t.getMilestone(); String y_or_n = "否"; if (markedB != null) { boolean marked = markedB.booleanValue(); if (marked) { y_or_n = "是"; } } //处理资源 List userList = new ArrayList(); LinkedList resources = t.getResourceAssignments(); if
Microsoft Project 是一款常用的项目管理软件,它使用的文件格式为 .mpp。如果需要解析 .mpp 文件,可以使用 Microsoft Project 软件自带的 API,也可以使用第三方库或者工具实现。 Microsoft Project 提供了 VBA 编程接口,可以通过编写 VBA 宏实现对 .mpp 文件解析。具体步骤如下: 1. 打开 Microsoft Project 软件,按下 Alt + F11 打开 VBA 编辑器。 2. 在 VBA 编辑器,插入一个新的模块。 3. 在模块编写 VBA 代码,使用 Project 对象和 Task 对象来访问 .mpp 文件的数据。例如,以下代码可以输出 .mpp 文件所有任务的名称: ``` Sub ParseMppFile() Dim proj As Project Set proj = Application.ActiveProject Dim task As Task For Each task In proj.Tasks Debug.Print task.Name Next task End Sub ``` 此外,还可以使用第三方库或者工具实现 .mpp 文件解析。例如,有一些 Python 库可以读取和操作 .mpp 文件,如 pympp 和 pywin32。使用这些库,可以在 Python 环境编写代码来读取 .mpp 文件的数据。例如,以下 Python 代码可以读取 .mpp 文件所有任务的名称: ``` import win32com.client app = win32com.client.Dispatch("MSProject.Application") app.Visible = True proj = app.FileOpenEx("path/to/mpp/file.mpp") for task in proj.Tasks: print(task.Name) proj.Close() app.Quit() ``` 需要注意的是,使用第三方库或者工具解析 .mpp 文件可能会受到 Microsoft Project 版本和 .mpp 文件格式的限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值