通过 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 属性。
我正在使用 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 属性。