首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPXJ一贯添加空白任务name...is MPXJ优于Interop?

MPXJ一贯添加空白任务name...is MPXJ优于Interop?
EN

Stack Overflow用户
提问于 2011-07-21 12:29:41
回答 1查看 1.3K关注 0票数 0

我试图使用MPXJ从代码中存在的层次结构创建项目文件。需要转换以下层次结构:

etc.)

  • 部门
    • Customer
      • Contract
        • Projects
          • 项目详细信息(开始/结束日期,

我创建.mpx的代码如下所示:

代码语言:javascript
复制
private void BuildExport()
    {

        net.sf.mpxj.ProjectFile file = new net.sf.mpxj.ProjectFile();
        net.sf.mpxj.ProjectCalendar cal = file.addDefaultBaseCalendar();

        //Microsoft.Office.Interop.MSProject.Application projApp = new Microsoft.Office.Interop.MSProject.Application();
        //projApp.Visible = true;
        //projApp.FileNew();

        string firstDate = string.Empty;

        foreach (IZCpTreeViewItem div in Divisions)
        {
            net.sf.mpxj.Task divTask = file.addTask();
            divTask.setName(div.Name);

            //Microsoft.Office.Interop.MSProject.Task newTask = projApp.ActiveProject.Tasks.Add(div.Name);

            //newTask.OutlineLevel = 1;

            foreach (IZCpTreeViewItem cust in div.Subitems)
            {
                net.sf.mpxj.Task custTask = null;

                if (cust.Subitems.Count > 0)
                {
                    custTask = divTask.addTask();
                    custTask.setName(cust.Name);
                }                    

                //Microsoft.Office.Interop.MSProject.Task custTask = newTask.OutlineChildren.Add(cust.Name);

                //custTask.OutlineLevel = 2;

                foreach (IZCpTreeViewItem contractVm in cust.Subitems)
                {
                    net.sf.mpxj.Task contTask = custTask.addTask();
                    contTask.setName(contractVm.Name);

                    //Microsoft.Office.Interop.MSProject.Task contractTask = custTask.OutlineChildren.Add(contractVm.Name);

                    //contractTask.OutlineLevel = 3;

                    foreach (ZCpProjectViewModel proj in (contractVm as ZCpContractViewModel).Projects)
                    {
                        net.sf.mpxj.Task projTask = contTask.addTask();
                        projTask.setName(proj.Name);

                        //Microsoft.Office.Interop.MSProject.Task projTask = contractTask.OutlineChildren.Add(proj.Project.Name);

                        //projTask.OutlineLevel = 4;

                        foreach (ZCpProjectDetailViewModel detail in proj.ProjectDetail)
                        {
                            net.sf.mpxj.Task projDTask = projTask.addTask();
                            projDTask.setName(detail.ProjectDetail.CostClass);
                            projDTask.setStart(detail.StartDate.HasValue ? new java.util.Date(detail.StartDate.ToString()) : null);

                            //Microsoft.Office.Interop.MSProject.Task projDetailTask = projTask.OutlineChildren.Add(detail.ProjectDetail.CostClass);

                            //projDetailTask.Start = String.Format("{0}", detail.StartDate.ToString());
                            //projDetailTask.Finish = String.Format("{0}", detail.EndDate.ToString());

                            //projDetailTask.OutlineLevel = 5;
                        }
                    }
                }
            }
        }

        net.sf.mpxj.writer.ProjectWriter writer = new MPXWriter();
        writer.write(file, "example.mpx");
    }

注释掉的代码是我在找到MPXJ之前使用的互操作代码。我的问题是,在运行这个块之后,我的.mpx文件中有一些空白的客户(尽管我在添加这些客户时设置了断点,并确保名称不是空的)。我还需要设置其他什么东西来确保所有的名称都被使用了吗?

我应该回到使用难以置信的慢(17分钟来创建6000个任务)互操作代码。是否有一种方法可以使用interop写入Projcet文件而不打开Project文件。

谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-26 12:26:49

和Ryan谈过线下,看看他的数据-这是我们发现的。

Ryan可以使用MPXJ生成MPX和MSPDI文件,每个任务的属性集最少。在上面显示的示例代码中,只提供了一个名称和开始日期。在MPX和MSPDI文件中,所有任务名称都按预期显示。

当在Project 2003或Project 2007中打开时,所有任务名称都是可见的.但是,如果开始遍历文件并折叠任务层次结构(如果是Ryan生成的数据,则折叠客户级别下的所有任务),偶尔其中一个任务将被排除在外。该任务的所有数据将简单地消失,任何扩展和折叠任务层次结构都不会使其恢复。

在Project 2010中,这种行为似乎更糟糕,在项目加载时,许多任务名称都是空白的。

看起来这是一个与导入没有特定属性的文件有关的奇怪的MS问题。在这种情况下,瑞安增加了一个完成日期,他的出口,这似乎起到了作用。当在Project 2010中打开时,包含finish date属性的文件将正确显示所有任务名称。当在Project 2003中打开时,我无法报告原始文件中随机出现的“消隐”问题。

在更一般的说明中,有一个随MPXJ附带的示例类,名为MpxjCreate,它提供了一个示例,说明在more中打开用MPXJ创建的文件时,所需的最小属性集,以确保任务、资源和资源分配按预期显示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6776064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档