【发布时间】:2015-06-04 14:08:37
【问题描述】:
我正在使用 openpyxl 从 Excel 电子表格中复制数据。数据是库存数据库的表,其中每一行都是数据库中的一个条目。我使用 for 循环一次读取表格一行。为了确定 for 循环的范围,我编写了一个函数,它检查表格中的每个单元格以找到表格的高度。
代码:
def find_max(self, sheet, row, column):
max_row = 0
cell_top = sheet.cell(row = row - 1, column = column)
while cell_top.value != None:
cell = sheet.cell(row = row, column = column)
max = 0
while cell.value != None or sheet.cell(row = row + 1, column = column).value != None:
row += 1
max = max + 1
cell = sheet.cell(row = row, column = column)
if max > max_row:
max_row = max
cell_top = sheet.cell(row = row, column = column + 1)
return max_row
为了总结该函数,我移至工作表中的下一列,然后遍历该表中的每个单元格,跟踪其高度,直到没有更多列为止。这个函数的问题是它必须连续找到两个空单元格才能使条件失败。在以前的版本中,我使用了类似的方法,但只使用了一个列,并在我发现一个空白单元格时立即停止。我必须对其进行更改,以便在用户忘记填写一列时程序仍能运行。这个函数适用于一个小表,但在一个有数百个条目的表上,这会使程序运行得更慢。
我的问题是:我能做些什么来提高效率?我知道嵌套这样的while循环会使程序花费更长的时间,但我不知道如何解决它。我必须使程序尽可能地万无一失,所以我需要检查多个列以阻止用户错误导致程序失败
【问题讨论】:
标签: algorithm python-2.7 openpyxl