Python有点新功能,但这是一个关于不重复编写函数的问题。
使用openpyxl
创建了一个文档类和一个工作簿(wb
),其中包含3张纸:
self.sheet1 = self.wb['sheet1']
self.sheet2 = self.wb['sheet2']
self.sheet3 = self.wb['sheet3']
我在此类中也有一个函数,该函数通过sheet3
的行查找特定的文本。
def find_text_row_number(self, text):
text_row_number = set([])
for row in self.sheet3.iter_rows(self.sheet3.min_row,self.sheet3.max_row):
for cell in row:
if cell.value == text:
text_row_number.add(cell.row)
return sorted(text_row_number)
我的问题是:如何在程序的其他位置调用此函数,并使其搜索sheet2
,而不是sheet3
??尝试过查看装饰器并使用默认值(sheet=self.sheet3
),但这会引发错误,因为尚未定义self
。
也许有更有效的方式来编写此特定功能?还是我缺少的某些Python方面可以在这里提供帮助?
答案 0 :(得分:1)
尝试:
def find_text_row_number(self, text, sheet_name='sheet1'):
text_row_number = set([])
sheet = getattr(self, sheet_name)
for row in sheet.iter_rows(sheet.min_row, sheet.max_row):
for cell in row:
if cell.value == text:
text_row_number.add(cell.row)
return sorted(text_row_number)
答案 1 :(得分:0)
不要使用单独的变量,请将所有工作表放在列表中。然后,您可以使用索引访问所需的索引。
第一个代码将初始化列表:
self.sheets = [self.wb['sheet1'], self.wb['sheet2'], self.wb['sheet3']]
然后您的其他方法可以采用可选索引。
def find_text_row_number(self, text, sheet_num = 3):
sheet = self.sheets[sheet_num-1]
text_row_number = set([])
for row in sheet.iter_rows(sheet.min_row,sheet.max_row):
for cell in row:
if cell.value == text:
text_row_number.add(cell.row)
return sorted(text_row_number)
要处理sheet2
时,请使用
x.find_text_row_number("text", sheet_num = 2)