python读取Excel文件


首先创建一个表格文档:具体代码如下,对操作表格进行分装,也可以不封装,看个人喜好
excel_utils.py文件
import os
import xlrd #内置模块、第三方模块pip install 自定义模块
class ExcelUtils():
def __init__(self,file_path,sheet_name):
self.file_path = file_path
self.sheet_name = sheet_name
self.sheet = self.get_sheet() # 整个表格对象
def get_sheet(self):
wb = xlrd.open_workbook(self.file_path)
sheet = wb.sheet_by_name(self.sheet_name)
return sheet
def get_row_count(self):
row_count = self.sheet.nrows
return row_count
def get_col_count(self):
col_count = self.sheet.ncols
return col_count
# 获取表格里的内容,三种方式
def __get_cell_value(self,row_index, col_index):
cell_value = self.sheet.cell_value(row_index,col_index)
return cell_value
def get_merged_info(self):
merged_info = self.sheet.merged_cells
return merged_info
def get_merged_cell_value(self,row_index, col_index):
"""既能获取普通单元格的数据又能获取合并单元格数据"""
# cell_value = None # 屏蔽下句代码,使用这句代码一定🉐️有合并单元格一起,不然无法读取数据,有缺陷,不推荐这种方式使用
cell_value = self.__get_cell_value(row_index, col_index) # 使用此句代码,屏蔽上句代码,读取正常单元格,
# 合并单元格也可以读取,相对比较完善
for (rlow, rhigh, clow, chigh) in self.get_merged_info():
if (row_index >= rlow and row_index < rhigh):
if (col_index >= clow and col_index < chigh):
cell_value = self.__get_cell_value(rlow, clow)
break; # 防止循环去进行判断出现值覆盖的情况
else:
cell_value = self.__get_cell_value(row_index, col_index)
else:
cell_value = self.__get_cell_value(row_index, col_index)
return cell_value
def get_sheet_data_by_dict(self):
all_data_list = []
first_row = self.sheet.row(0) #获取首行数据
for row in range(1, self.get_row_count()):
row_dict = {}
for col in range(0, self.get_col_count()):
row_dict[first_row[col].value] = self.get_merged_cell_value(row, col)
all_data_list.append(row_dict)
return all_data_list
# if __name__=='__main__':
# current_path = os.path.dirname(__file__)
# excel_path = os.path.join(os.path.dirname(__file__), '「表格地址」/data/datashell.xlsx')
# excelUtils = ExcelUtils(excel_path, "源数据一")
# for row in excelUtils.get_sheet_data_by_dict():
# print( row )
读取表格data.py文件
import os
import xlrd
from excel_utils import ExcelUtils
excel_path = os.path.join(os.path.dirname(__file__), '「表格地址」/data/datashell.xlsx')
excelUtils = ExcelUtils(excel_path, "源数据一")
# print( excelUtils.get_merged_cell_value(4,0) )
# print( excelUtils.get_row_count() )
# sheet_list = []
# for row in range(1,excelUtils.get_row_count()): #
# row_dict = {}
# row_dict["数据一"] = excelUtils.get_merged_cell_value(row,1)
# row_dict["数据"] = excelUtils.get_merged_cell_value(row, 1)
# row_dict["gfg"] = excelUtils.get_merged_cell_value(row, 2)
# row_dict["fd"] = excelUtils.get_merged_cell_value(row, 3)
# sheet_list.append(row_dict)
#
# for row in sheet_list:
# print( row )
all_data_list = []
try:
first_row = excelUtils.sheet.row(0)
if first_row is not None:
# print(first_row)
for row in range(1, excelUtils.get_row_count()):
row_dict = {}
for col in range(0, excelUtils.get_col_count()):
row_dict[first_row[col].value] = excelUtils.get_merged_cell_value(row, col)
all_data_list.append(row_dict)
for row in all_data_list:
print(row)
except:
print('无数据文档')

