【python办公自动化(6期)】9.批量处理调整Excel内容

批量处理调整Excel内容

修改字体样式
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辛苦了!')   #  结束

你可能感兴趣的:(Python职场实用技能)