Python处理Excel的问题方面,设置单元格格式是无法回避的,这里我主要用openpyxl处理。网上这种资料很多,我这里写了一个函数,汇总了一下。
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Font,Border,Side,PatternFill,Alignment
def set_cells(cells,type,color=None):
aligncenter=Alignment(horizontal='center',vertical='center') #居中
sidestyle=Side(border_style='thin')
border=Border(left=sidestyle,right=sidestyle,top=sidestyple,bottom=sidestyle)
for i in cells:
for j in i:
if(type=='percent'):
j.number_format='0.00%'
elif(type=='bold'):
j.style='Pandas'
elif(type=='center'):
j.alignment=aligncenter
elif(type=='border'):
j.border=border
elif(type=='color'):
j.fill = PatternFill("solid", fgColor=color) #solid为样式
#统一列的宽度
def set_width(ws,width):
for i in range(1,ws.max_column+1):
letter=get_column_letter(i)
ws.column_dimensions[letter].width=width
wb=load_workbook(filename)
ws=wb['Sheet1']
rownum=str(ws.max_row) #总行数
letter=get_column_letter(ws.max_column) #最后一列的字母
cells=ws['A1:A100'] #单元格范围
cells=ws['A1:'+letter+rownum] #全部单元格范围
set_cells(cells,'percent') #单元格为百分比
set_cells(cells,'bold') #单元格字体加粗
set_cells(cells,'center') #单元格居中
set_cells(cells,'border') #单元格加边框
set_cells(cells,'color','FF0000') #单元格涂色
set_width(ws,16) #统一所有的列宽为16
wb.save()
如何确定单元格范围呢,比如要取最后一列,那就是
letter=get_column_letter(ws.max_column)
rownum=str(ws.max_row)
所以单元格范围就是
'A1:A'+rownum #取第一列
letter+'1':letter+rownum #取最后一列
'A1:'+letter+'1' #取第一行
'A'+rownum+':'+letter+rownum #取最后一行
’A1:'+letter+rownum #全部行列
注意PatternFill 可以选择多个样式 只是solid最常用