网上找到资料提供了遍历.mpp文件中任务的功能:

http://blog.csdn.net/gxf36/article/details/5253792

=========================================================

但未提供遍历任务边关系(依赖关系)的功能。尝试并经过测试形成如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.MSProject; namespace JDPrj_Demo_DataTransfm
{
class MppIO
{
/// <summary>
/// 获取.mpp文件中所有依赖关系
/// </summary>
/// <param name="filepath"></param>
/// <returns></returns>
public List<Edge> getEdges(string filepath)
{
List<Edge> list = new List<Edge>();
Object missing = Type.Missing;
ApplicationClass prj = new ApplicationClass();
prj.FileOpen(filepath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, PjPoolOpen.pjPoolReadWrite, missing, missing, missing, missing);
Edge edge = null;
int graph = new Random().Next(100000);
//遍历所有工程
foreach (Project proj in prj.Projects)
{
//遍历所有任务
foreach (Microsoft.Office.Interop.MSProject.Task task in proj.Tasks)
{
//遍历任务的依赖关系(边关系)
foreach (TaskDependency dep in task.TaskDependencies)
{
//.mpp任务采用双向链表的方式存储边关系
//只取边的起始任务为当前任务的边,去重
if (dep.From.Index == task.Index)
{
edge = new Edge(graph, dep.From.Index, dep.To.Index, 0);
list.Add(edge);
//根据需要只需去双向链表的一条边,去重
break;
}
}
}
}
return list;
} } /// <summary>
/// 边,任务与任务间,节点与节点间的边
/// </summary>
public class Edge
{
public int graph_id = 0; //图编号
public int start_node = 0; //开始节点
public int end_node = 0; //结束节点
public int weight = 0; //边权重
public Edge() { }
public Edge(int graph_id, int start_node, int end_node, int weight)
{
this.graph_id = graph_id;
this.start_node = start_node;
this.end_node = end_node;
this.weight = weight;
}
}
}

VS c# 操作 Microsoft Project mpp 文件 并遍历边关系的更多相关文章

  1. VC操作MPP文件

    1.背景简介 因需要对Office系列进行程序操作,特需要使用COM编程. Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp. 具体信息见维基百科http:// ...

  2. c#操作.mpp文件

    原文地址:http://mjm13.iteye.com/blog/532404 所需设置    在工程中增加引用Microsoft Project 11.0 Object Library,该引用在co ...

  3. C# 打开mpp文件(Microsoft object)问题总结

    有需求就有解决方案,早上还没有听说过什么是 mpp 文件,下午已经能成功的将功能实现,这难道就是程序员的职业素养?哈哈哈哈 从网上找了很多方法,最后自己找到一个十分简单的打开 mpp 文件的方法: p ...

  4. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  5. Java操作Microsoft Word之jacob

    转自: 现在我们一起来看看,用Java如何操作Microsoft Word.   jacob,官网是http://danadler.com/jacob 这是一个开源的工具.最新版本1.7     官方 ...

  6. mpp文件转换成jpg图片,可以用pdf文件做中转站

    用project软件做了一个表,发现不能转换成图片,先把mpp文件转换成pdf文件,然后用PS打开pdf文件,存储为jpg格式就行了

  7. 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作

    原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...

  8. 【Egret】实现web页面操作PC端本地文件操作

    Egret 实现web页面操作PC端本地文件操作: http://edn.egret.com/cn/book/page/pid/181 //------------------------------ ...

  9. php解析mpp文件中的多级任务

    获取层级的project任务  参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...

随机推荐

  1. [JAVA]《JAVA开发手册》规约详解

    [强制] 使用 Map 的方法 keySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出 UnsupportedOperationExceptio ...

  2. day47 数据库进阶

    目录 一.select查询扩展 1 几个重要关键字的执行顺序 2 where筛选条件 3 group by分组 4 having 分组之后的筛选条件 5 distinct去重 6 order by 排 ...

  3. day28 封装

    目录 一.什么是封装 二.将封装的属性进行隐藏操作 1 如何隐藏: 1.1 强行访问: 1.2 内部逻辑 三.为何要封装 一.什么是封装 封装是面向对象的三大特性中最核心的一个特性 封装<==& ...

  4. Python并发编程——多线程与协程

    Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...

  5. java 面向对象(十二):面向对象的特征二:继承性 (一) 前言

    1.为什么要有类的继承性?(继承性的好处) * ① 减少了代码的冗余,提高了代码的复用性 * ② 便于功能的扩展 * ③ 为之后多态性的使用,提供了前提图示: 2.继承性的格式:class A ext ...

  6. layui弹窗里面 session过期 后跳转到登录页面

    1.在登录页面添加 <script> $(function () { if (top != window) { layer.msg("登录失效", {icon: 5}) ...

  7. Ethical Hacking - GAINING ACCESS(6)

    Server Side Attack Analysing scan results and exploiting target system. Go to the Analysis page and ...

  8. STL源码剖析:仿函数

    仿函数就是函数对象 函数对象: 重载了operator()的类对象 使用起来和普通函数一致,所以称为函数对象或是仿函数 STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义 一 ...

  9. Saas Erp以及分销 助手

    首先贴一下相关的截图 SaasErp 登陆页 Saas Erp主页 Saas Erp 其中的商品页 Saas Erp  打印模板设计页 分销助手登录页/手势密码页/主页 1.SaaS是Software ...

  10. Ubuntu安装Docker(官方文档翻译)

    翻译自Docker官方文档 https://docs.docker.com/engine/installation/linux/ubuntulinux/ 之前因为看不懂官方文档,卡在某个步骤无法完成安 ...