python使用openpyxl操作excel

文章目录

前提

使用前需要先安装下这个模块

bash 复制代码
pip install openpyxl

读取已有excel

情况2:读取本地已存在的excel,用来后续进行读写等处理。

方法:load_workbook(已有excel文件路径),如果路径中excel文件不存在,将会报错。​​​​​​​

bash 复制代码
from openpyxl import load_workbook
# 读取已存在的excel工作薄
wb = load_workbook('excel_test.xlsx')

创建一个excel工作簿对象

进行读写、修改等操作前,需要创建一个可供操作的excel工作簿对象。

使用Workbook类,新建一个excel工作簿对象,用来后续进行读写等处理。​​​​​​​​​​​​​​

bash 复制代码
 
from openpyxl import Workbook
# 新建一个excel工作簿对象
wb = Workbook()
# 保存新建的excel工作簿
wb.save('excel_test.xlsx')
  • (1)该类在新建excel工作簿的同时,也会新建了一个工作表(默认名为:Sheet)。
  • (2).save(保存路径)方法,对excel进行保存,写入或修改excel后,都需要保存。
  • (3)如果当前保存路径下,已经有一个同名excel文件,不会提示且原文件被覆盖。

创建excel工作簿中的工作表

openpyxl提供了可自定义工作表的方法。

工作表,即是常见说法的【Sheet】。

创建自定义名称的工作表,语法如下:

bash 复制代码
Workbook.create_sheet(title,index)

title:工作表的名称,可省略,系统自动命名(Sheet, Sheet1, Sheet2, ...)。
index:工作表的位置,可省略,默认插在工作表末尾,0表示插在第一个。​​​​​​
bash 复制代码
# 自定义工作表
ws1 = wb.create_sheet('test')
ws2 = wb.create_sheet()
# 保存
wb.save('excel_test.xlsx')

获取工作表

进行读写、修改数据等操作时,首先需要获取工作簿中的工作表(即Sheet),作为操作对象。

3种获取工作表的方法,如下:

第一种:.active 方法

默认获取工作簿的第一张工作表​​​​​​

bash 复制代码
# 获取第一张工作表
ws = wb.active

第二种:通过工作表名获取指定工作表​​​​​​

bash 复制代码
ws = wb['test']
print(ws)

第三种:.get_sheet_name()

通过工作表名,使用方法:.get_sheet_name(工作表名)​​​​​​

bash 复制代码
ws3 = wb.get_sheet_by_name('Sheet1')
print(ws3)

修改工作表的名称

使用.title属性,修改工作表名称。

修改工作表名称前,要先指定需要修改的工作表​​​​​​

bash 复制代码
# 获取要修改的工作表
ws1 = wb['text']
ws2 = wb['Sheet1']
# 修改工作表的名称
ws1.title = '测试'
ws2.title = '测试1'
# 保存
wb.save('excel_test.xlsx')

数据操作

以下是openpyxl最常用的【读写】操作。

在进行【读写】操作时,首先需要创建一个excel工作簿对象,然后对该对象中的工作表(sheet)进行操作。

以下,将以读取本地已存在的excel_test.xlsx作为工作簿对象wb,进行举例。​​​​​​

bash 复制代码
from openpyxl import load_workbook
# 读取已存在的excel工作薄
wb = load_workbook('excel_test.xlsx')

写入数据

按单元格写入

直接赋值法​​​​​​

bash 复制代码
# 选择要写入的工作表

sheet1 = wb['测试']
sheet1['A2'] = '姓名'
# 保存
wb.save('excel_test.xlsx')

通过指定坐标赋值方式,将数据写入单元格。

方法:.cell(row,column,value)

row :行, column :列数,value:需要写入的数据。​​​​​​

bash 复制代码
# 选择要写入的工作表
sheet1 = wb['测试']
# 写入数据
sheet1.cell(row=3, column=4, value='一位代码')
# 保存
wb.save('excel_test.xlsx')

按行写入数据

.append(data)方法,传一个单层列表格式数据。​​​​​​

bash 复制代码
# 选择要写入的工作表
sheet1 = wb['测试1']
# 写入一行数据
data1 = [1, 2, 3, 4]
sheet1.append(data1)
# 保存
wb.save('excel_test.xlsx')

注:append()只能接受单层列表格式数据,多层列表需要循环写入

读取数据

获取工作表中已有全部数据

.values:获取目标工作表中已有全部数据,返回值是一个对象,需要进行转换。​​​​​​

bash 复制代码
# 选择需要获取的工作表
sheet1 = wb['测试1']
# 获取所有值
print('返回值:', sheet1.values)
print('返回值转换后:', list(sheet1.values))

还可以用循环来写,如下:​​​​​​

bash 复制代码
# 选择需要获取的工作表
sheet1 = wb['测试1']
# 循环获取
for row in sheet1.values:
    print(row)

获取指定范围内的值

获取指定单元格的值​​​​​​

bash 复制代码
# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定单位格的值
cell1 = sheet1['A1']
print(cell1.value)

获取指定范围内单元格的值​​​​​​

bash 复制代码
# 选择需要获取的工作表
sheet1 = wb['测试1']
# 指定坐标范围
cells = sheet1['A1':'B2'] # 还可以写成['A1:B2']
print('指定范围:', cells)
# 获取单元格的值
for row in cells:
    for cell in row:
        print(cell.value)

一个示例

读取一个文件中一列数据,然后进行转置,保存为另外一个文件。

目的实际是为了来处理网络配置文件的。

bash 复制代码
from openpyxl import load_workbook

wb_obj = load_workbook('F:\\Desktop\\pyprj\\testorg.xlsx')
ws = wb_obj.active

# 转置
delta = 2       #转置开始位置偏移量
this_row = 1    #转置行下标
this_col = 1    #转置列下标
for row_num in range(1, ws.max_row + 1):
    this_col = this_col + 1                                 #列下标加1
    cell_value = ws.cell(row=row_num,column=1).value        #要转置的值
    if cell_value.strip() == "#":
        this_row = this_row + 1                             #行下标加1
        this_col = 0                                        #列下标重新开始
    ws.cell(row=this_row, column=this_col+delta).value = cell_value

wb_obj.save('99乘法表.xlsx')
wb_obj.close()

原始表

转置后

相关推荐
im_AMBER16 分钟前
学习日志05 python
python·学习
大虫小呓21 分钟前
Python 处理 Excel 数据 pandas 和 openpyxl 哪家强?
python·pandas
哪 吒33 分钟前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
想要入门的程序猿39 分钟前
Qt写入excel
数据库·qt·excel
摸爬滚打李上进2 小时前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
凛铄linshuo3 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习
牛客企业服务3 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
胡斌附体3 小时前
linux测试端口是否可被外部访问
linux·运维·服务器·python·测试·端口测试·临时服务器
likeGhee4 小时前
python缓存装饰器实现方案
开发语言·python·缓存
项目題供诗4 小时前
黑马python(二十五)
开发语言·python