excel操作openpyxl插件
安装openpyxl
pip install openpyxl
创建一个工作簿
使用openpyxl没有必要先在系统中新建一个.xlsx,我们需要做的只需要引入Workbook这个类,接着开始调用它。
创建
from openpyxl import Workbook # 实例化 wb = Workbook() # 激活 worksheet ws = wb.active
一个工作簿(workbook)在创建的时候同时至少也新建了一张工作表(worksheet)。你可以通过openpyxl.workbook.Workbook.active()调用得到正在运行的工作表。
注意:该函数调用工作表的索引(_active_sheet_index),默认是0。除非你修改了这个值,否则你使用该函数一直是在对第一张工作表进行操作。
打开已有
from openpyxl import load_workbook wb2 = load_workbook('E:\\全部_原始数据.xlsx')
工作表操作
使用create_sheet()新建一张表
ws1 = wb.create_sheet() # 默认插在工作簿末尾 ws2 = wb.create_sheet(0) # 插入在工作簿的第一个位置
修改表名称
ws1 = wb.create_sheet().title = "最帅" ws2 = wb.create_sheet(0).title = "最丑"
获取工作表
print(wb.get_sheet_names()) # get_sheet_names()获取所有sheet # 通过sheet的name获取sheet ws3 = wb['最帅'] ws4 = wb['最丑']
也可以循环得到所有的工作表
for sheet in wb: print(sheet.title)
更改标签栏背景色
标签栏的背景色默认为白色。你可以通过提供一个RRGGBB颜色码改变标签栏的字体颜色:
在线工具:https://m.fontke.com/tool/rgb/1072ba/
ws.sheet_properties.tabColor = 'FF90A3' ws3.sheet_properties.tabColor = '00FFFF' ws4.sheet_properties.tabColor = '990099'
使用一个单元格
索引直接获得
单元格的值也可以直接赋值
# 通过索引获得 c = ws['A2'] # 直接赋值 ws['A2'] = 'zheng.gu'
用 cell() 方法获取单元格
- 坐标获取(行,列)
- 行列获取
# cell() 坐标 c = ws.cell(3,1) # 通过行列获取 d = ws.cell(row=4,column=1) # 赋值 c.value = 'liangliang' d.value = 'HeHan'
使用多个单元格
使用切片获取多个单元格
# 获取多个单元格 cell_range = ws['A1':'A4'] print(cell_range)
使用iter_rows() 方法获取多个单元格
for row in ws.iter_rows(1,4,1,2): for cell in row: print(cell)
存储数据
数据直接赋值到单元格
ws['A1'] = 'jun.chen'
cell()赋值
e = ws.cell(4,2) e.value = '12%' print(e.value) import datetime f = ws.cell(5,3) f.value = datetime.datetime.now() print(f.value) g = ws.cell(4,3) g.value = '31.51' print(g.value)
保存文件
保存工作簿最简单最安全的方式是使用openpyxl.workbook.Workbook的save()方法
wb.save('new.xlsx')
特别警告:这个操作将会在没有认识提示的情况下用现在写的内容,覆盖掉原文件中的所有内容
获取最大行,最大列
ws = wb['客户信息'] # 因为按行,所以返回A1、B1、C1这样的顺序 for row in ws.rows: for cell in row: print(cell.value)
# A1、A2、A3这样的顺序 for column in ws.columns: for cell in column: print(cell.value)
删除工作表
方法一:remove()
ws = wb['一般'] # 删除‘一般’这张表sheet wb.remove(ws) wb.save('new.xlsx')
方法二:def
del wb['一般'] wb.save('new.xlsx')
设置单元风格
需要导入的类
from openpyxl.styles import Font, colors, Alignment
字体
下面的代码指定了等线24号
,加粗斜体
,字体颜色红色
。直接使用cell的font
属性,将Font对象赋值给它。
bold_itatic_24_font = Font(name='等线',size=24,italic=True,color=colors.RED,bold=True) ws['A1'].font = bold_itatic_24_font wb.save('new.xlsx')
对齐方式
也是直接使用cell的属性aligment
,这里指定垂直居中和水平居中。除了center,还可以使用right、left
等等参数。
ws['B4'].alignment = Alignment(horizontal='center',vertical='center')
设置行高和列宽
# 第2行行高 ws.row_dimensions[2].height = 40 # C列列宽 ws.column_dimensions['B'].width = 30 wb.save('new.xlsx')
合并和拆分单元格
- 所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
- 相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。
# 合并单元格,往左上角写入数据即可 ws.merge_cells('C1:F1') ws.merge_cells('A6:D8')
- 合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
- 如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
- 以下是拆分单元格的代码。拆分后,值回到A1位置。
ws.unmerge_cells('A6:D8')