C# 使用工作表.Range.Autofilter(字段、条件、运算符)按特定颜色索引/RGB筛选范围

C# 使用工作表.Range.Autofilter(字段、条件、运算符)按特定颜色索引/RGB筛选范围,c#,vb.net,excel,colors,filtering,C#,Vb.net,Excel,Colors,Filtering,我正在使用C#进行一些自动excel操作。我一直很难弄清楚如何根据特定的颜色进行自动过滤 关于这种操作的文档很少,但是我找到了一些VB.net和VBA代码。我似乎无法将代码转换为C#,因为“RGB”在VB.net和VBA中不可用(请参见下面的VB.net代码) 由于这个问题没有答案,我想指定需要查看的代码。在Autofilter(字段、条件、运算符)中,我需要了解C#Microsoft.Office.Interop.Excel标准,以便选择要过滤的颜色 下面是我的代码的样子: Excel.Wor

我正在使用C#进行一些自动excel操作。我一直很难弄清楚如何根据特定的颜色进行自动过滤

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

由于这个问题没有答案,我想指定需要查看的代码。在Autofilter(字段、条件、运算符)中,我需要了解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];
下面选择整个图纸并添加一个autofilter(),将其设置为“颜色过滤器”。这很好,但如何选择要过滤的颜色

 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)

所以这就是你为那些需要自己解决的可怜的灵魂挑选颜色指数的方法。我在网上找不到这个

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

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

所以这就是你为那些需要自己解决问题的可怜的灵魂选择颜色指数的方法。我在网上找不到这个

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

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

我没有任何信誉点,因此我必须提交答案而不是评论。不管怎样,谢谢,谢谢,谢谢。我花了几个星期寻找这个答案,碰巧找到了合适的关键词来找到这篇文章。我报名只是为了投票表决答案

我的情况和你的不完全一样,但非常相似,你让我找到了解决方案。所以,我将分享对我有用的东西。我正在尝试使用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)

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

我没有任何信誉点,因此我必须提交答案而不是评论。不管怎样,谢谢,谢谢,谢谢。我花了几个星期寻找这个答案,碰巧找到了合适的关键词来找到这篇文章。我报名只是为了投票表决答案

我的情况和你的不完全一样,但非常相似,你让我找到了解决方案。所以,我将分享对我有用的东西。我正在尝试使用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)

运算符十进制值列在上面的代码中,我正在过滤黄色单元格。如果在VB中工作,可以找到单元格索引颜色和值。。您是否可以将using Microsoft.VisualBasic`程序集添加到您的标题中以访问vb.net功能vb.net语句的外观如何?我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。@MethodMan这是一个好主意,作为最后的备选方案,但我想找到一个C#解决方案,因为它是最可取的。谢谢你的建议。我们将看看是否有其他人能想出一个解决方案。@Blackwood我把它添加到了问题中。如果它在VB中有效。。您是否可以将using Microsoft.VisualBasic`程序集添加到您的标题中以访问vb.net功能vb.net语句的外观如何?我已编辑了您的标题。请参见“”,其中的共识是“不,他们不应该”。@MethodMan这是一个好主意,作为最后的备选方案,但我想找到一个C#解决方案,因为它是最可取的。谢谢你的建议。我们将看看是否有其他人能想出解决方案。@Blackwood我把它加入了问题中。只需使用“ColorTranslator.ToOle(Color.Red)”而不是“xlBook.Colors[33]”,只需使用“ColorTranslator.ToOle(Color.Red)”而不是“xlBook.Colors[33]”