如何使用Python的xlwings选择Excel非相邻区域并正确着色?
在xlwings中同时选中非相邻单元格/区域(无需循环)的正确方法
你遇到的问题是因为xlwings的Range()构造器传入两个Range对象时,会自动生成一个覆盖两个区域端点的连续矩形区域,而非合并独立的非相邻区域,所以才会把a1:d10整个区域上色。
以下是两种无需循环的正确实现方式:
方法1:使用union()方法
这是xlwings官方推荐的合并非相邻区域的方式:
import xlwings as xw # 连接当前活跃工作簿与工作表 wb = xw.books.active ws = wb.sheets.active # 合并两个非相邻区域 target_range = ws.range('a1:b4').union(ws.range('b8:d10')) # 设置背景色为红色 target_range.color = (255, 0, 0)
方法2:直接使用Excel地址语法
利用Excel原生的非相邻区域表示法(用逗号分隔多个区域地址),直接传入xlwings的range():
import xlwings as xw ws = xw.books.active.sheets.active # 直接通过逗号分隔的地址选中非相邻区域 ws.range('a1:b4, b8:d10').color = (255, 0, 0)
补充说明
- 两种方法都能精准选中目标非相邻区域,不会覆盖中间无关单元格
- 方法2更简洁,适合已知区域地址的场景;方法1更灵活,适合已通过代码获取到Range对象的场景
内容的提问来源于stack exchange,提问作者Ngọc Nguyễn Thị Hồng
相关产品推荐
相关产品推荐

