使用Worksheet.Range.Autofilter(字段,标准,运算符)按特定颜色索引/ RGB过滤范围

时间:2015-05-05 21:45:35

标签: c# vb.net excel colors filtering

我正在使用C#进行一些自动excel操作。我一直很难找到如何基于特定颜色自动过滤。

关于这种类型的操作的文档很少,但是我找到了一些VB.net和VBA代码。我似乎无法将代码转换为C#,因为“RGB”无法在VB.net和VBA中使用(请参阅下面的VB.net代码)。

由于此问题没有答案,我想指定需要查看的代码。在Autofilter(Field,Criteria,Operator)中,我需要知道C#Microsoft.Office.Interop.Excel标准,它允许我选择要过滤的颜色。

以下是我的代码:

Excel.Worksheet xs1:
Excel.Range xRange1;
Excel.Range xRange2;
Excel.Range lastrow;
Excel.Range lastcol; 
lastrow = xs1.Rows.End[Excel.XlDirection.xlDown];
lastcol = xs1.Columns.End[Excel.XlDirection.xlToRight];   
xRange1 = xs1.Cells[2, 14];
xRange2 = xs1.Cells[lastrow.Row, 14];

下面选择整个工作表并添加一个自动过滤器(),将其设置为过滤颜色。这工作正常,但我如何选择我想要过滤的颜色?

 xs1.Range["A1", xs1.Cells[lastrow.Row, lastcol.Column]].
 AutoFilter(14,Excel.XlColorIndex.xlColorIndexAutomatic,
 Excel.XlAutoFilterOperator.xlFilterCellColor);

以下是自动过滤器代码在VB.net中的样子。它在excel宏中看起来非常相似。

xs1.Range("A1", xs1.Cells(lastrow.Row, lastcol.Column)).
AutoFilter(Field:=14,Criteria1:=RGB(0,202,255),
Operator:=Excel.XlAutoFilterOperator.xlFilterCellColors)

2 个答案:

答案 0 :(得分:2)

所以这就是你如何挑选任何需要自己解决的可怜灵魂的颜色指数。我无法在互联网上找到它。

xs1.Range["A1", xs1.Cells[lastrow.Row, lastcol.Column]].
AutoFilter(14, xlBook.Colors[33], Excel.XlAutoFilterOperator.xlFilterCellColor);

重要的部分是“xlBook.Colors [33]”。 xlBook是工作簿。 33是颜色指数。

答案 1 :(得分:2)

我没有任何声望点,所以我必须提交答案而不是评论。无论如何,谢谢,谢谢,谢谢。我花了几周时间寻找这个答案,碰巧找到了正确的关键词来找到这篇文章。我注册只是为了回答这个问题!

我的情景并不完全像你的情况,但足够相似,你引导我找到解决方案。所以,我将分享对我有用的东西。我试图使用PowerShell按颜色索引进行过滤。但是,PowerShell不允许RGB值,如上面的VB.net示例中所示。现在,为我的答案做出贡献。如果你在PowerShell中这样做,那么它需要看起来像这样:

$xlFilterCellColor = 8
$xl = New-Object -comobject excel.application 
$xl.Visible = $true
$xl.DisplayAlerts = $False
$wb = $xl.Workbooks.Open("\\path\to\file.xlsx")
$ws = $wb.worksheets.items(1)
$xlCellTypeLastCell = 11
$used = $ws.usedRange
$lastCell = $used.SpecialCells($xlCellTypeLastCell)
$range = $ws.range(A1:$lastCell)
$range.select | out-null
$range.autofilter(1,$wb.colors(6),$xlFilterCellColor)

列出了运算符十进制值here.在上面的代码中,我正在过滤黄色单元格。可以找到单元索引颜色和值here.