通过 Project Interop 在 MPP 中使用多个过滤条件

Multiple Filter conditions in MPP thru Project Interop

我正在使用 MS Project 互操作来自动读取 MPP。实现单列过滤器是有效的,但只是想知道,如何使用 or/add 条件实现多列过滤器?我正在使用以下代码过滤有效的单列:

public string Load(string fileName)
{
            MSProject.ApplicationClass app = null;
            try
            {
                app = new MSProject.ApplicationClass();
                app.Visible = false;

                if (app.FileOpen(fileName, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, MSProject.PjPoolOpen.pjPoolReadOnly, Type.Missing, Type.Missing, Type.Missing, Type.Missing))
                {
                    app.FilterEdit("My New Filter", true, true, true, Type.Missing, Type.Missing, "Resource Names", Type.Missing, "equals", "ResourceNameHere1", Type.Missing, true, true);
                    //app.FilterApply("Using Resource...", "false", "ResourceNameHere1");
                    app.SelectAll();
                    MSProject.Tasks tsk = (MSProject.Tasks)app.ActiveSelection.Tasks;
                }
            }
            catch(Exception e){}
}

问:

如何在condition中多加一个资源名?喜欢使用 and/or 条件将 ResourceName1 和 ResourceName2 一起拉出,或者添加条件以按完成百分比过滤?

更新

既然你想要汇总任务,那么创建一个过滤器是一个不错的选择。以下是如何创建具有 3 个条件的过滤器 --2 个资源和完成百分比:

app.FilterEdit("My New Filter", true, true, true, Type.Missing, Type.Missing, "Resource Names", Type.Missing, "contains", "ResourceNameHere1", Type.Missing, true, true);
app.FilterEdit("My New Filter", true, false, true, Type.Missing, Type.Missing, Type.Missing, "Resource Names", "contains", "ResourceNameHere1", "Or", true, true);
app.FilterEdit("My New Filter", true, false, true, Type.Missing, Type.Missing, Type.Missing, "% Complete", "is less than", "100", "And", true, true);

上一个回答

如果目标是循环执行一组满足特定条件的任务,则无需费心创建过滤器、设置过滤器,然后选择所有可见任务。这是让您入门的伪代码:

For Each t In ActiveProject.Tasks
    If (t.ResourceNames Like "*Name1*" Or t.ResourceNames Like "*Name2*") And t.PercentComplete < 100 Then
        ' do something
    End If
Next t

仅供参考:要获取对任务摘要任务的引用,请使用 OutlineParent 属性。