一、引言
在数据处理和报表比对的工作中,经常需要对Excel中发生变更的单元格进行“更改背景颜色”处理,以便突出显示变更信息。尽管影刀RPA提供了丰富的格式化功能以及“在Excel内指出”功能,但在对“数字格式”不同的不同列进行处理时,既要保留原本的文本格式,又不能改变数字格式的前提下,使用RPA实现的逻辑过于复杂,需用到多次if。本文将介绍一种使用Python脚本批量仅更改Excel单元格背景颜色的高效方法,帮助用户提升数据处理的效率。
例如:

当我获取了一个有背景色的单元格时,会将其“常规“数字格式也一并获取,导致我将这种格式应用于C列(日期类型)和D列(货币类型)时出现问题:

如图所示,如果”从Excel中指出”的数字格式和要“设置格式”区域的数字格式不同,会导致单元格区域的数字类型发生改变。
在处理Excel文件时,我们经常会遇到需要同时处理单个单元格和连续区域的情况。为了实现这一功能,我们将利用openpyxl库,并通过一个自定义函数来判断并处理单个单元格或区域。
具体实现步骤如下:
0、确保要操作的表格已经关闭
1、导入必要的库:使用openpyxl库加载并操作Excel文件(需要先安装openpyxl包)
2、加载工作簿和工作表:通过load_workbook函数加载Excel文件,并选择需要操作的工作表
3、定义背景颜色:使用PatternFill函数定义要应用的背景颜色,默认使用黄色(FFFF00)
4、实现灵活处理:通过自定义函数,判断输入参数是否为单个单元格或区域,并分别进行相应处理
5、保存修改:确保在操作结束后正确保存文件,如果文件未关闭会导致保存失败,脚本会捕获并提示错误
以下是一个使用Python修改Excel中指定区域单元格背景颜色的完整示例代码:
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
def if_danyuange_or_quyu(sheet,fill,i):
try:
# 选择连续区域
for row in sheet[i]: # 替换为你要选择的区域
for cell in row:
cell.fill = fill # 更改单元格背景颜色
except:
# 指定单元格
cell = sheet[i] # 替换为你要更改的单元格
# 更改单元格背景颜色
cell.fill = fill
def Change_the_background(file_path, sheet_t, danyuange,color="FFFF00"):
# 替换为你的Excel文件路径
file = open(file_path, 'r')
# 打开Excel文件
workbook = load_workbook(file_path)
# 选择要操作的工作表
sheet = workbook[sheet_t] # 替换为你的工作表名称
# 设置背景颜色 (这里使用黄色背景)
fill = PatternFill(start_color=color, end_color=color, fill_type="solid")
print(type(danyuange))
if isinstance(danyuange, list):
for i in danyuange:
if_danyuange_or_quyu(sheet,fill,i)
else:
if_danyuange_or_quyu(sheet,fill,danyuange)
# 保存更改
try:
file.close() # 关闭文件句柄
workbook.save(file_path)
except:
print("错误!没法正常保存!请在执行前先关闭Excel")
注意!调用模块之前,请确保操作表格处于关闭状态!否则会因为表格被占用导致openpyxl无法将表格更改后的结果保存


此模块支持三种方式输入(通过danguange参数输入):
1、指定某个单元格(例如:“B3”)
2、指定某个连续区域(例如:“B3:D5”)
3、列表输入(集成上面两种方式,要求:点亮左侧python图标+列表每一项均为字符串类型)
(建议先通过编写的应用,将需标记的单元格都保存在列表中,再将Excel关闭、执行该模块,以提高效率)