网上找到资料提供了遍历.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. ES6模块与CommonJS模块有什么区别?

    ES6 Module和CommonJS模块的区别: CommonJS是对模块的浅拷贝,ES6 Module是对模块的引用,即ES6 Module只存只读,不能改变其值,具体点就是指针指向不能变,类似c ...

  2. requests接口自动化3-url里带参数的get请求:params

    url里带参数的get请求:用params传参 #2.带参数的get请求,把参数写成字典格式,用params传参 para2={"type":"math"} r ...

  3. ## Java基础(二):变量类型

    Java 变量类型 一.局部变量:类的方法中的变量 局部变量声明在方法.构造方法或者语句块中: 局部变量在方法.构造方语句块中被执行的时候创建,当他们执行完成后,变量被销毁 访问修饰符不能用于局部变量 ...

  4. Go的100天之旅-02基本语法

    基本语法 Go关键字 下面是Go的25个关键字: break default func interface select case defer go map struct chan else goto ...

  5. python实现图片文字提取,准确率高达99%,强无敌!!!

    上次我使用的百度AI开放平台的API接口实现图片的转化,后来有许多小伙伴都私信问我,怎么获取百度AI平台的AK和SK.为了统一回答大家的问题,今天我又使用百度API实现了一个从图片中提取文字和识别身份 ...

  6. FileNotFoundError: [WinError 2] 系统找不到指定的文件。 解决方案

    用Idle运行Python脚本的时候发现如下错误: Traceback (most recent call last): File "C:\Users\DangKai\Desktop\pyt ...

  7. CENTOS下搭建git代码仓库 ssh协议

    centos服务器下搭建git仓库,使用ssh协议管理仓库代码权限    git官网(http://git-scm.com/) 使用ssh协议: 一.安装git,使用yum install git 或 ...

  8. element-ui设置级联选择器表单验证

    data(){<el-form :model="ruleForm" :rules="rules" ref="ruleForm" lab ...

  9. iframe子页面取父页面的变量问题

    iframe包含的子页面,想获取父页面的变量,不能直接获取到. 但是子页面可以访问父页面的方法  window.parent.parentFunctionName();  利用这一点,可以将父页面的变 ...

  10. 印象笔记如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接  印象笔记如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载a ...