首页 > 编程语言 >Python中使用OpenpyXL操作Excel

Python中使用OpenpyXL操作Excel

时间:2023-12-01 13:22:19浏览次数:46  
标签:sheet OpenpyXL Python list Excel ws table data openpyxl

一、安装openpyxl库

可以使用命令

pip install openpyxl

指定版本与切换国内源请查看pyMySQL库那那一文章的详细解答

Python中使用PyMySQL库连接MySQL数据库 - AiniIT琦玉 - 博客园 (cnblogs.com)

二、读取Excel

1、读取全部

读取excel写法逻辑如下:

读取
# 调用函数,传递文件名
# 获取需要读取的单元表
# 读数据
# 关闭文件

实例:

import openpyxl
#	引用openpyxl

#获取表对象
r = openpyxl.load_workbook('test.xlsx')
#获取当前表的sheet
r_table = r.active
#创建空列表
data_list = []

for x in r_table.values:    # 读取所有的数据以元祖类型返回
    # 将每个遍历出来的值添加到空列表中
    data_list.append(x)
    
# 输出列表中的值
print(data_list)
# 关闭连接
r.close()

我们在获取表的sheet的时候,active只获取在退出表格时点击保存过后的sheet界面,如果想获取sheet,我们可以使用worksheets、sheetnames、和直接指定sheet名称等多种方式,下面开始演示

使用直接引用sheet名称

import openpyxl

#	引用openpyxl

# 获取表对象
r = openpyxl.load_workbook('test.xlsx')
# 获取当前表的sheet
r_table = r['Sheet1']  # 注意这里直接引用了sheet的名称
# 创建空列表
data_list = []

for x in r_table.values:  # 读取所有的数据以元祖类型返回
    # 将每个遍历出来的值添加到空列表中
    data_list.append(x)

# 输出列表中的值
print(data_list)
# 关闭连接
r.close()

image-20231201124807565

使用worksheets方法:

import openpyxl

#	引用openpyxl

# 获取表对象
r = openpyxl.load_workbook('test.xlsx')
# 获取当前表的sheet
r_table = r.worksheets[0]  # 注意这里是用切片方法来选择sheet表格的位置
# 创建空列表
data_list = []

for x in r_table.values:  # 读取所有的数据以元祖类型返回
    # 将每个遍历出来的值添加到空列表中
    data_list.append(x)

# 输出列表中的值
print(data_list)
# 关闭连接
r.close()

#	输出结果为
[('1', '2', '3', '4', '5', '6'), ('7', '8', '9', '0', '11', '12')]

使用sheetnames方法:

这种方法就是通过列表对象直接选择sheet表格一样,只不过通过sheetnames将sheet名称获取到了而已

import openpyxl

#	引用openpyxl

# 获取表对象
r = openpyxl.load_workbook('test.xlsx')
# 获取当前表的sheet
r_table = r[r.sheetnames[0]]
print(r.sheetnames[0])
# 创建空列表
data_list = []

for x in r_table.values:  # 读取所有的数据以元祖类型返回
    # 将每个遍历出来的值添加到空列表中
    data_list.append(x)

# 输出列表中的值
print(data_list)
# 关闭连接
r.close()

#	输出结果为
Sheet1
[('1', '2', '3', '4', '5', '6'), ('7', '8', '9', '0', '11', '12')]

2、按照指定的范围读取

我们需要先设置指定的行和列

实例

import openpyxl


# 根据传递的行和列进行读取
r = openpyxl.load_workbook('test.xlsx')
# 默认是获取关闭保存时所在的excel中的单元表
r_table = r.active
# d_table = r['单元表名称']  # 读取指定的单元表

# 设置外层空列表
data_list = []
# 读取1-2行,第2-第5列的值
# r_table.max_row代表最大行数,但是range方法用的是左闭右开的方式取值,所以要在后面加一,才能读取到最后一行的值
for x in range(1, r_table.max_row+1):     # x代表行数
    # 设置内层空列表
    tmp = []
    # r_table.max_column代表最大列数,但是range方法用的是左闭右开的方式取值,所以要在后面加一,才能读取到最后一列的值
    for y in range(1, r_table.max_column+1):  # y代表列数
        # 将获取到的值添加到内层空列表tmp中
        tmp.append(r_table.cell(x, y).value)
    # 将每一次获取到的值添加到外层列表的data_list中
    data_list.append(tmp)
    
print(data_list)
r.close()

三、写入Excel

写入时,我们也需要引用openpyxl库

写入逻辑如下:

# 写入

# 初始化类,创建单元表格
# 获取单元表
# 写入数据
# 保存

实例

import openpyxl

# 创建一个新的工作簿对象
wb = openpyxl.Workbook()

# 获取工作表对象(sheet)
ws = wb.active
print(ws)

# 设置Sheet名称
ws.title = '学生表'

# 创建一个新sheet,可以指定名称,index表示新创建的工作簿放在第几个位置, index从0开始计数
ws_1 = wb.create_sheet(index=1, title='成绩表')
ws_2 = wb.create_sheet(index=2, title='科目表')

# 获取所有工作表名称
print(wb.sheetnames)

# 方法一:写入单个单元格
ws['A1'] = '姓名'
ws['B1'] = '班级'
ws['c1'] = '年龄'

