使用openpyxl实现
只支持xlsx文件,不支持xls
import openpyxl
def read_cell(io, sheet, cell='A2'):
"""
读取单元格
:param io: Excel文件路径
:param sheet: 读取哪一张表,str, int eg: 'Sheet1' or 0
:param cell: 读取哪一个单元格
:return: value --> str
"""
excel = openpyxl.load_workbook(io)
if isinstance(sheet, str):
ws = excel[sheet]
elif isinstance(sheet, int):
name = excel.sheetnames[sheet]
ws = excel[name]
else:
raise TypeError('sheet must be int or str, not %s' % type(sheet))
val = ws[cell].value
if not val:
val = ""
return val
使用xlrd实现
只支持xls(version > 2.x),既支持xls又支持xlsx(version < 2.x)
import xlrd
def get_index(capital):
"""
大写字母(Excel列头)转数字
:param capital: 'A' --> 0, 'AA' --> 26
:return: int
"""
number = 0
capital = capital.upper()
for char in capital:
number = number * 26 + ord(char) - ord('A') + 1
return number - 1
def read_cell(io, sheet, cell='A1'):
"""
读取单元格
:param io: Excel文件路径
:param sheet: 读取哪一张表,str, int eg: 'Sheet1' or 0
:param cell: 读取哪一个单元格
:return: value --> str
"""
wb = xlrd.open_workbook(io)
if isinstance(sheet, str):
ws = wb.sheet_by_name(sheet)
elif isinstance(sheet, int):
ws = wb.sheet_by_index(sheet)
position = re.findall(r'[0-9]+|[A-Z]+', cell)
pos_col = position[0]
pos_row = int(position[1])
col_index = get_index(pos_col)
values = ws.col_values(col_index, start_rowx=pos_row - 1, end_rowx=pos_row)
if values:
val = values[0]
else:
val = ''
return val