Python教程 使用openpyxl库来对excel表格进行读写

这篇博客介绍了如何使用Python的openpyxl库来高效处理xlsx格式的Excel表格,包括读取和写入数据,是作者学习过程中的笔记。

Python教程 使用openpyxl库来对excel表格进行读写#

说明:最近因为工作需要,经常需要处理excel表格,为了提高效率通常需要编写python脚本对excel表格进行处理。openpyxl库是一个用来处理xlsx格式表格的python的第三方库。这边博文记录了openpyxl的简单使用教程,也算是我学习过程中的一个笔计。
原英文turorial的连接在这里:https://openpyxl.readthedocs.io/en/stable/tutorial.html

#创建一个新的工作表,工作表名字叫‘我的工作表’,默认插入在所有sheet的最后
ws1 = wb.create_sheet('我的工作表')

#创建一个新的工作表,工作表的名字叫"我的工作表0",插在所有sheet最前面
ws2 = wb.create_sheet('我的工作表0',0)

#创建一个新的工作表,工作表的名字叫做“我的倒数第二个工作表”,插在倒数第一位置前
ws3 = wb.create_sheet('我的倒数第二个工作表',-1)

#更改工作表的名字
ws.title = '我最初的工作表'

#更改工作表标签的颜色可以通过传一个RGB参数给下面的属性
ws.sheet_properties.tabColor = "1072BA"

#可以通过工作表的名字从工作薄中选出想要操作的工作表
ws4 = wb["我最初的工作表"]

#可以通过Workbook.sheetname属性查看工作表中每个工作表的名字
#输出的是所有工作表名字组成的一个列表
print(wb.sheetnames)

#可以采用for循环来遍历一个工作薄中的所有工作表
for sheet in wb :
    print(sheet.title)

#复制一份工作表,(注意复制工作表只能在同一个excell文件内复制,不能再不同文件之间复制)
#复制的工作表默认会在原来的表名字上加一个coye作为新的表名字,并插在所有表的最后
source = wb.active
target = wb.copy_worksheet(source)
print(wb.sheetnames)

#取一个表格中的一个单元(第4行,第A列),c指向这个单元
c = ws['A4']
print(c)
print(c.value)


#修改一个表格中一个单元格的内容(第4行,第A列),如果该单元格没有,那么会先创建再赋值
ws['A4'] = '我给A4赋值啦~'

#也可以采用inrksheet.cell的方式来获取单元格;第4行第2列单元格内容是10,并且d指向这个单元格
d = ws.cell(row=4,column=2,value=10)
print(d.value)

#批注:注意,只要是访问或者给一个单元格赋值,就会在内存中创建一个单元格
#即使啥也不做,这个单元格也会被创建在内存里面,例如下面这个例子就会在内存中创建100x100个cell
#如果一个单元格被直接读取或者是创建的时候没有指定初始值,那么其初始的value是None
for x in range(1,101):
    for y in range(1,101):
        ws.cell(row=x,column=y)

#同时获取很多单元格
#可以通过切片的方式获取一大片单元格(获取第1行第A列到第2行第C列之间的所有单元格)
cell_range = ws['A1':'C2']

#可以按列获取1列或者多列
colC = ws['C']
col_range = ws['C:D']

#可以按行获取1行或者多行
row10 = ws[10]
row_range = ws[5:10]

#也可以采用Worksheet.iter_rows()方法来迭代行;
#iter_rows()方法是迭代行
for row in ws.iter_rows(min_row=1,max_row=2,min_col=1,max_col=3):
    for cell in row:
        print(cell)

#同样的也可以采用Worksheet.iter_cols()方法来迭代列;
#iter_cols()是迭代列,注意,因为性能限制在read-only模式下,Worksheet.iter_cols()方法不可用
for col in ws.iter_cols(min_col=1,max_col=2,min_row=1,max_row=3):
    for cell in col:
        print(cell)

#如果想要迭代一个文件的所有的行或者所有的列,可以采用Worksheet.rows或Worksheet.columns
#注意,因为性能限制,在read-only模式下,Worksheet.columns 不可用
ws = wb.active
ws['C9'] = 'hello world'
print(tuple(ws.rows))
print(tuple(ws.columns))

#Values only模式
#假如,你只是需要工作表中的内容,那么可以通过Worksheet.values属性来访问
#这个迭代器是直接按行来返回工作表中每个单元格的值
for row in ws.values:
    for value in row:
        print(value)

#上面的Worksheet.iter_rows()和Worksheet.iter_cols()迭代的时候也可以指定values_only参数为True,来只返回单元格内容
for row in ws.iter_rows(min_row=1,max_row=9,min_col=1,max_col=3,values_only=True):
    print(row)

#给某一个单元格赋值,如果我们拿到一个Cell,给它的value属性赋值即可
c.value = 'hello,world'
print(c.value)
d.value = 3.14
print(d.value)

#保存文件
#最简单的且最安全的保存工作薄的方式就是调用工作薄的Workbook.save()方法
#但是要注意,如果文件已经存在,这个方法会直接覆盖掉已有文件,而且不会报警
#另外,文件的尾缀不一定非要是.xlsx;单是你不用这个后缀,用其它工具打开文件的时候可能会有啥问题
wb.save('tutorial.xlsx')

#load一个文件(类似于openfile)
from openpyxl import load_workbook
wb2 = load_workbook('tutorial.xlsx')
print(wb2.sheetnames)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值