如何用Python修改现有考勤Excel单元格颜色?xlwt使用遇报错
解决现有Excel考勤表修改单元格颜色的问题
首先得说清楚,你踩了xlwt的一个关键坑:xlwt只能用来新建并写入.xls格式的Excel文件,完全不支持修改已存在的文件,这就是你遇到问题的核心原因。而且你代码里的df.merge(x,x,y,y,style)完全用错了——这是pandas用来合并数据框的方法,和设置单元格样式半毛钱关系都没有,自然会报错。
要修改现有Excel的单元格颜色,推荐用openpyxl(支持.xlsx格式,无需依赖本地Excel)或者xlwings(适合复杂Excel操作,但需要本地安装Excel),这里给你最常用的openpyxl方案:
步骤1:安装openpyxl
先在命令行里安装依赖:
pip install openpyxl
步骤2:编写修改单元格颜色的代码
下面的代码可以直接加载你现有的考勤Excel,修改指定单元格的颜色后保存:
from openpyxl import load_workbook from openpyxl.styles import PatternFill def set_cell_color(excel_path, target_row, target_col, fill_color="FFFF00"): # 加载已有的Excel文件 wb = load_workbook(excel_path) # 获取要操作的工作表(如果不是默认Sheet1,改成你的表名,比如wb["员工考勤表"]) ws = wb.active # 获取目标单元格(注意:openpyxl的行、列都是从1开始计数的) target_cell = ws.cell(row=target_row, column=target_col) # 设置实心填充颜色,这里的FFFF00对应你原来xlwt里的colour=4(黄色) solid_fill = PatternFill(start_color=fill_color, end_color=fill_color, fill_type="solid") target_cell.fill = solid_fill # 保存修改(可以直接覆盖原文件,也可以换路径存新文件) wb.save(excel_path) # 调用示例:修改第3行第5列的单元格为黄色 set_cell_color("你的考勤表.xlsx", 3, 5)
一些实用提示
- 如果你的考勤表是旧版.xls格式,openpyxl不支持,这时候可以先把文件转成.xlsx格式再操作,或者用
xlrd读取原数据、xlwt新建文件写入修改后的内容(但这种方式需要复制所有原有数据,比较繁琐)。 - 颜色的十六进制码可以自由调整,比如红色是
FF0000、蓝色是0000FF,按需替换即可。 - 如果需要批量修改调班员工的单元格,把要修改的坐标(比如
[(2,3), (5,6)])存成列表,循环调用set_cell_color就行。
内容的提问来源于stack exchange,提问作者Ross_Liu
相关产品推荐
相关产品推荐

