我想使用自定义方法扩展 openpyxl 工作簿类的现有功能。我知道通常我会简单地通过基于原始类定义我自己的类来做到这一点
class WorkbookExtended(openpyxl.Workbook):
def added_method(self):
print("Do some special stuff here")
到目前为止一切顺利,但我现在的问题是我获取 Excel 工作簿的方式是调用load_workbook(file),它不是工作簿类的一部分,但返回一个完全实例化的 Workbook 对象。另一方面,Workbook 类似乎没有提供一种基于现有对象实例化新对象的方法。所以问题是:我如何扩展一个类
- 是另一个函数的结果,并且
- 不提供基于现有对象初始化或复制自身的方法
编辑:更具体地说,我加载了一个现有的工作簿,并想添加一个在给定范围和工作表内搜索给定值的方法。我希望能够搜索完全匹配或包含搜索词的单元格值。现在我可以使用 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
尽管有这个更具体的问题描述,但我仍然对该问题的一般方法感到好奇。即,即使有一个工作簿或工作表函数可以执行类似的操作,原始问题仍然存在。