Как наследовать openpyxl.Workbook и читать в файл xlsx в экземпляр унаследованного класса? - PullRequest
1 голос
/ 23 марта 2020

Я определил класс следующим образом:

import openpyxl

class xlWorkbookTeX(openpyxl.Workbook):

    def __init__(self, filename):
        super().__init__()
        self.filename = filename
...

Моя цель - расширить класс Workbook с добавленной функциональностью (преобразование в LaTeX таблицы), и этот класс кажется наиболее подходящим, так как он имеет все функции, которые мне нужны для работы с прилагаемыми таблицами и т. д. c.

Но, как ни странно, я не могу найти функцию для чтения в существующем xlsx файле в инициализированном Workbook экземпляр в классе Workbook, хотя у него есть метод save?!

"Официальным" способом загрузки таких данных является openpyx.load_workbook(), который возвращает a Workbook объект. Но как получить эти данные в моем собственном xlWorkbookTeX экземпляре?

Я хочу избежать следующего:

  • добавить член Workbook (это не имеет смысла, поскольку я буду ссылаться на новый экземпляр Workbook под моим унаследованным объектом , делая прежнее устаревшее)
  • копирование (или назначение) всех элементов хранения данных из экземпляра load_workbook(), возвращенного в мой собственный объект (мне не нужно заботиться о внутренностях класса, это причина, которую я унаследовал от этого в первую очередь)

Я что-то упускаю здесь очевидное? Каков был бы «правильный» способ сделать это?

Спасибо заранее!

РЕДАКТИРОВАТЬ:

, поскольку это кажется не тривиальным (давайте назовем это странной архитектурой этого часть openpyxl?), я просто воспользовался ярлыком, которого хотел избежать:

def __init__(self, filename):
    super().__init__()
    # ok, awaiting a beter solution, just load and copy the data
    wb = openpyxl.load_workbook(filename=filename, data_only=True)
    self._sheets = wb._sheets
...

(Это, похоже, не проблема, поскольку, очевидно, нет других загруженных данных, кроме листов в моем case. YMMV хотя.)

EDIT2:

Полная реализация с использованием этого теперь в Github: xls2latex

...