python excel操作
Excel python操作
安装相关模块
pip install openpyxl
excel基本元素介绍

读excel表的一些基本操作
查看所有sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
print(workbook.sheetnames) # 打印Excel表中的所有表
# 结果:
# ['Sheet1', 'Sheet2']
通过sheet名称获取表格
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
print(workbook.sheetnames) # 打印Excel表中的所有表
sheet = workbook['Sheet1'] # 获取指定sheet表
print(sheet)
# 结果:
# ['Sheet1', 'Sheet2']
# <Worksheet "Sheet1">
获取单元格中的数据
# 方法一:指定坐标方式
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
# print(sheet.dimensions) # 获取表格的尺寸大小
cell1 = sheet['A1'] # 获取A1单元格的数据
cell2 = sheet['B7'] # 获取B7单元格的数据
# cell2 = sheet['B7'].value # 另一种写法
# 正确示范
# cell1.value获取单元格A1中的值
# cell2.value获取单元格B7中的值
print(cell1.value,cell2.value) # 姓名 18
# 错误示范
print(cell1,cell2) # <Cell 'Sheet1'.A1> <Cell 'Sheet1'.B7>
# 方法二:指定行列的方式
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
# print(sheet.dimensions) # 获取表格的尺寸大小
cell1 = sheet.cell(row=1,column=1) # 获取第1行第1列的数据
cell2 = sheet.cell(row=3,column=2) # 获取第3行第4的数据
# 正确示范
# cell1.value获取单元格A1中的值
# cell2.value获取单元格B7中的值
print(cell1.value,cell2.value) # 姓名 41
获取单元格的行、列、坐标
.row获取某个格子的行数;.columns获取某个格子的列数;.coordinate获取某个格子的坐标;
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
# print(sheet.dimensions) # 获取表格的尺寸大小
cell = sheet.cell(row=3, column=2) # 获取第3行第4的数据
print(cell.value, cell.row, cell.column, cell.coordinate)
'''
结果:
41 3 2 B3
'''
获取指定区间的数据
- 使用
sheet['A1:A5']拿到指定区间 - 使用两个for循环拿到数据
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:')
print(sheet)
cell = sheet['A1:A5'] # 获取A1到A5的数据
print(cell)
# 打印A1到A5的数据
for i in cell:
for j in i:
print(j.value)
# 结果:
# 当前活动表是:
# <Worksheet "Sheet1">
# ((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,), (<Cell 'Sheet1'.A4>,), (<Cell 'Sheet1'.A5>,))
# 姓名
# 张三
# 李四
# 王五
# 赵六
获取指定行列的数据
- sheet[“A”] — 获取A列的数据
- sheet[“A:C”] — 获取A,B,C三列的数据
- sheet[5] — 只获取第5行的数据
下面代码是获取一列的
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
cell = sheet['2'] # 获取第2行的数据
# 打印A1到A5的数据
for i in cell:
print(i.value)
# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 张三
# 74
下面代码是获取两列的
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
cell = sheet['A:B'] # 获取AB列的数据
# 打印AB列数据
for i in cell:
for j in i:
print(j.value)
# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 姓名
# 张三
# 李四
# 王五
# 赵六
# alice
# bob
# 年龄
# 74
# 41
# 56
# 12
# 17
# 18
按行、列获取值
iter_rows():按行读取
iter_cols():按列读取
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
# 按行获取值
print('按行获取值')
for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2):
for j in i:
print(j.value)
# 按列获取值
print('按列获取值')
for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):
for j in i:
print(j.value)
# 结果:
# 当前活动表是:<Worksheet "Sheet1">
# 按行获取值
# 张三
# 74
# 李四
# 41
# 王五
# 56
# 赵六
# 12
# 按列获取值
# 张三
# 李四
# 王五
# 赵六
# 74
# 41
# 56
# 12

