Расширение класса учебника openpyxl - PullRequest
0 голосов
/ 22 апреля 2020

Я хотел бы расширить существующие возможности класса книги openpyxl с помощью пользовательских методов. Я понимаю, что обычно я просто делаю это, определяя свой собственный класс на основе исходного класса

class WorkbookExtended(openpyxl.Workbook):
    def added_method(self):
        print("Do some special stuff here")

Пока все хорошо, но моя проблема сейчас заключается в том, что способ получения моих книг Excel заключается в вызов load_workbook (файл) , который не является частью класса рабочей книги, но возвращает полностью инстанцированный объект Workbook. Класс Workbook, с другой стороны, не предлагает способ создания нового объекта на основе существующего. Поэтому возникает вопрос: как расширить класс, который

  • является результатом другой функции, а
  • не предлагает способ инициализации или копирования самого себя на основе существующего объекта

edit: более конкретно, я загружаю существующую книгу и хотел бы добавить метод, который ищет заданное значение в пределах заданного диапазона и листа. Я хочу иметь возможность искать точные совпадения или значения ячеек, которые содержат критерий поиска. Теперь я могу делать все это, используя существующие функции в openpyxl, но я хотел бы добавить его в класс Workbook, потому что это кажется наиболее естественным местом для такой функции.

from openpyxl import Workbook, load_workbook

class WorkbookExtended(Workbook):
    def locate_value(self, value, range, sheet="active", strict=True):
        pass # perform the search and return a list of cells

wb = load_workbook("test.xlsx")
wbe = WorkbookExtended(wb) # does not work because Workbook class doesn't
                           # take a workbook object as __init__ parameter
result = wbe.locate_value("foo", "A2:B10") # result contains a list of cells 
                                           # that have "foo" as value

Несмотря на это более конкретное c описание проблемы, мне все еще любопытен общий подход к этой проблеме. То есть, даже если есть функция для создания книги или таблицы, которая делает что-то подобное, оригинальный вопрос остается.

...