我正在使用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)
答案 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)