excel相关的基本概念:
1)工作簿(workbook):一个Excel文件就是一个工作簿
2)工作表(sheet):工作表是工作簿的基本单位,每个工作簿至少要有一个工作表
3)单元格(cell):工作表中每一个用来保存数据的格子就是单元格
4)行(row)号:每一行前面的数字(从1开始)
5)列(column)号:每一列上面的大写字母(也可以用数字1开头,表示列号)
1)openpyxl.open(Excel文件地址) - 打开指定的Excel文件得到工作簿对象
2)**openpyxl.load_workbook(Excel文件地址) ** - 打开指定的Excel文件得到工作簿对象
#wb = openpyxl.open('files/example.xlsx')
wb = openpyxl.load_workbook('files/example.xlsx')
工作簿对象.sheetnames
names = wb.sheetnames
print(names) # ['表1', '表2', 'Sheet1']
1)工作簿.active - 当前工作簿中的活跃表
sheet1 = wb.active
print(sheet1)
2)工作簿[表名] - 获取工作簿中指定表名对应的工作表
sheet2 = wb['表1']
print(sheet2)
1)工作表.max_row
2)sheet2.max_column
m_r = sheet2.max_row
m_c = sheet2.max_column
print(m_r, m_c)
print(wb['Sheet1'].max_row, wb['Sheet1'].max_column)
工作表.cell(行号, 列号)
cell1 = sheet2.cell(2, 2)
cell2 = sheet2.cell(2, 3)
cell3 = sheet2.cell(3, 2)
print(cell1, cell2, cell3)
单元格.value
print(cell1.value)
print(cell2.value)
print(cell3.value)
练习:
1.获取第2列所有内容,然后将数据保存到列表中:[Language, Python, Java, C,...,Go]
2.获取第2行所有内容,然后将数保存到字典中: {'Rank':1, 'Language': 'Python', 'Score': 100}
import openpyxl
wb = openpyxl.open('files/example.xlsx')
sheet = wb['表1']
m_r = sheet.max_row
m_c = sheet.max_column
# 获取第2列所有内容
data = []
for row in range(1, m_r+1):
cell = sheet.cell(row, 2)
data.append(cell.value)
print(data)
# 获取第2行所有内容
data = {}
for col in range(1, m_c+1):
cell1 = sheet.cell(1, col)
cell2 = sheet.cell(2, col)
data[cell1.value] = cell2.value
print(data)
# 获取整个文件所有的数据
result = []
for row in range(2, m_r+1):
line = {}
for col in range(1, m_c+1):
key = sheet.cell(1, col).value
value = sheet.cell(row, col).value
line.setdefault(key, value)
result.append(line)
print(result)
注意:Excel文件相关任何写操作,只会在保存以后有效
os.path.exists(文件或者文件夹路径) - 判断指定的文件或者文件夹是否存在
wb1 = openpyxl.Workbook()
工作簿.save(文件地址)
wb1.save('files/example2.xlsx')
案例:如果example3.xlsx文件不存在就创建,存在就打开
if os.path.exists('files/example3.xlsx'):
wb2 = openpyxl.load_workbook('files/example3.xlsx')
else:
wb2 = openpyxl.Workbook()
wb2.save('files/example3.xlsx')
1)工作簿.create_sheet()
2)工作簿.create_sheet(表名)
3)工作簿.create_sheet(表名, 下标)
sheet1 = wb2.create_sheet()
sheet2 = wb2.create_sheet('student')
sheet3 = wb2.create_sheet('teacher', 0)
案例:如果teacher表不存在就创建这张表,存在就获取teacher表
if 'teacher' in wb2.sheetnames:
sheet3 = wb2['teacher']
else:
sheet3 = wb2.create_sheet('teacher', 0)
工作簿.remove(工作表)
# wb2.remove(wb2['Sheet1'])
if 'Sheet1' in wb2.sheetnames:
wb2.remove(wb2['Sheet1'])
单元格.value = 数据
sheet3.cell(2, 1).value = '小明'
sheet3.cell(1, 3).value = 'Tel'
sheet3.cell(1, 2).value = None
wb2.save('files/example3.xlsx')
请输入学生的姓名:xiaoming
请输入学生的年龄:18
请输入学生的性别:男
请输入学生的电话:110
是否继续(Y/N):Y
...
请输入学生的姓名:xiaoming
请输入学生的年龄:18
请输入学生的性别:男
请输入学生的电话:110
是否继续(Y/N):N
import openpyxl
import os
if os.path.exists('file\录入的学生信息.xlsx'):
wb = openpyxl.open('file\录入的学生信息.xlsx')
else:
wb = openpyxl.Workbook()
if 'student' in wb.sheetnames:
sheet = wb['student']
else:
sheet = wb.create_sheet('student')
# first_row_data =
sheet.cell(1,1).value = '姓名'
sheet.cell(1,2).value = '年龄'
sheet.cell(1,3).value = '性别'
sheet.cell(1,4).value = '电话'
wb.save('file\录入的学生信息')
while True:
name = input('请输入姓名:')
age = int(input('请输入年龄:'))
gender = input('请输入性别:')
tel = input('请输入电话:')
m_r = sheet.max_row
sheet.cell(m_r+1,1).value = name
sheet.cell(m_r + 1, 2).value = age
sheet.cell(m_r + 1, 3).value = gender
sheet.cell(m_r + 1, 4).value = tel
wb.save('file\录入的学生信息.xlsx') #插入一条保存一条
value = input('是否继续添加(Y/N)')
if value == 'N':
break
wb.save('file\录入的学生信息.xlsx')
姓名 年龄 性别 电话
xx xx xx xx
xxx xxx xxx xxx
....
import openpyxl
wb = openpyxl.open('files/example3.xlsx')
# sheet1 = wb['teacher']
sheet1 = wb.active
1)工作表.row_dimensions[行号].height = 高度
2)工作表.column_dimensions[列号(字母)].width = 宽度
sheet1.row_dimensions[1].height = 30
sheet1.column_dimensions['A'].width = 30
# 导入字体类
from openpyxl.styles import Font
f1 = Font(
name='黑体',
size=15,
color='CC00FF',
strike=True,
bold=True,
italic=True,
underline='single'
)
sheet1.cell(1, 1).font = f1
from openpyxl.styles import PatternFill
fill1 = PatternFill(
fill_type='darkDown',
start_color='FFFF00',
end_color='FF0000'
)
sheet1.cell(1, 2).fill = fill1
from openpyxl.styles import Side, Border
s1 = Side(
border_style='medium',
color='ff0000'
)
s2 = Side(
border_style='mediumDashDot',
color='00ff00'
)
b1 = Border(
top=s1,
bottom=s1,
left=s1,
right=s1
)
b2 = Border(
top=s2,
bottom=s1,
# left=s2,
# right=s2
)
sheet1.cell(4, 2).border = b1
sheet1.cell(6, 2).border = b2
wb.save('files/example3.xlsx')