最近一直在做项目里的自动化的工作,为了是从繁琐重复的劳动中挣脱出来,把精力用在数据分析上。自动化方面python是在好不过了,不过既然要提交报表,
就不免要美观什么的。pandas虽然很强大,但是无法对Excel完全操作,现学vba有点来不及。于是就找到这个openpyxl包,用python来修改Excel,碍于水平
有限,琢磨了两天,踩了不少坑,好在完成了自动化工作(以后起码多出来几个小时,美滋滋)。
在这里写下这两天的笔记和踩得坑,方面新手躲坑,也供自己日后查阅。如有问题,还请见谅并指出,多谢。
from openpyxl import load_workbook
from openpyxl.styles import colors, Font, Fill, NamedStyle
from openpyxl.styles import PatternFill, Border, Side, Alignment
# 加载文件
wb = load_workbook('./5a.xlsx')
- workbook: 工作簿,一个excel文件包含多个sheet。
- worksheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
- cell: 单元格,存储数据对象
文章所用表格为:
操作sheet
# 读取sheetname
print('输出文件所有工作表名:\n', wb.sheetnames)
ws = wb['5a']
# 或者不知道名字时
sheet_names = wb.sheetnames
ws2 = wb[sheet_names[0]] # index为0为第一张表
print(ws is ws2)
输出文件所有工作表名:
['5a']
True
# 修改sheetname
ws.title = '5a_'
print('修改sheetname:\n', wb.sheetnames)
修改sheetname:
['5a_']
# 创建新的sheet
# 创建的新表必须要赋值给一个对象,不然只有名字但是没有实际的新表
ws4 = wb.create_sheet(index=0, title='newsheet')
# 什么参数都不写的话,默认插入到最后一个位置且名字为sheet,sheet1...按照顺序排列
ws5 = wb.create_sheet()
print('创建新的sheet:\n', wb.sheetnames)
创建新的sheet:
['newsheet', '5a_', 'Sheet']
# 删除sheet
wb.remove(ws4) # 这里只能写worksheet对象,不能写sheetname
print('删除sheet:\n', wb.sheetnames)
删除sheet:
['5a_', 'Sheet']
# 修改sheet选项卡背景色,默认为白色,设置为RRGGBB模式
ws.sheet_properties.tabColor = "FFA500"
# 读取有效区域
print('最大列数为:', ws.max_column)
print