Python 操作 Excel 详解(openpyxl)

1 概述

官方文档:https://openpyxl.readthedocs.io

2 工作簿操作(新建/打开、保存)

from openpyxl import Workbook
from openpyxl import load_workbook

# 新建一个工作簿
wb = Workbook()
# 打开本地Excel文件,加r是为了解决转义的问题
# wb = load_workbook(r'C:\Users\Test\Desktop\test.xlsx')
# 保存工作簿,加r是为了解决转义的问题
wb.save(r'C:\Users\Test\Desktop\test.xlsx')
# 关闭工作簿,该方法在只读或只写模式下有用
wb.close()

3 工作表

3.1 工作表操作(创建、修改、移动、复制、删除)

from openpyxl import Workbook

# 新建一个工作簿
wb = Workbook()
# 获取默认的工作表
ws1 = wb.active
# 返回工作表名
print(ws1.title)
# 修改工作表名
ws1.title = 'test'
# 新建一个工作表create_sheet(self, title=None, index=None)
# title:工作表名称
# index:工作表位置,默认为None,表示在最后插入
wb.create_sheet('test1', 0)
wb.create_sheet()
# 通过表名获取工作表
ws2 = wb['test1']
# 将test工作表向右移动一位,-1为向左移动,+1为向右移动
wb.move_sheet(ws2, +1)
# 返回工作表的索引
print(wb.index(ws2))
# 复制工作表
wb.copy_worksheet(ws1)
# 删除工作表
del wb['test1']
# 返回所有工作表名
print(wb.sheetnames)

3.2 工作表信息

print(ws.max_row)  # 最大行数,例如16
print(ws.max_column)  # 最大列数,例如12
print(ws.dimensions)  # 已启用的单元格范围,例如A1:L16
print(ws.encoding)  # 编码类型,例如utf-8
print(ws.sheet_view)  # 对象信息

4 单元格

4.1 获取和修改单个单元格

from openpyxl import Workbook
import datetime

# 新建一个工作簿
wb = Workbook()
# 获取默认的工作表
ws = wb.active
# 返回基于给定坐标的单元格对象
cell1 = ws['A1']
cell2 = ws.cell(1, 1)

# 直接修改某个单元格的值
ws['A1'] = 42
# 追加一行
ws.append([1, 2, 3])
ws['A2'] = datetime.datetime.now()

# 先获取单元格对象然后再进行修改
cell3 = ws['A6']
cell3.value = 66
print(cell3, cell3.value)  # 输出:<Cell 'Sheet'.A6> 66

# 通过坐标修改某个单元格的值
cell4 = ws.cell(6, 1, 'python')
print(cell4, cell4.value)  # 输出:<Cell 'Sheet'.A6> python

1.如果使用cell(row, column, value)获取,第一个参数是行,第二个参数是列,下标都是从1开始,例如,ws[‘A6’]等同于ws.cell(6, 1),但如果指定了第三个参数value,则修改了该单元格的值。
2.只要访问了一个cell就会被创建,不管是否赋值。

根据上面的方式,我们可以通过循环来准备一些数据:

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

x = 1
for i in range(1, 11):
    for j in range(1, 6):
        ws.cell(i, j, x)
        x += 1
wb.save('test.xlsx')

在这里插入图片描述

4.2 获取多个单元格

4.2.1 通过范围取值

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

x = 1
for i in range(1, 11):
    for j in range(1, 6):
        ws.cell(i, j, x)
        x += 1

row_cells = ws[2]  # 选取第2行(下标从1开始)
print(row_cells)  # 输出:(A2, B2, C2, D2, E2)

col_cells = ws['B']  # 选取B列
print(col_cells)  # 输出:(B1, B2, B3, B4, B5, B6, B7, B8, B9, B10)

row_range_cells = ws[2:6]  # 选取2、3、4、5、6共5行
print(row_range_cells)
# 输出:
# ((A2, B2, C2, D2, E2),
# (A3, B3, C3, D3, E3),
# (A4, B4, C4, D4, E4),
# (A5, B5, C5, D5, E5),
# (A6, B6, C6, D6, E6))

col_range_cells = ws['B:D']  # 选取B、C、D共3列
print(col_range_cells)
# 输出:
# ((B1, B2, B3, B4, B5, B6, B7, B8, B9, B10),
# (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10),
# (D1, D2, D3, D4, D5, D6, D7, D8, D9, D10))

range_cells = ws['B2:D6']  # 选取 C3到F6区域共16个元素
print(range_cells)
# 输出:
# ((B2, C2, D2),
# (B3, C3, D3),
# (B4, C4, D4),
# (B5, C5, D5),
# (B6, C6, D6))

1.以上输出应该类似<Cell ‘Sheet’.A2>、 <Cell ‘Sheet’.B2>,为了好看,简化为A2、B2的形式。
2.以上获取到的多个单元格,返回的是元组或元组套元组,可以通过遍历的方式访问或修改。

4.2.2 通过iter_rows()或iter_cols()迭代取值

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

x = 1
for i in range
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值