【发布时间】:2021-10-07 16:25:11
【问题描述】:
我正在使用库Openpyxl
我有 15 个函数,它们看起来与下面的函数相同,只是字符串不同。我尝试将它们组合成一个函数,但这只会使整个工作表空白行。到目前为止,我发现的唯一方法是为每个函数设置一个单独的函数。
这是唯一的方法,还是有更简单、更有效的方法?
import openpyxl
pws = openpyxl.load_workbook(filepath.xlsx)
pws_sheet = pws['Sheet']
def ans_call_by_agent():
flag=False
for row in pws_sheet.iter_rows():
for cell in row:
if cell.value == 'Ans. Call Distribution by Agent':
pws_sheet.insert_rows(cell.row, amount=1)
pws.create_sheet('Ans. Call by Agent')
flag=True
if flag:break
else:
continue
def all_calls_by_hour():
flag=False
for row in pws_sheet.iter_rows():
for cell in row:
if cell.value == 'All Call Distribution by Hour':
pws_sheet.insert_rows(cell.row, amount=1)
pws.create_sheet('All Calls by Hour')
flag=True
if flag:break
else:
continue
#call blank row functions
ins_agent_availability_detail()
ins_agent_missed_calls()
ins_all_calls_by_day()
ins_all_calls_by_day_of_week()
ins_all_calls_by_hour()
ins_all_calls_by_queue()
ins_all_service_level()
ins_ans_calls_agent()
ins_ans_calls_by_queue()
ins_ans_call_detail()
ins_ans_service_level()
ins_call_disconnection_cause()
ins_unans_calls_by_queue()
ins_unans_call_detail()
ins_unans_service_level()
单函数尝试如下,只在工作表顶部添加一个空行,然后停止。
def ans_calls_by_agent():
#flag=False
for row in pws_sheet.iter_rows():
for cell in row:
if cell.value == 'Ans. Call Distribution by Agent':
pws_sheet.insert_rows(cell.row, amount=1)
pws.create_sheet('Ans. Call by Agent')
pws_sheet.delete_rows(cell.row, amount=1)
elif cell.value == 'All Call Distribution by Hour':
pws_sheet.insert_rows(cell.row, amount=1)
pws.create_sheet('All Calls by Hour')
pws_sheet.delete_rows(cell.row, amount=1)
#flag=True
#if flag:break
else:
continue
如果我注释掉标志行并添加pws_sheet.delete_rows(cell.row,amount=1),那么它将继续,但只有当cell.value 被删除并且我宁愿这不是解决方案时。
【问题讨论】:
-
问题出在哪里还不完全清楚。在您的标题中,您询问如何插入空白行,但看起来好像您已经解决了这个问题。你还问效率,你是想减少重复代码还是提高性能?
-
现在我有 15 个功能几乎完全相同。我想我只是想知道我是否可以将它们全部塞进一个函数中,而不是调用 15 个本质上做同样事情的不同函数。我编辑了上面的代码以反映我必须做的事情。
-
您说您尝试组合成一个函数;你能分享你的尝试吗?
-
我在主帖中提供了单一功能尝试。如果我删除 if
flag:break则整个工作表将变为空白行,并使用第一个 if 语句创建大量新工作表。 -
无论
cell.value是什么,单个函数都会为第一个单元格设置flag=True。您是否尝试过使用 2 个字符串作为参数来编写函数?