Python 操作 Excel 文件库 - openpyxl

一. 安装

1
pip install openpyxl

二. 基本操作

2.1 创建工作簿

创建工作簿时, 会自动产生一个 sheet, 可以通过 active 获取

1
2
3
4
5
6
7
import openpyxl

# 创建工作簿
wx = openpyxl.Workbook()

# 获取默认 工作表
sheet = wx.active

2.2 创建工作表

1
2
3
sh1 = wb.create_sheet("工作表 1")  # 在最后插入工作表
sh2 = wb.create_sheet("工作表 2", 0) # 在首位插入工作表
sh3 = wb.create_sheet("工作表 3", -1) # 在倒数第二个位置插入工作表

2.2.1 修改工作表名

1
2
3
sh3 = wb.create_sheet("工作表 3", -1)  # 在倒数第二个位置插入工作表

sh3.title = "表 3"

2.2.2 查看工作表名

1
2
3
4
5
print(wb.sheetnames)

"""
['工作表 2', 'Sheet', '表 3', '工作表 1']
"""
1
2
3
4
5
6
7
8
9
for sheet in wb:
print(sheet.title)

"""
工作表 2
Sheet
表 3
工作表 1
"""

2.2.3 复制工作表

  • 仅复制单元格(包括值、样式、超链接和注释)和某些工作表属性(包括维度、格式和属性)
  • 不会复制所有其他工作簿/工作表属性 - 例如图像、图表。
1
2
3
4
5
6
target = wb.copy_worksheet(sh1)
print(wb.sheetnames)

"""
['工作表 2', 'Sheet', '表 3', '工作表 1', '工作表 1 Copy']
"""

2.3 修改单元格

2.3.1 修改单个单元格

1
2
3
4
5
6
7
# 方式一、直接赋值
sheet["A3"] = "Python"
print(sheet["A3"].value)

# 方式二、sheet.cell(行, 列, 值)
d = sheet.cell(2, 3, 10)
print(sheet.cell(2, 3).value)

2.3.2 修改多个单元格

获取指定区域的单元格 sh['xx':'xx']

1
2
3
4
5
6
7
8
cell_range = sh['A1':'C2']
for i in cell_range:
print(i)

"""
(<Cell 'Sheet'.A1>, <Cell 'Sheet'.B1>, <Cell 'Sheet'.C1>)
(<Cell 'Sheet'.A2>, <Cell 'Sheet'.B2>, <Cell 'Sheet'.C2>)
"""

获取指定列的单元格 sh['xx']

1
2
3
4
5
6
7
8
colC = sh['C']
for i in colC:
print(i)

"""
<Cell 'Sheet'.C1>
<Cell 'Sheet'.C2>
"""

2.4 插入行、列

sheet 对象的 insert_rowsinsert_cols 方法,分别用来插入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import openpyxl

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

sheet.insert_rows(2) # 在第2行的位置插入1行

sheet.insert_rows(3,3) # 在第3行的位置插入3行

sheet.insert_cols(2) # 在第2列的位置插入1列

sheet.insert_cols(2,3) # 在第2列的位置插入3列

wb.save('income-1.xlsx') # 指定不同的文件名,可以另存为别的文件

2.5 删除行、列

sheet 对象的 delete_rowsdelete_cols 方法,分别用来删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import openpyxl

wb = openpyxl.load_workbook('income.xlsx')
sheet = wb['2018']

sheet.delete_rows(2) # 在第2行的位置删除1行

sheet.delete_rows(3,3) # 在第3行的位置删除3行

sheet.delete_cols(2) # 在第2列的位置删除1列

sheet.delete_cols(3,3) # 在第3列的位置删除3列

wb.save('income-1.xlsx') # 指定不同的文件名,可以另存为别的文件