openpyxl库的使用
一、认识Excel文件
- Excel文件也被称做工作簿(workbook)。
- 每个工作簿可以包含多个工作表(sheet)。用户当前查看的表或关闭Excel前最后查看的表,被称为活动表。
- 每张表都是由行和列组成。列是以A开始的字母表示,行是以1开始的数字表示。
- 由特定行和列所指定的方格被称为单元格(cell)。每个单元格都可以包含一个数字或文本,这些单元格就构成了这张表。
二、安装openpyxl库
pip install openpyxl
三、创建Excel文件
from openpyxl import Workbook
wb = Workbook()
wb.save('test.xlsx')
四、读取Excel文件
from openpyxl import load_workbook
wb = load_workbook('test.xlsx')
五、常见操作【快速使用】
#! /usr/bin/env python # -*- coding: utf-8 -*- import os from openpyxl import Workbook, load_workbook file_name = 'test.xlsx' file_header = ['字段1','字段2'] # 1、读取文件操作 wb = load_workbook(file_name) ws = wb.active # ws = wb['sheet1'] # ws.title = 'sheet2' #获取表大小 max_row = ws.max_row #获取表最大行数,最小值1 max_column = ws.max_column #获取表最大列数,最小值1 cell_3_2 = ws.cell(row = 3,column = 2).value # 获取第3行第2列单元格的数据 # 以下3种单元格赋值等价 ws.cell(row = 3,column = 2, value='hello world') # 直接修改第3行第2列单元格的数据 ws.cell(row = 3,column = 2).value='hello world' # 直接修改第3行第2列单元格的数据 ws['B3'] = 'hello world' # 直接修改第3行第2列的数据 # 读取指定行的数据 row_5 = [cell.value for cell in ws[5]] # 获取第5行整行的数据 print(row_5) print(list(ws.rows)[0][0].value) # 第1行第1列 print(list(ws.columns)[0][0].value) # 第1列第1行 # wb.remove(ws) # 删除工作表 wb.save(file_name) # 2、文件写入操作 # 文件不存在时,首先创建文件,并写入表头字段 if not os.path.exists(file_name): wb = Workbook() ws = wb.active ws.append(file_header) wb.save(file_name) wb = load_workbook(file_name) ws = wb.active ws.append(['xxx','yyy']) wb.save(file_name)
六、表操作
#创建表
sheet = wb.create_sheet(title,index) #title指定表名,可选,index可以适当指定表的位置,index从0开始
#获取所有表名
sheet_name_list = wb.sheetnames #返回所有表名的一个列表
#获取表
sheet = wb['表名'] #根据表名获取
sheet = wb.active #获取活动表
#获取表名
sheet_name = sheet.title
#修改表名
sheet.title = '新表名'
#获取表大小
max_row = sheet.max_row #获取表最大行数,最小值1
max_column = sheet.max_column #获取表最大列数,最小值1
#如果表中没有数据,则最大行号和列号均为1
#删除表
wb.remove(sheet)
del wb['表名']
七、单元格操作
#获取单元格 cell_B3 = sheet['B3'] #根据坐标获取 cell_B3 = sheet.cell(row = 3,column = 2) #通过cell方法指定行号和列号来获取 #单元格赋值 sheet['B3'] = 'B3' #直接给单元格赋值 cell_B3.value = 'B3' #通过单元格的value属性赋值 sheet.cell(row=10,column=2,value='哈哈') # 给第10行第2列赋值:哈哈 #使用公式 sheet['B3'] = '=AVERAGE(A1:B2)' #使用公式赋值,读取文件的时候,需要设置load_workbook()的参数data_only=True才能读取到数值,否则读取到的是字符串'=AVERAGE(A1:B2)'本身,其它公式如SUM、MAX等操作也是这种格式,里面的坐标指的是单元格所组成矩形区域的左上角和右下角 #获取单元格中的值及属性 value = sheet['B3'].value #取值--'B3' row = sheet['B3'].row #取行号-- 3 column = sheet['B3'].column #取列号 -- 2 column_letter = sheet['B3'].column_letter # 取列名 -- 'B' coordinate = sheet['B3'].coordinate #取坐标 --'B3' #单元格合并和拆分 sheet.merge_cells('A1:C3') #合并后只保留左上角单元格中的数据,其它数据舍弃 sheet.unmerge_cells('A1:C3') #拆分后数据只会赋值给左上角这个单元格 #设置单元格样式 from openpyxl.styles import Font, colors, Alignment #设置字体 sheet['A1'].font = Font(name='bold_itatic_24', size=24, italic=True, color=colors.BLUE, bold=True) #利用单元格font属性,设置字体为:蓝色24号斜体加粗,color参数用16进制数表示的rgb值,比如color='FF0000'(红色) #设置对其方式 sheet['A1'].alignment = Alignment(horizontal='center', vertical='center') #利用alignment属性,设置单元格垂直居中,horizontal参数还可以"left","right"等,vertical参数还可以是"top","bottom"等
八、行和列操作
#列号和字母之间转换 from openpyxl.utils import get_column_letter, column_index_from_string # 根据列的数字返回字母 print(get_column_letter(2)) # B # 根据字母返回列的数字 print(column_index_from_string('D')) # 4 #设置行高和列宽 # 第2行行高 sheet.row_dimensions[2].height = 40 # C列列宽 sheet.column_dimensions['C'].width = 30 # 获取行和列数据 # 获取行数据
sheet[2] # 第2行整行数据构成的tuple
list(sheet.rows) #列表中,每行的单元格构成一个tuple list(sheet.rows)[1]#第2行所有单元格构成的tuple # 获取指定区间数据 sheet['B2':'D6'] #tuple类型,内部还是由每行的单元格构成一个tuple # 获取列数据 list(sheet.columns) #列表中,每列的单元格构成一个tuple #追加行数据 --append(iterable) #append方法添加数据,是从第一个空白行行首开始添加,比如第一行有数据,第二行空白,则数据从第二行开始添加 sheet.append([1,2,3,4,5]) #插入空行----insert_rows( idx, amount=1) #在指定行前面插入amount行空行 sheet.insert_rows(3,2) #在第3行前面插入2个空行 #插入空列---insert_cols(idx, amount=1): #在指定列前插入amount列空列 #删除行数据---delete_rows(idx,amount=1) #从指定行开始,删除amount行数据 sheet.delete_rows(1) #删除第一行数据 sheet.delete_rows(3,2) #从第3行开始,删除2行数据,即删除第3和第4行数据 #删除列数据---delete_cols(idx,amount=1) #从指定列开始,删除amount列数据
最后一定要记得wb.save('xxx.xlsx')来保存文件,文件名相同则替换原文件保存,文件名不同则保存为新命名的文件,原文件保留,一定要记得!一定要记得!一定要记得!