一.相关说明:
1、openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件;2007一下的版本为xls结尾的文件,需要使用 xlrd和xlwt库进行操作
2、excel表的文字编码如果是“gb2312” 读取后就会显示乱码,请先转成Unicode
3、workbook: 工作簿,一个excel文件包含多个sheet。
4、sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
5、cell: 单元格,存储数据对象
二.openpyxl的使用方法
1. 新建
1
2
3
4
|
import openpyxl
# 新建一个空excel,表名为sheet,文件名为test
wb = openpyxl.Workbook() # 创建新的excel文件,一个工作簿(workbook)在创建的时候同时至少也新建了一张工作表(worksheet)
wb.save( 'test.xlsx' )
|
2.表操作
注:从此操作往后都使用如下的测试数据
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import openpyxl
import openpyxl.styles
# 打开已有的excel
wb = openpyxl.load_workbook( "test.xlsx" )
# ------------------ 表操作 ------------------
# 新建sheet表
wb.create_sheet(index = 2 , title = "sheet3" ) # 可通过index控制创建的表的位置
# 获取所有表名
sheet_names = wb.sheetnames # 得到工作簿的所有工作表名 结果: ['Sheet1', 'Sheet2', 'Sheet3']
# 根据表名删除sheet表
wb.remove(wb[sheet_names[ 2 ]]) # 删除上一步建的第3个工作表
# 根据表名打开sheet表
sheet1 = wb[sheet_names[ 0 ]] # 打开第一个 sheet 工作表
|
3.读取数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# ------------------ 读取数据 ------------------
# 获取单元格数据
sheet1_max_colum = sheet1.max_column # 获取最大列数 结果:3
# ws = wb.active # 获取当前活动的sheet页
sheet1_max_row = sheet1.max_row # 获取最大行数 结果:10
A1_value = sheet1[ 'A1' ].value # 获取单元格A1值 结果:a1
A1_column = sheet1[ 'A1' ].column # 获取单元格A1列值 结果: A
A1_row = sheet1[ 'A1' ].row # 获取单元格A1行号 结果: 1
A1 = sheet1.cell(row = 1 , column = 1 ).value # 获取第一行第一列的单元格值 结果:a1
# 获取C列的所有数据
list_sheet1_column_C = []
for i in sheet1[ "C" ]:
list_sheet1_column_C.append(i.value)
# 获取第1行的所有数据
list_sheet1_row_1 = []
for i in sheet1[ 1 ]:
list_sheet1_row_1.append(i.value)
# 读取所有数据
list_sheet1_all = []
for row in sheet1.rows:
for cell in row:
list_sheet1_all.append(cell.value) # 按行循环获取所有的值,保存在 list_sheet1_all 列表中
|
4.写入数据
1
2
3
4
5
|
# ------------------ 写入数据 ------------------
sheet1.cell(row = 1 , column = 2 , value = "B1" ) # 修改第一行第二列的单元格的值为B1
sheet1[ "A1" ] = "A1" # 直接修改A1单元格的值为A1
sheet1[ "B11" ] = "B11" # 新增B11单元格的值为B11
sheet1.title = "test_sheet" # 修改sheet1的表名为test_sheet
|
5.表格样式调整
1
2
3
4
5
6
7
8
9
10
|
# ------------------ 表格样式调整 ------------------
# 表格样式支持:字体、颜色、模式、边框、数字格式等
# A1单元格 等线24号加粗斜体,字体颜色浅蓝色
sheet1[ "B11" ].font = openpyxl.styles.Font(name = "宋体" , size = 24 , italic = True , color = "00CCFF" , bold = True )
# B1单元格 水平上下居中
sheet1[ "B11" ].alignment = openpyxl.styles.Alignment(horizontal = "center" , vertical = "center" )
# 第一行高度设置为30
sheet1.row_dimensions[ 1 ].height = 30
# C列的宽度设置为35
sheet1.column_dimensions[ "C" ].width = 35
|
6.保存文件
1
2
|
# 保存文件,注意文件打开时文件保存会出错
wb.save( "test.xlsx" )
|
补充:下面通过实例代码看下python3 openpyxl基本操作,具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#coding:utf-8
import xlrd
import xlwt
# 读写2007 excel
import openpyxl
import sys
#读取设备sn
# def readSN(path):
# wb = openpyxl.load_workbook(path)
# sheet = wb.active
# dict = []
# for i in range(2, sheet.max_row +1):
# c = sheet["C" + str(i)].value;
# d = sheet["D" + str(i)].value;
#
# dict.append(d)
# #dict.append(d)
# #print(c,d)
# return dict;
#
# pass;
# print(readSN("./sim/1.xlsx"))
def read07Excel(path,path1):
wb = openpyxl.load_workbook(path)
sheet = wb.active
# print(sheet.max_column) # 获取最大列数
# print(sheet.max_row) # 获取最大行数
#print(sheet['B1'].value)
wb1 = openpyxl.load_workbook(path1)
sheet1 = wb1.active
for i in range ( 2 ,sheet.max_row):
iccid = sheet[ "B" + str (i)].value;
len_iccid = len (iccid)
if len_iccid = = 20 :
sub_iccid = iccid[ 16 : - 1 ]
elif len_iccid = = 21 :
sub_iccid = iccid[ 17 : - 1 ]
for x in range ( 1 ,sheet1.max_row):
#print(sheet1["D"+str(x)].value)
if sub_iccid + "N" = = sheet1[ "D" + str (x)].value:
sheet[ "O" + str (i)].value = sheet1[ "C" + str (x)].value;
wb.save(filename = path)
print ( str (sheet1[ "D" + str (x)].value) + " " + str (sheet1[ "C" + str (x)].value) + " " + str (iccid))
print ()
pass
# 写入数据
# s =sheet["P"+str(i)].value = "dsdaf";
# wb.save(filename=path)
# p = sheet["P" + str(i)].value;
#print(sub_iccid)
# for row in sheet.rows:
# for cell in row:
# print(cell.value, "\t", end="")
# print(cell.column, "\t", end="")
#
#
# print()
# sys.exit()
# path = "./sim/2.xlsx"
# wb = openpyxl.load_workbook(path)
# #sheet = wb.sheetnames[0] #获取名称
# sheet = wb.active
# 分别返回
#print(sheet['A1'].value) #获取单元格A1值
read07Excel( "./sim/2.xlsx" , "./sim/1.xlsx" )
# wb=openpyxl.load_workbook('./sim/1.xlsx') #打开excel文件
# print(wb.sheetnames) #获取工作簿所有工作表名
|
总结
以上所述是小编给大家介绍的python3结合openpyxl库实现excel操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://blog.csdn.net/xugexuge/article/details/82628792