修改字体样式
Font(name=字体名称,size=字体大小, bold=是否加粗,italic=是否斜体,color=字体颜色)
import os
os.chdir('C:\\Users\\Administrator\\Desktop\\test')
from openpyxl.styles import Font
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
font = Font(name = '思源黑体 Regular',size = 12,bold=True,italic = True,color = 'FF0000' )
cell.font = font
workbook.save(filename='这是一个表格.xlsx')
获取表格中字体的样式
cell.font.属性
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
cell = sheet['A2']
font = cell.font
print(font.name, font.size, font.bold, font.italic)
–> 输出结果为:宋体 11.0 False False
设置对齐样式
Alignment(horizontal=水平对齐模式,vertical=垂直对齐模式,text_rotation=旋转角度,wrap_text=是否自动换行)
关于水平样式和垂直样式具体的设置,可以通过参数配置进行修改
from openpyxl import load_workbook
from openpyxl.styles import Alignment
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
cell = sheet['A1']
alignment = Alignment(horizontal='center',vertical='center',text_rotation=45 )
cell.alignment = alignment
workbook.save(filename='这是一个表格.xlsx')
设置边框样式
Side(style=边线样式,color=边线颜色)
Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
关于边线样式的设置,可以通过参数配置进行修改
from openpyxl.styles import Border,Side
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
cell = sheet['A3']
side = Side(style='thin',color='FF000000')
border = Border(left=side,right=side,top=side,bottom=side)
cell.border = border
workbook.save(filename='这是一个表格.xlsx')
填充
PatternFill(fill_type=填充样式, fgColor=填充颜色)
GradientFill(stop=(渐变颜色1,渐变颜色2,…))
from openpyxl.styles import PatternFill,GradientFill
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
cell_3 = sheet['A3']
pattern_fill = PatternFill(fill_type='solid',fgColor='99ccff')
cell_3.fill = pattern_fill
cell_4 = sheet['A4']
gradient_fill = GradientFill(stop=('FFFFFF','99CCFF','000000'))
cell_4.fill = gradient_fill
workbook.save(filename='这是一个表格.xlsx')
设置行高和列宽
.row_dimensions[行编号].height = 行高
.column_dimensions[列编号].width = 列宽
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
sheet.row_dimensions[1].height = 100
sheet.column_dimensions['B'].width = 40
workbook.save(filename='这是一个表格.xlsx')
合并单元格
.merge_cells(待合并的格子编号)
.merge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
sheet.merge_cells('C1:D2')
sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save(filename='这是一个表格.xlsx')
取消合并单元格
.unmerge_cells(待合并的格子编号)
.unmerge_cells(start_row=起始行号,start_column=起始列号,end_row=结束行号,end_column=结束列号)
from openpyxl import load_workbook
workbook = load_workbook(filename = '这是一个表格.xlsx')
sheet = workbook.active
sheet.unmerge_cells('C1:D2')
sheet.unmerge_cells(start_row=7,start_column=1,end_row=8,end_column=4)
workbook.save(filename='这是一个表格.xlsx')
综合应用
import os # 导入系统模块
os.chdir('D:\\shiyan\\OFFICE\\EXCEL1') # os.chdir() 方法用于改变当前工作目录到指定的路径
from openpyxl import Workbook # 导入openpyxl模块相关子模块
from openpyxl import load_workbook
from openpyxl.styles import Font
from openpyxl.styles import PatternFill
workbook = load_workbook(filename = '阿里云天池电商婴儿用户数据.xlsx') # 打开文件
sheet = workbook.active
workbook_1 = Workbook() # 创建新文件对象
sheet_1 = workbook_1.active # 实例化sheet对象
def return_col_or_row(content): # 返回数据所在的行列
data_size = sheet.dimensions # 获取表格的尺寸大小
size_ls = data_size.split(":") # 分割成含两个字符串的列表
col_min,row_min,col_max,row_max = size_ls[0][0],size_ls[0][1],size_ls[1][0],size_ls[1][1:] # 取出行列的数值
row_ls = [] # 定义行的空列表
col_ls = [] # 定义列的空列表
for col in range(ord(col_min),ord(col_max)+1): # 遍历列,ord('a')表示a在ASSCLL码中的序号,为97
for row in range(int(row_min), int(row_max)+1): # 遍历行,int(row_min)表示把str类型数据转换成int数据
if sheet[chr(col)+str(row)].value == content: # chr() 返回一个对应的字符。找到数据的行列
col_content = chr(col) # 指定数据的列
row_content = str(row) # 指定数据的行
col_ls.append(col_content) # 加入列的列表
row_ls.append(row_content) # 加入行的列表
return(col_ls,row_ls) # 返回数据所在的行列
col_buy_mount = return_col_or_row('buy_mount')[0][0] # 取出第一个数据的列数
col_year = return_col_or_row('day')[0][0] # 取出第二个数据的列数
data_col_buymount = sheet[col_buy_mount] # 第一个数据对应的列
data_col_year = sheet[col_year] # 第二个数据对应的列
data_row = [] # 定义一个空的数据行列表
for i in range(len(data_col_year)): # 遍历列数据
if isinstance(data_col_year[i].value, int) and int(str(data_col_year[i].value)[:4]) >2014 and isinstance(data_col_buymount[i].value, int) and data_col_buymount[i].value >5:
# isinstance() 函数来判断一个对象是否是一个已知的类型,找到day在2014年以后,buy_mount中大于5的数据
print('buy_mount的数值为{},对应的时间日期是{}'.format(data_col_buymount[i].value,data_col_year[i].value)) # 输出数据内容
data_row.append(data_col_year[i].row) # 写入列表
print('\n筛选后满足要求的数据行列表输出为:{}\n'.format(data_row)) # 输出列表
data_row.insert(0,1) # 在数据的开头插入1
j = 1 # 第一行
for row in data_row: # 遍历数据行
for col in range(ord('A'),ord('G')+1): # 遍历A-G列
sheet_1[chr(col)+str(j)] = sheet[chr(col)+str(row)].value # 把数据所在行的每一列数据写入到sheet_1的表格中
print('写入第{}行数据'.format(j),end = ' ') # 从第一行开始输出行数
j += 1 # 跳到下一行继续输入数据
print('\n完成任务!辛苦了!\n') # 完成任务
data_buy_mount = sheet_1[return_col_or_row('buy_mount')[0][0]] # 取出新表格中buy_mount这一列
for cell in data_buy_mount: # 遍历列
if isinstance(cell.value,int) and cell.value >10: # 如果数据是整数并且大于10
cell.fill = PatternFill(fill_type='solid',fgColor='FF0000') # 背景标为红色
cell.font = Font(color='FFFFFF') # 字体标为白色
print('数据标记完成') # 输出标记完成
workbook_1.save(filename='办公自动化第二个作业完成.xlsx') # 保存表格文件
print('\n辛苦了!') # 结束