work
This commit is contained in:
@@ -15,7 +15,7 @@ class TranschendentnostCell:
|
||||
self._is_empty = is_empty
|
||||
|
||||
def is_empty(self):
|
||||
self._is_empty
|
||||
return self._is_empty
|
||||
|
||||
class ExcelSheetReader(ABC):
|
||||
"""
|
||||
@@ -25,6 +25,18 @@ class ExcelSheetReader(ABC):
|
||||
def __init__(self, file_path):
|
||||
self.file_path = file_path
|
||||
|
||||
@abstractmethod
|
||||
def get_sheet_index(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def has_next_sheet(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def next_sheet(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_cell_value(self, row, col):
|
||||
"""Возвращает значение ячейки по 0-индексированным координатам."""
|
||||
@@ -96,8 +108,23 @@ class ExcelSheetReader(ABC):
|
||||
class XlrdSheetReader(ExcelSheetReader):
|
||||
def __init__(self, file_path, sheet_index=0):
|
||||
super().__init__(file_path)
|
||||
self.sheet_index = sheet_index
|
||||
self.book = xlrd.open_workbook(file_path, formatting_info=True)
|
||||
self.sheet = self.book.sheet_by_index(sheet_index)
|
||||
self.init_sheet()
|
||||
|
||||
def get_sheet_index(self):
|
||||
return self.sheet_index
|
||||
|
||||
def init_sheet(self):
|
||||
self.sheet = self.book.sheet_by_index(self.sheet_index)
|
||||
|
||||
def has_next_sheet(self):
|
||||
return self.sheet_index < len(self.book.sheet_names())-1
|
||||
|
||||
def next_sheet(self):
|
||||
if self.has_next_sheet():
|
||||
self.sheet_index += 1
|
||||
self.init_sheet()
|
||||
|
||||
def get_cell_value(self, row, col):
|
||||
# Проверка на выход за пределы таблицы, чтобы избежать ошибок
|
||||
@@ -106,9 +133,9 @@ class XlrdSheetReader(ExcelSheetReader):
|
||||
return None
|
||||
|
||||
def info(self):
|
||||
print("The number of worksheets is {0}".format(self.book.nsheets))
|
||||
print("Worksheet name(s): {0}".format(self.book.sheet_names()))
|
||||
return "'{0}': size: {1}x{2} names: ".format(self.sheet.name, self.sheet.nrows, self.sheet.ncols, " ".join(self.book.sheet_names()))
|
||||
return """[XLRD (.xls)] The number of worksheets is {0}
|
||||
Worksheet name(s): {1}
|
||||
'{2}': size: {3}x{4}""".format(self.book.nsheets, self.book.sheet_names(), self.sheet.name, self.sheet.nrows, self.sheet.ncols)
|
||||
|
||||
def cell(self, row, col):
|
||||
"""Возвращает абстрактную клетку"""
|
||||
@@ -150,8 +177,9 @@ class XlrdSheetReader(ExcelSheetReader):
|
||||
class OpenpyxlSheetReader(ExcelSheetReader):
|
||||
def __init__(self, file_path, sheet_name=None):
|
||||
super().__init__(file_path)
|
||||
self.sheet_index = 0
|
||||
self.workbook = openpyxl.load_workbook(file_path, data_only=True)
|
||||
self.sheet = self.workbook[sheet_name] if sheet_name else self.workbook.active
|
||||
self.init_sheet()
|
||||
|
||||
# Словарь для трансляции стилей границ openpyxl в числовые коды xlrd
|
||||
self.BORDER_STYLE_MAP = {
|
||||
@@ -161,6 +189,26 @@ class OpenpyxlSheetReader(ExcelSheetReader):
|
||||
'slantDashDot': 13
|
||||
}
|
||||
|
||||
def get_sheet_index(self):
|
||||
return self.sheet_index
|
||||
|
||||
def has_next_sheet(self):
|
||||
return self.sheet_index < len(self.workbook.sheetnames)-1
|
||||
|
||||
def next_sheet(self):
|
||||
if self.has_next_sheet():
|
||||
self.sheet_index += 1
|
||||
self.init_sheet()
|
||||
|
||||
def init_sheet(self):
|
||||
self.sheet = self.workbook[self.workbook.sheetnames[self.sheet_index]]
|
||||
|
||||
def info(self):
|
||||
return """[OpenPyXL (.xlsx)] The number of worksheets is {0}
|
||||
Worksheet name(s): {1}
|
||||
'{2}': size: {3}x{4}""".format(len(self.workbook.sheetnames), self.workbook.sheetnames, self.sheet, self.sheet.max_row, self.sheet.max_column)
|
||||
|
||||
|
||||
def _get_cell(self, row, col):
|
||||
"""Внутренний метод для получения ячейки с преобразованием координат."""
|
||||
# openpyxl использует 1-индексированную систему
|
||||
|
||||
Reference in New Issue
Block a user