方法一
创建新的表格,将源表格的值写入新表格内(写之前check每个单元格,进行样式设置),这种做法会让“未指定样式的单元格”默认样式写入
# coding=utf-8
import pandas as pd
from openpyxl.styles import Font,PatternFill
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl import Workbook# 读取Excel文件
df = pd.read_excel('C:\\Users\\47651\\Desktop\\123.xlsx')
headers = list(df.columns)# 创建新的Excel
wb = Workbook()
ws = wb.active
ws.title = "Sheet1"for r_idx, row in enumerate(dataframe_to_rows(df, index=False, header=True), 1): # 遍历Excel的每一行for c_idx, value in enumerate(row, 1): # 遍历Excel该行的每一列if headers[c_idx-1] == 'wh' and ('12' in str(value)): # 如果列名为'wh'且值包含'12',则设置字体红色、底色黄色cell = ws.cell(row=r_idx, column=c_idx, value=value)cell.font = Font(color="FF0000") # 字体红色cell.fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # 底色黄色else:ws.cell(row=r_idx, column=c_idx, value=value) # 原值写入新表格(单元格的所有样式会初始化)
wb.save("C:\\Users\\47651\\Desktop\\test_modified.xlsx")
方法二
遍历表格,将“符合条件的单元格”设置样式,其他单元格保持源样式,最后另存excel
# coding=utf-8
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill# 加载Excel
wb = load_workbook('C:\\Users\\47651\\Desktop\\123.xlsx')
ws = wb.active # 获取活动工作表
headers = [cell.value for cell in ws[1]] # 获取标题行for r_idx, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2): # 遍历每一行数据,从第二行开始读写(首行标题)for c_idx, value in enumerate(row, start=1): # 遍历该行的每一列if headers[c_idx-1] == 'wh' and '12' in str(value): # check条件(列名为'wh'且值包含'12')cell = ws.cell(row=r_idx, column=c_idx)cell.font = Font(color="FF0000") # 设置字体为红色cell.fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # 设置填充为黄色
wb.save("C:\\Users\\47651\\Desktop\\123new.xlsx") # 另存修改后的工作簿