# 方法二:写入单个单元格(行,列,内容); 也可以直接ws.cell(1, 4, '学校')
ws.cell(row=1, column=4, value='学校')

# 写入多个单元格(追加模式,不会覆盖之前的,从有数据的下一行开始)
ws.append(['王明', '三年级一班', '9岁'])

# 第一列和第三列插入数据,第二列插入[None]值
ws.append(['王五', None, '10岁'])

# 追加第二行数据,过滤空值
# 获取工作表总行数
max_row = ws.max_row
col_values = []
# 遍历第二列所有行
for row in range(1, max_row+1):
    # 获取当前单元格的值
    cell_value = ws.cell(row=row, column=2).value
    # 如果当前单元格的值不为空
    if cell_value is not None:
        # 将当前单元格的值添加到列表中
        col_values.append(cell_value)
print("第二列有 %d 行数据" % len(col_values))
ws.cell(len(col_values)+1, 2, "三年级二班")

# 将新数据追加到最后一行,忽略第二列
data = [['张三', '10岁'], ['李四', '15岁']]
for row in data:
    # 在第二列插入 None 值,实现跳过该列
    row.insert(1, None)
    ws.append(row)

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

在这里插入图片描述

我们在实际操作时,基本上使用的比较多的就是批量多行写入数据

实例

import openpyxl

# 创建表对象
w = openpyxl.Workbook()
# 获取工作对象sheet
x_table = w.active
# 写入单行单列(每一个列个上写数据)
# x_table.append(['a', 'b', 'c', 'd', 'e'])
# 写入多行多列,需要嵌套列表类型,使用循环方式写入
data_list = [
    ['1','2','3','4','5','6'], 
    ['7','8','9','0','11','12']
]
# 遍历写入数据列表
for x in data_list:
    # 将遍历好的数据依次写入工作对象sheet中
    x_table.append(x)
# 保存并设置文件名称
w.save('test.xlsx')

标签:sheet,OpenpyXL,Python,list,Excel,ws,table,data,openpyxl
From: https://www.cnblogs.com/Aniiwuyan/p/17869488.html

相关文章

  • 无涯教程-Python - 处理非结构化数据
    以行和列格式存在的数据,或可以轻松转换为行和列的数据,以便以后可以很好地适合数据库的数据称为结构化数据,例如CSV,TXT,XLS文件等。读取数据在下面的示例中,无涯教程获取一个文本文件并读取该文件,其中分离了其中的每一行,接下来,可以将输出分为更多的行和单词。filename='path\inp......
  • Python中使用PyMySQL库连接MySQL数据库
    一、什么是PyMysqlPyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,PyMySQL遵循Python数据库APIv2.0规范,并包含了pure-PythonMySQL客户端库。二、安装PyMysql可以使用命令pipinstallpymysql如果需要确定版本号,则可以使用以下命令pipinstall<包名......
  • Python中的装饰器
    一、装饰器的作用装饰器是Python中一种强大的编程工具,它允许我们在不修改原始函数代码的情况下,动态地增加功能或修改函数行为。装饰器提供了一种简洁而优雅的方式来修改、扩展或包装函数,使代码更具可读性和可维护性。装饰器的主要作用包括:添加额外的功能或逻辑,如日志记录、性......
  • python装饰器
    装饰器本质上是一个Python函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象Python中的函数可以像普通变量一样当做参数传递给另外一个函数,也可以把一个函数作为返回值,这类函数被称为高阶(Higher-order)函数它经常......
  • python HTTP Server 文件上传与下载
    pythonHTTPServer文件上传与下载实现在局域网(同一WIFI下)文件上传与下载该模块通过实现标准GET在BaseHTTPServer上构建和HEAD请求。(将所有代码粘贴到同一个py文件中,即可使用)所需包基于python3版本实现,python2版本无涉猎importosimportsysimportargparseimport......
  • python装饰器
    importtimedefwrapper(type):print('start------',type)defoutter(fun):definner(*args,**kwargs):start_time=time.time()fun(*args,**kwargs)end_time=time.time()print('ru......
  • python助手
    python助手AssumetheroleofPyAssist,ahighlyskilledAIassistantspecializinginPythonprogramming.AsanexpertinthePythonlanguageanditsecosystem,yourmissionistoprovideguidance,support,andvaluableinsightstousersseekinghelpwithP......
  • 【Python】十六进制、八进制、二进制的写法
    1、十六进制语法:0x开头a=0x1122、八进制语法:0o开头a=0o1123、二进制语法:0b开头a=0b112......
  • 如何在 Python 中做到类似 #ifdef DEBUG
    类似#ifndefNDEBUGdo_something(...)#elsedo_otherthing(...)#endiflogging模块如果有无NDEBUG,只在于是否输出一些信息,那么可以使用logging模块,这是一个用于记录和管理日志信息的标准库,通过配置日志级别,可以控制不同等级的日志的输出。importlogginglogging.basic......
  • 【Python】函数参数
    1、参数默认值语法:deffun(arg1=value,arg2=value):pass有默认值的参数必需放在末尾。2、可变参数语法:deffun(*args):pass可变参数必需放在末尾。args在函数内部是一个元组。3、关键字参数语法:deffun(**args):pass关键字参数必需放在末尾,args在函......