我在Blue prism中使用以下代码在excel中过滤多标准。 但是我无法过滤不等于场景的多个标准。
Dim wb As Object
Dim excel as Object
Dim range as Object
Try
wb = GetWorkbook(Handle, Workbook)
excel = wb.Application
range = excel.Range(FRange)
Dim listOfValues as Array
listOfValues = Split(FCriteria,";")
wb.worksheets(Worksheet).select
range.select
range.Autofilter(FCol,listOfValues,7)
Success = True
Catch e As Exception
Success = False
Message = e.Message
Finally
wb = Nothing
End Try
请帮我调整脚本
答案 0 :(得分:0)
我几乎可以肯定没有过滤器选项来设置“否定列表”。您可以指定(正)值列表(这是您的代码到目前为止所执行的操作,为此您必须将7
设置为第三个参数),或者您最多可以指定2个单独的条件(在Excel,选择“自定义过滤器”进行设置。
您应该直接在Excel中使用过滤器并尝试按照您的需要进行设置。一旦您满意,请清除过滤器,录制宏并重复过滤。转到VBA编辑器,看看那里有什么。将其转换为C#代码很简单。
可是:
无法通过Excel GUI设置无法通过代码(C#和VBA)进行任何过滤
答案 1 :(得分:0)
我会质疑你要做什么。由于您使用的是Blue Prism,因此您应该尝试访问BP Collection(VB DataTable)中的基础数据,而不是应用过滤器,这是人类可以进一步使用界面的可视化工具。机器人仍然需要对过滤后的数据做一些事情,编写代码以便在循环过程中继续处理数据要容易得多。
否则,请使用' Utilities - Collection Manipulation'的过滤器收集页面。 VBO获取过滤集合。
你也在使用VBA Split功能,你应该在VB中使用Split作为String的方法。
尝试使用'实用程序 - 收集操作'中的新页面。 VBO(未测试):
Dim NewRow As DataRow
Collection_Out = Collection_In.Clone
Dim Select_Concat As String
Select_Concat = "NOT(" & fieldName & " = '" & [String].Join("' OR " & fieldName & " = '", FCriteria.Split(";"c)) & "')"
For Each parentRow As DataRow In Collection_In.Select(Select_Concat)
NewRow = Collection_Out.NewRow
For Each c As DataColumn In NewRow.Table.Columns
NewRow(c.ColumnName) = parentRow(c.ColumnName)
Next c
Collection_Out.Rows.Add(NewRow)
Next parentRow
NewRow = Nothing
Collection_In = Nothing
输入:Collection_In(集合),fieldName(文本),FCriteria(文本)
输出:Collection_Out(Collection)
首先需要将整个范围放入未经过滤的集合(这将是您的Collection_In到此页面,然后将过滤后的集合取出....