使用 Worksheet.Range.Autofilter(Field,Criteria,Operator) 按特定颜色索引/RGB 过滤范围
Posted
技术标签:
【中文标题】使用 Worksheet.Range.Autofilter(Field,Criteria,Operator) 按特定颜色索引/RGB 过滤范围【英文标题】:Filter Range by specific Color Index/RGB using Worksheet.Range.Autofilter(Field,Criteria,Operator) 【发布时间】:2015-07-15 19:49:27 【问题描述】:我正在使用 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];
下面选择整个工作表并添加一个 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)
【问题讨论】:
如果它在 VB 中工作......你能不能只将 using Microsoft.VisualBasic` 程序集添加到你的标题中以访问 vb.net 功能 有效的 VB.Net 语句是什么样的? 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 @MethodMan 作为最终替代方案,这是一个好主意,但是我想找到一个 C# 解决方案,因为它是最首选的。感谢您的建议。我们将看看是否有其他人能想到解决方案。 @Blackwood 我将其添加到问题中。 【参考方案1】:因此,这就是您为任何需要自己弄清楚的可怜人选择颜色索引的方式。我在互联网上的任何地方都找不到这个。
xs1.Range["A1", xs1.Cells[lastrow.Row, lastcol.Column]].
AutoFilter(14, xlBook.Colors[33], Excel.XlAutoFilterOperator.xlFilterCellColor);
重要的部分是“xlBook.Colors[33]”。 xlBook 是工作簿。 33 是颜色索引。
【讨论】:
只需使用“ColorTranslator.ToOle(Color.Red)”而不是“xlBook.Colors[33]”【参考方案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.找到
【讨论】:
以上是关于使用 Worksheet.Range.Autofilter(Field,Criteria,Operator) 按特定颜色索引/RGB 过滤范围的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)