原文链接:http://www.juzicode.com/python-example-openpyxl-adjust-fill-color
在阅读Excel表格时,如果表格比较大、列数比较多的时候容易出现“串行(hang)”。为了解决这个问题通常同一行填充同一个颜色,相邻行填充不同颜色,就能明显区分不同行的数据。
今天的例子介绍如何在openpyxl中调整不同行的颜色。
下面的例子中表格内容采用faker自动生成,faker用法可以参考: Python轮子:造假高手——faker(数据生成器) 。当然你也可以使用load_workbook()的方法打开本地文件。
1)交替使用2种颜色
下面的例子先用faker生成数据,再自适应调整列宽,最后逐行遍历,交替使用2种颜色将表格的相邻2行填充不同的颜色。
#juzicode.com/VX公众号:juzicode
import re
from openpyxl import Workbook
from openpyxl.styles import PatternFill,GradientFill
from faker import Faker
from tqdm import tqdm
N = 200 # 生成数据条数
# excel表格里中文占2个字符宽度,该方法找出中文字符个数,
# 总长就是中文字符个数加总字符个数
def cal_len(text):
pattern = re.compile(r'[\u4e00-\u9fa5]')
cn_char = re.findall(pattern,text) # 查找中文字符
lent = len(cn_char) + len(text)
return lent
# 初始化PatternFill(fill_type='solid',fgColor='959392')
fak = Faker('zh_CN')
wb = Workbook()
ws = wb.active
# 添加表头
p = fak.profile()
print(p.keys())
ws.append(list(p.keys()))
# 生成个人数据
for i in tqdm(range(N)): # 添加N行数据
p=fak.profile()
p['current_location'] = str(p['current_location']) # excel不识别的数据类型转换为字符串
p['website'] = str(p['website'])
ws.append(list(p.values())) # 添加数据
# 调整列宽,自适应
for i,col in enumerate(ws.columns):
max_lent = 0
for cell in col: # 查找最长单元格
lent = cal_len(str(cell.value))
if lent > max_lent:
max_lent = lent
width = max_lent + 2 # 增加2个字符宽度,显示不会太紧凑
c = col[0].column_letter
print('col=%s,width=%d' % (c, width))
ws.column_dimensions[c].width = width
# 逐行填充颜色
for i,row in enumerate(ws.rows):
if i % 2 == 0:
fill = PatternFill(fill_type='solid',fgColor='00CCFFCC')
else:
fill = PatternFill(fill_type='solid',fgColor='00CCFFFF')
for r in row:
r.fill = fill
# 保存表格
wb.save('faker-profile-行颜色渐变.xlsx')
2)多行使用不同背景色
这个例子同样用faker生成数据,自适应调整列宽,最后逐行遍历,使用不同的颜色填充各行。
#juzicode.com/VX公众号:juzicode
import re
from openpyxl import Workbook
from openpyxl.styles import PatternFill,GradientFill
from openpyxl.styles.colors import Color
from faker import Faker
from tqdm import tqdm
N = 200 # 生成数据条数
# excel表格里中文占2个字符宽度,该方法找出中文字符个数,
# 总长就是中文字符个数加总字符个数
def cal_len(text):
pattern = re.compile(r'[\u4e00-\u9fa5]')
cn_char = re.findall(pattern,text) # 查找中文字符
lent = len(cn_char) + len(text)
return lent
# 初始化PatternFill(fill_type='solid',fgColor='959392')
fak = Faker('zh_CN')
wb = Workbook()
ws = wb.active
# 添加表头
p = fak.profile()
print(p.keys())
ws.append(list(p.keys()))
# 生成个人数据
for i in tqdm(range(N)): # 添加N行数据
p=fak.profile()
p['current_location'] = str(p['current_location']) # excel不识别的数据类型转换为字符串
p['website'] = str(p['website'])
ws.append(list(p.values())) # 添加数据
# 调整列宽,自适应
for i,col in enumerate(ws.columns):
max_lent = 0
for cell in col: # 查找最长单元格
lent = cal_len(str(cell.value))
if lent > max_lent:
max_lent = lent
width = max_lent + 2 # 增加2个字符宽度,显示不会太紧凑
c = col[0].column_letter
print('col=%s,width=%d' % (c, width))
ws.column_dimensions[c].width = width
# 逐行填充颜色
for i,row in enumerate(ws.rows):
fill = PatternFill(fill_type='solid',fgColor=Color(indexed=i%64))
for r in row:
r.fill = fill
# 保存表格
wb.save('faker-profile-行颜色渐变2.xlsx')
更多openpyxl实例公众号【桔子code】后台回复【openpyxl】获取下载链接。