【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’模式下是不能用的

其他高级运用直接看官方文档吧,还有画图什么的。

posted @ 2020-03-05 23:41  王大桃zzZ  阅读(634)  评论(0编辑  收藏  举报