【openpyxl】简单入门——日常工作够用了
适用于Excel 2010 xlsx/xlsm/xltx/xltm
MS office 2010后的文件,都采用XML格式进行压缩,所以Openpyxl不能适用于2010前的Excel文件了。
操作非常简单,直接上手。
名称解释
名词 | 解释 | 备注 |
Excel文件 | 工作薄 | xlsx,xlsm,xltx,xltm |
sheet | 工作表 | 又叫谢特、翔哥 |
row,rows | 行 | |
column,columns | 列 | |
cell | 单元格 |
安装
pip install openpyxl
创建/读取
from openpyxl import Workbook # 创建要用的 from openpyxl import load_workbook # 读文件要用的 # 创建 wb = Workbook() wb.save('谢特.xlsx') # 读取 wb2 = load_workbook('谢特.xlsx')找到处于工作状态的谢特
ws = wb.active # 自动生成新xlsx,一般自带一个谢特,名字叫‘sheet’
新建sheet
ws_1 = wb.create_sheet() #不带参数,就按(sheet,sheet1,sheet2...)命名 ws_2 = wb.create_sheet(0) # 不输入名字参数,只能使用0这个位置参数 ws_3 = wb.create_sheet(-1) # >>>TypeError: expected string or bytes-like object
.create_sheet() 有 title 和 index 两个参数,title是文件名,index有三种状态。
ws1 = wb.create_sheet('从最后插入的谢特') #从最后插入 ws2 = wb.create_sheet('从前面插入的谢特',0) #从前面插入 ws3 = wb.create_sheet('从倒数第二位插入的谢特',-1) #倒数第二位插入
关于sheet的名字
#改sheet的名字 ws_1.title = 'ok'
#设置sheet标签的颜色 ws1.sheet_properties.tabColor = '1072BA'#蓝色
#用名字调取谢特 w4 = wb['ok'] print(w4) #<Worksheet "ok">
#取出工作簿中所有谢特的名字 print(wb.sheetnames) #列表
#>>> ['从前面插入的谢特', 'Sheet', 'ok', 'Sheet2', 'Sheet3', '从倒数第二位插入的谢特', '从最后插入的谢特']
#还可以使用循环打印谢特的名字 for sheet in wb: print(sheet.title)
一个单元格cell
#获取单元格 c = ws['A4'] print(c) #打印出来的不是值,是对象:<Cell 'Sheet'.A4> #给单元格赋值 3种方式 ws['A4'] = 4 d = ws.cell(row=4, column=4, value=10) d.value = 15
多个单元格cell
#选区域 cell_range = ws['A1':'C2'] #选列 cal_C = ws['C'] cal_CtoE = ws['C':'E'] # 多列 #选行 row_10 = ws['10'] row_1to6 = ws['1':'6'] # 多行
遍历
#使用迭代器读取行 for row in ws.iter_rows(min_row=1, max_row=2, max_col=3): for cell in row: print(cell) #使用迭代器读取列 for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): for cell in col: print(cell) # 如果在‘read-only’模式下是不能用的 # 遍历所有行或列 print(tuple(ws.rows)) print(tuple(ws.columns))
这里的 ws.rows 和 ws.columns 说得所有,是指激活过的那种。所谓激活就是只要鼠标点过就算,所有如果要标准化读取固定数据时,最好把不用的单元设置为禁止编辑。
最重要的部分——单元格的数据
# 调用单元格属性 cell.value # 迭代器的values_only参数设置 for row in ws.iter_rows(min_row=1,max_col=3,max_row=4, values_only=True): print(row) for col in ws.iter_cols(min_row=1, max_col=3, max_row=5, values_only=True)print(cell) # 如果在‘read-only’模式下是不能用的