VS c# 操作 Microsoft Project mpp 文件 并遍历边关系
网上找到资料提供了遍历.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 文件 并遍历边关系的更多相关文章
- VC操作MPP文件
1.背景简介 因需要对Office系列进行程序操作,特需要使用COM编程. Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp. 具体信息见维基百科http:// ...
- c#操作.mpp文件
原文地址:http://mjm13.iteye.com/blog/532404 所需设置 在工程中增加引用Microsoft Project 11.0 Object Library,该引用在co ...
- C# 打开mpp文件(Microsoft object)问题总结
有需求就有解决方案,早上还没有听说过什么是 mpp 文件,下午已经能成功的将功能实现,这难道就是程序员的职业素养?哈哈哈哈 从网上找了很多方法,最后自己找到一个十分简单的打开 mpp 文件的方法: p ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
- Java操作Microsoft Word之jacob
转自: 现在我们一起来看看,用Java如何操作Microsoft Word. jacob,官网是http://danadler.com/jacob 这是一个开源的工具.最新版本1.7 官方 ...
- mpp文件转换成jpg图片,可以用pdf文件做中转站
用project软件做了一个表,发现不能转换成图片,先把mpp文件转换成pdf文件,然后用PS打开pdf文件,存储为jpg格式就行了
- 重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作
原文:重新想象 Windows 8 Store Apps (24) - 文件系统: Application Data 中的文件操作, Package 中的文件操作, 可移动存储中的文件操作 [源码下载 ...
- 【Egret】实现web页面操作PC端本地文件操作
Egret 实现web页面操作PC端本地文件操作: http://edn.egret.com/cn/book/page/pid/181 //------------------------------ ...
- php解析mpp文件中的多级任务
获取层级的project任务 参考 启动javabridge java -jar JavaBridge.jar SERVLET_LOCAL:8089 1.读取mpp文件 $file_path = & ...
随机推荐
- Java入门基础学习,成为一个Java程序员的必备知识
引言 众所周知,Java是一种面向对象的编程语言.您可以在Windows操作系统上编写Java源代码,而在Linux操作系统上运行编译后的字节码,而无需修改源代码. 数据类型 Java 有 2 种数据 ...
- Esp8266 网络结构体
Esp8266建立网络连接相关结构体如下: 结构体头文件espconn.h /** Protocol family and type of the espconn */ enum espconn_ty ...
- 小书MybatisPlus第3篇-自定义SQL
本文档为一个系列,前面章节: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 书接上回,虽然Mybatis Plu ...
- pointer-events:none 的应用
相信很多人都遇到过 Retina屏的1px边框 的问题. 很多人都用 :before,:after 伪类 eg: .div:after { position: absolute; top: 0; ...
- ArcGIS api for javascript querytask 返回结果上限1000的问题
我用的是ArcServer 10.2,打开ArcCatalog找到自己发布的服务,右键Service Properties,左侧点击Parameters,右侧有一个Maximum number of ...
- 04 CMD规范基础使用详解
CMD模块规范 1.1 CMD规范说明 专门用于浏览器端,并且模块的加载是异步的,而且只有模块使用时才会加载执行: CMD规范的语法类似于Commonjs + AMD --定义模块使用AMD语法,暴露 ...
- 题解 洛谷 P3639 【[APIO2013]道路费用 】
不难想到可以\(2^k\)去枚举\(k\)条新边的选择方案,然后加入原图中的边来使图连通,用当前方案的收益去更新答案,但是这样复杂度过不去. 可以先把\(k\)条新边都连上,然后再加入边权从小到大排序 ...
- 面试题六十:n个骰子的点数
把n个骰子扔在地上,求出现和为s的概率 可得n<=s<=6n 方法:定义6n-n+1长度的数组,然后对所有可能出现的组合进行计算,把结果进行计数存进数组:递归 方法二:动态规划,大问题小化 ...
- 数据库(二):初识sql语句
进击のpython ***** 数据库--初识sql语句 前面提到了说,数据库管理系统就像我们曾经做过的输入命令返回结果的socket通信差不多 那既然提到了命令,在MySQL中,有一些基本的语句,就 ...
- seaborn线性关系数据可视化:时间线图|热图|结构化图表可视化
一.线性关系数据可视化lmplot( ) 表示对所统计的数据做散点图,并拟合一个一元线性回归关系. lmplot(x, y, data, hue=None, col=None, row=None, p ...