繁体   English   中英

如何在 Python 中使用 win32com 按 RGB 单元格颜色自动过滤 Excel

[英]How to AutoFilter Excel by RGB cell color with win32com in Python

首先让我说我不是一个非常熟练的程序员,所以请尽可能简单地回答你的问题,以便我有机会理解:-)

我想弄清楚如何使用 win32com 打开 Excel 并根据单元格背景颜色自动筛选一列。 我想要做的 VBA 代码是这样的:

Selection.AutoFilter
    ActiveSheet.Range("$A$1:$S$613").AutoFilter Field:=2, Criteria1:=RGB(255, _
        153, 0), Operator:=xlFilterCellColor

我可以通过使用黄色的 VBA 颜色常量值来使其工作

ws.Range("B:B").AutoFilter(Field=1, Criteria1=65535, Operator=8)

但是我需要能够过滤更多的颜色,而不仅仅是 VBA 颜色常量 colors。

到目前为止我的代码是:

from win32com.client import constants as c 

excel = win32com.client.gencache.EnsureDispatch("Excel.Application")
excel.Visible = True
wb = excel.Workbooks.Open("path\to\file\filename.xlsm", False, True) 
ws = wb.Worksheets("Sheet1")

ws_current.Range('B:B').AutoFilter(Field=1, Criteria1=65535, Operator=c.xlFilterCellColor)

这适用于按黄色过滤,但我需要能够用 RGB 值替换 Criteria1 字段。

使用此代码:

ws_current.Range('B:B').AutoFilter(Field=1, Criteria1=RGB(255,255,0), Operator=c.xlFilterCellColor)

导致此错误:

Traceback (most recent call last):
  File "C:\Users\UserName\AppData\Roaming\Python\Python38\site-packages\IPython\core\interactiveshell.py", line 3437, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-64-809552ca6582>", line 1, in <module>
    ws_current.Range('B:B').AutoFilter(Field=1, Criteria1=RGB(255,255,0), Operator=c.xlFilterCellColor)
NameError: name 'RGB' is not defined

提前感谢您的任何见解

RGB 宏来自Win32 API由 pywin32在 Python 中实现。

在 Python 中,如果你已经安装了pywin32 (如果你使用的是win32com ,你将拥有),你可以这样写:

from win32api import RGB

n = RGB(255,255,0)
print(n)

产生65535

因此,如果 OP 仅添加from win32api import RGB行,则原始代码应该可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM