SharePoint Project导入(mpp文件导入)

sharepoint学习笔记

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

特别提醒:使用一段时间之后还是回报组件失败什么的,最后排除之后,由于版本未激活的原因,所以做好按照一个激活过的版本

Project使用导入之后如果不结束Micsoft project进程的话 会一直导致导入的永远是前一个的。也是会照成重复出现80010001 被呼叫方拒绝接收呼叫的一个原因,所以下面代码还需要再加上关闭代码

2015-5-12日新加,使用了中出现的问题

if (prj != null)
                    {

  1. //关闭,但不保存mpp    
                            prj.FileClose(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave, false);
                            prj.Quit(Microsoft.Office.Interop.MSProject.PjSaveType.pjDoNotSave);
                        }

这个是一个例子代码

ApplicationClass prj = new ApplicationClass();   

//打开mpp文件    

 prj.FileOpen("C:/Documents and Settings/Administrator/My Documents/test.mpp",   false, missing, missing, missing, missing, missing, missing, missing,   missing, missing, PjPoolOpen.pjPoolReadWrite, missing, missing, missing, missing);   

//调用名称为testMacro   

prj.Macro("testMacro");   

//关闭,但不保存mpp   

prj.FileClose(PjSaveType.pjDoNotSave, false);   

 prj.Quit(PjSaveType.pjDoNotSave);   


 

 特别提醒1:Microsoft Project Basic组件在低版本里面,面对不同电脑可能不会自动注册,所以下载高版本的就好了

 特别提醒2:使用交互式用户标识的时候,偶尔会发生这样的错误“8000401a 因为配置类型不正确,系统无法开始服务器进程。请检查用户名和密码。”

                     所以还需要在常规那块把身份验证改成“无”,默认是验证是“默认身份”

特别提醒3:还是搞不定的话就在标识那块选择“下列用户”,输入电脑登陆的账户和密码,然后再config.web的system.web节点下添加 <identity impersonate="true" username="您的用户" password="您的密码"/>

 

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文件只有一个,所以循环的时候直接找一个就好了

}

 

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值