python openpyxl模块学习笔记

python openpyxl模块学习笔记


前言

小白一枚,多多指教!
欢迎指错!!!

一、openpyxl库

openpyxl库是一个能够读写Excel的python库(好像至少是2010版Excel)

二、使用基本操作

1.创建一个新的Excel表格/打开一个已经存在的Excel表格

1>创建一个新的Excel表格

代码如下(示例):

from  openpyxl import  Workbook

wb = Workbook() # 实例化
ws = wb.active #激活 worksheet

'''这里加上读写操作代码块'''

wb.save('workbook1.xlsx')#保存

2>打开一个已存在的Excel表

from openpyxl import load_workbook

wb = load_workbook('workbook1.xlsx')#实例化
ws = wb.active#激活当前活跃的工作表,获取当前活跃的sheet对象
#或者是ws = wb['Sheet']

'''这里加上读写操作代码'''

wb.save('workbook1.xlsx')#保存文件

ws = wb.active可以写成ws = wb[‘Sheet’]
这两个的作用相同都是获取一个sheet对象
前者是获取当前活跃的工作表作为对象,后者是按名称获取Excel中的工作表作为对象(二者可根据需要来选择使用)

2.写入数据

1>指定单元格进行填写

from openpyxl import Workbook

wb = Workbook()
ws = wb['Sheet']# 获取Sheet工作表对象

# 设置内容
ws['A1'] = 'Hello World!'#在A列第1行填入 Hello World!

import datetime#一般的import都放在前面,这里为了方便阅读
ws['A2'] = datetime.datetime.today()#在A2单元格填入现在的时间

wb.save('new_sample.xlsx')#保存

2>一行一行进行填写

from openpyxl import Workbook
wb1 = Workbook()
ws1 = wb1.active
ws1.append(['A1','B1','C1','D1'])
ws1.append([1,2,3,4,])
wb1.save('workbook1.xlsx')

效果就是这样子
效果就是这样子的

3.读出数据

首先不得不说一下三个生成器:
rows:按行获取单元格(cell对象)
columns:按列获取单元格(cell对象)
values:按行获取单元格内容(单元格数据)
注:对于以上三者的具体定义,笔者不是很理解,values获取的好像是元组类型

可以多试试打印输出来探索每一个的作用,可意会不可言传(能力有限,不会描述- .-)

1>打印出某一个单元格的内容

from openpyxl import load_workbook
wb1 = load_workbook('workbook1.xlsx')
ws1 = wb1.active
a1 = ws1['A1']
print(a1)#打印结果为<Cell 'Sheet'.A1> a1应该是为类里的一个cell对象
print(type(a1))#打印结果为<class 'openpyxl.cell.cell.Cell'>,
print(a1.value)#打印结果为 A1 (.value ->单元格的值。加上.value之后应该是打印 对象a1的属性值。)
wb1.save('workbook1.xlsx')

注:这里对a1 及其type是笔者的猜测,静候评论区大佬来解答~~

2>打印出某一列的值

from openpyxl import load_workbook
wb1 = load_workbook('workbook1.xlsx')
ws1 = wb1.active
a = ws1['A']
for i in a:
    print(i.value)
wb1.save('workbook1.xlsx')

3>打印出每一个单元格的值(一行一行打印)

from openpyxl import load_workbook
wb1 = load_workbook('workbook1.xlsx')
ws1 = wb1.active

for cell in ws1.values:
    print(*cell)
    
wb1.save('workbook1.xlsx')

打印结果如下
在这里插入图片描述
注:cell在这里是元组类型,打印时前面加*打印,笔者也不知道为什么能达到如此效果,烦请大佬评论区解答~~

总结

问题与错误请在评论区指出

猜你喜欢

转载自blog.csdn.net/qq_51182221/article/details/112344539