zoukankan      html  css  js  c++  java
  • C# 打开mpp文件(Microsoft object)问题总结

    有需求就有解决方案,早上还没有听说过什么是 mpp 文件,下午已经能成功的将功能实现,这难道就是程序员的职业素养?哈哈哈哈

    从网上找了很多方法,最后自己找到一个十分简单的打开 mpp 文件的方法:

            public void readMpp()
            {
                Object missing = Type.Missing;
                ApplicationClass prj = new ApplicationClass();
                prj.FileOpen("C:/Users/a001/Desktop/项目1.mpp",
                    false, missing, missing, missing, missing, missing, missing, missing,
                    missing, missing, PjPoolOpen.pjPoolReadWrite, missing, missing, missing, missing);
                System.Threading.Thread.Sleep(2000);//睡眠两秒
                string strmpp = "";
                foreach (Project proj in prj.Projects)
                {
                    foreach (Microsoft.Office.Interop.MSProject.Task task in proj.Tasks)
                    {
                        if (task == null)
                            continue;
                        //strmpp += "任务名称:" + task.Name + "," + task.UniqueID + ",资源名称:" + task.ResourceNames + "
    ";//用ajax来请求的时候,此格式非json格式,会报错
                        strmpp += "任务名称:" + task.Name + "," + task.UniqueID + ",资源名称:" + task.ResourceNames;//正确方法
                    }
                }
                prj.FileClose(PjSaveType.pjSave, false);//关闭
                prj.Quit(PjSaveType.pjSave);//关闭
    
                Response.Write(string.Format("{{ "errorcode": {0}, "errormessage": "{1}" }}", 1000, strmpp));
            }

    注意:

    1、使用C#的这种方法打开 mpp 文件时,电脑上必须安装 Microsoft object 这个软件(在测试时本人打开线程观测结果:会先将 Microsoft object 软件打开,而后关闭)

    问题:

    1、ApplicationClass 提示无法嵌入互操作类型,请改用使用的接口,如下:

     解决方案是:将引用 Microsoft.Office.Interop.MSProject 的属性中的 “嵌入互操作类型” 改为false  如下:

     2、上述代码中提到了要线程睡眠两秒,是因为我的 Microsoft object 软件未激活,会提示我是否激活,将这个会话框关闭才能读取到 mpp 文件中的数据,否则将会报错(睡眠两秒的意义就在于给我两秒钟的时间我去关闭这个会话窗,再说一点,激活是要 rmb 的,哈哈)

    如有问题,请留言或及时联系本人。

  • 相关阅读:
    107、Java中String类之判断开头或结尾
    106、Java中String类之使用contains()方法判断子字符串是否存在
    105、Java中String类之利用indexOf()方法判断子字符串是否存在
    104、Java中String类之使用indexOf()等功能查找
    103、Java中String类之compareTo()方法
    102、Java中String类之相等判断(忽略大小写)
    101、Java中String类之判断是否由数字组成
    100、Java中String类之字符串转为大写
    099、Java中String类之字符数组与字符串的转换
    098、Java中String类之charAt()方法
  • 原文地址:https://www.cnblogs.com/ZbsCc/p/11639917.html
Copyright © 2011-2022 走看看