码迷,mamicode.com
首页 > 其他好文 > 详细

SharePoint Project导入(mpp文件导入)

时间:2015-01-20 13:50:27      阅读:823      评论:0      收藏:0      [点我收藏+]

标签:

sharepoint学习笔记

http://blog.csdn.net/qq873113580/article/details/20390149

 

1,安装微软project软件 我装的是2010

2,在Net上面测试没问题

3,把代码移植到Sharepoint上面的时候出现了这样的错误

检索 COM 类工厂中 CLSID 为 {36D27C48-A1E8-11D3-BA55-00C04F72F325} 的组件失败,原因是出现以下错误: 80010001 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))。

4,百度各种搜索,网上资料可能是账户权限问题

5,下面是网上找的资料

     -在命令行中输入:dcomcnfg,会显示出“组件服务”管理器

    -打开“组件服务->计算机->我的电脑->DCOM 配置”,找到“Microsoft Project”,单击右键,选择“属性”

    -在“属性”对话框中单击“标识”选项卡,选择“交互式用户””

    -然后找到“安全”,把下面所有的权限都选择自定义,然后添加各种用户全部权限,ErverOne,admin,Net...我胡乱加了很多角色的权限

6,经过上面布置别人都说OK了,然后我自己试了还是不行,心里估计是不是代码问题,检查N便然后和Net版本的对比 代码没问题

7,最后发现在sharepoint里面有句提权代码

SPSecurity.RunWithElevatedPrivileges(delegate
{

//代码写这里面

Microsoft.Office.Interop.MSProject.ApplicationClass prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();//这句代码直接就报错

});

8,估计是权限里面不认sharepoint里面的账户权限所以把new的代码提取出来改成这样

Microsoft.Office.Interop.MSProject.ApplicationClass prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();//这样搞定

SPSecurity.RunWithElevatedPrivileges(delegate
{

//代码写这里面

});

9,下面是如何使用Project导入获取数据的小例子

//程序对象

Microsoft.Office.Interop.MSProject.ApplicationClass prj = new Microsoft.Office.Interop.MSProject.ApplicationClass();

//文件路径

string prjFileName="xxx.mpp";

//读取文件,只需要改prjFileName这个,后面的参数默认赋值就好了
prj.FileOpen(prjFileName, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.MSProject.PjPoolOpen.pjPoolReadOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

foreach (Microsoft.Office.Interop.MSProject.Project proj in prj.Projects)
 {
   foreach (Microsoft.Office.Interop.MSProject.Task task in proj.Tasks)
    {

      //Task就是需要的对象,task.属性名 这里的属性名是没法改的 全是系统自己定义的

       if (task != null)

      {

        //task.OutlineLevel树结构的级别,默认1开始,属性名自己去查吧很多系统定义代表什么的,我不会用Project做东西,就不多说了

       //task.Text1........task.Text30 这些字段用来做自定义的列比较好,也是系统自带的

      }

    }

   break;//这里加break,其实我自己没去深究prj.Projects里面到底几个怎么来,目前用到的Project文件只有一个,所以循环的时候直接找一个就好了

}

 

 

SharePoint Project导入(mpp文件导入)

标签:

原文地址:http://blog.csdn.net/qq873113580/article/details/42915759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!