获取活动表的行列数
方法1:使用
sheet.max_row 获取行数
sheet.max_column 获取列数
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('2.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
rows = sheet.max_row # 获取行数
column = sheet.max_column # 获取列数
print(rows)
print(column)
'''
结果:
当前活动表是:<Worksheet "Sheet1">
381
6
'''
方法2:自己写一个for循环
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
row = []
column = []
# 获取当前活动表有多少行
for i in sheet.rows:
row.append(list(i)) # i是元组类型,转为列表
# 获取当前活动表有多少列
for i in sheet.columns:
column.append(list(i)) # i是元组类型,转为列表
print('行数:'+str(len(row)))
print('列数:'+str(len(column)))
'''
结果:
当前活动表是:<Worksheet "1号sheet">
行数:12
列数:3
'''
写excel表的一些基本操作
创建新的excel
第9行代码用来指定创建的excel的活动表的名字:
- 不写第9行,默认创建sheet
- 写了第9行,创建指定名字的sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
sheet['A1'] = 'name'
workbook.save('test.xlsx')
添加数据
- 插入有效数据
使用append()方法,在原来数据的后面,按行插入数据
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
data = [
['素子',23],
['巴特',24],
['塔奇克马',2]
]
for row in data:
sheet.append(row) # 使用append插入数据
workbook.save('test.xlsx')

- 插入空行空列
- insert_rows(idx=数字编号, amount=要插入的行数),插入的行数是在idx行数的下方插入
- insert_cols(idx=数字编号, amount=要插入的列数),插入的位置是在idx列数的左侧插入
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
sheet.insert_rows(idx=3, amount=2)
sheet.insert_cols(idx=2, amount=1)
workbook.save('test.xlsx')

- 删除行、列
- delete_rows(idx=数字编号, amount=要删除的行数)
- delete_cols(idx=数字编号, amount=要删除的列数)
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
sheet.delete_rows(idx=10) # 删除第10行
sheet.delete_cols(idx=1, amount=2) # 删除第1列,及往右共2列
workbook.save('test.xlsx')

- 移动指定区间的单元格(move_range)
move_range(“数据区域”,rows=,cols=):正整数为向下或向右、负整数为向左或向上
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
sheet.move_range('D11:F12',rows=0,cols=-3) # 移动D11到F12构成的矩形格子
workbook.save('test.xlsx')

sheet相关
创建新的sheet(create_sheet)
create_sheet(“新的sheet名”):创建一个新的sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
workbook.create_sheet('3号sheet') # 创建新的sheet表
print(workbook.sheetnames) # 查看所有的sheet表
workbook.save('test.xlsx')
'''
当前活动表是:<Worksheet "Sheet1">
['Sheet1', 'Sheet2', '3号sheet']
'''
修改sheet名字(title)
第11行,使用title修改sheet表的名字
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
sheet.title = '1号sheet' # 修改sheet表
workbook.save('test.xlsx')
复制sheet表(copy_worksheet)
在“操作”>“修改单元格、excel另存为”中提到了另存为,其实复制sheet表就是一个另存为的过程,你要是在12行代码保存的时候使用第7行的文件名,那么复制的sheet表就保存到自己身上,内容跟copy.xlsx一样。
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
workbook.copy_worksheet(sheet) # 复制sheet表
workbook.save('copy.xlsx')
删除sheet表(remove)
remove(“sheet名”):删除某个sheet表
要删除某sheet表,需要激活这个sheet表,即:将其作为活动表(关于活动表的定义请看前面文章开头写的有)下面8~11行代码展示了原始活动表与手动更换活动表,第13行代码删掉活动表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改工作路径
workbook = openpyxl.load_workbook('test.xlsx') # 返回一个workbook数据类型的值
sheet = workbook.active # 获取活动表
print('当前活动表是:' + str(sheet))
sheet = workbook['3号sheet'] # 手动切换到要删除的sheet表,一旦切换,这张表就是活动表
print('当前活动表是:' + str(sheet))
workbook.remove(sheet) # 删除当前活动表
print(workbook.sheetnames)
workbook.save('test.xlsx')
'''
当前活动表是:<Worksheet "Sheet1">
当前活动表是:<Worksheet "3号sheet">
['Sheet1', 'Sheet2']
'''
简略使用
读excel
from openpyxl import load_workbook
wb = load_workbook("files/p1.xlsx")
sheet = wb.worksheets[0]
# 1.获取第N行第N列的单元格(位置是从1开始)
"""
cell = sheet.cell(1, 1)
print(cell.value)
print(cell.style)
print(cell.font)
print(cell.alignment)
"""
# 2.获取某个单元格
"""
c1 = sheet["A2"]
print(c1.value)
c2 = sheet['D4']
print(c2.value)
"""
# 3.第N行所有的单元格
"""
for cell in sheet[1]:
print(cell.value)
"""
# 4.所有行的数据(获取某一行数据)
"""
for row in sheet.rows:
print(row[0].value, row[1].value)
"""
# 5.获取所有列的数据
"""
for col in sheet.columns:
print(col[1].value)
"""
写excel
from openpyxl import load_workbook
wb = load_workbook('files/p1.xlsx')
sheet = wb.worksheets[0]
# 找到单元格,并修改单元格的内容
cell = sheet.cell(1, 1)
cell.value = "新的开始"
# 将excel文件保存到p2.xlsx文件中
wb.save("files/p2.xlsx")

浙公网安备 33010602011771号