openpyxl是一个很好的python操控excel的库。但是openpyxl在读取excel数据的时候有一些不好地方:
(一)当使用values方法获取数据时,获取的是set而不是list,对于某些应用场景来说,使用很不方便:
ws.values
for i in ws.values:
print(i)
(20, ‘NAME’, ‘DATE_TIME’, ‘PAY’)
(0, 30, datetime.datetime(1972, 2, 23, 3, 10, 2), 8803)
(1, ‘黄瑞’, datetime.datetime(1977, 11, 29, 4, 49, 16), 5951)
(2, ‘李阳’, datetime.datetime(1982, 8, 30, 18, 12, 46), 7418)
(3, ‘石淑英’, datetime.datetime(2016, 4, 18, 11, 24, 17), 737)
(4, ‘陈红霞’, datetime.datetime(2011, 12, 12, 3, 12, 47, 1), 3555)
(5, ‘廖健’, datetime.datetime(1989, 9, 25, 20, 9, 45, 1), 2649)
(6, ‘韩雪梅’, datetime.datetime(2002, 1, 2, 8, 0, 51), 7344)
(7, ‘赵丽丽’, datetime.datetime(2018, 7, 1, 19, 35, 24), 8735)
(8, ‘侯建华’, datetime.datetime(1971, 8, 1, 16, 59, 1), 6148)
(9, ‘谭桂花’, datetime.datetime(2000, 4, 7, 5, 2, 38), 8900)
(二)当获取一列或者一行的数据的时候,返回的是一个生成器list,想要获得数据还需进一步操作:
for i in ws.rows:
for j in i:
print(j,j.value)
20
NAME
DATE_TIME
PAY
0
30
1972-02-23 03:10:02
| 8803
| | | | | | | |
因此,在开始之前,需要首先对这个类进行一些自己的封装,使得使用时方便一些:
import openpyxl
from openpyxl.worksheet import worksheet
# 给一个生成器列表,返回值列表
def GetData(cell: list):
data = []
for i in cell:
data.append(i.value)
return data
class DealSheet:
def __init__(self, sheet: worksheet):
self.__sheet = sheet
# 通过行数获取数据
def get_value_by_row(self, row: int = 1):
return GetData(self.__sheet[row])
# 通过列数获取数据
# 列数需转化为列数字(字符)对应的字符
def get_value_by_col_s(self, col: str):
return GetData(self.__sheet[col])
# 列数需转化为列数字(数字)对应的字符
def get_value_by_col_i(self, col: int):
column = chr(col + 64)
return self.get_value_by_col_s(column)
def get_all(self):
data = []
min_col = 1
max_col = self.__sheet.max_column
for col in range(min_col, max_col + 1):
data.append(self.get_value_by_row(col))
return data
先这样,希望自己能坚持更新完!!!



