使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)