我正在使用openpyxl处理一个.xlsx文件,该文件包含大约10K个产品,其中一些是“常规项目”,一些是需要订购的产品。对于我正在做的项目,我希望删除包含需要订购的项目的所有行
我用实际工作簿的一小部分样本进行了测试,代码按照我想要的方式运行。然而,当我在实际的工作簿中尝试这项操作时,删除这些行似乎要花费很长时间(它已经运行了将近一个小时)
以下是我使用的代码:
wb = openpyxl.load_workbook('prod.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
def clean_workbook():
for row in sheet:
for cell in row:
if cell.value == 'ordered':
sheet.delete_rows(cell.row)
我想知道在我的代码中有没有一个更快的方法来做一些调整?或者,有没有更好的方法只读取工作簿中的常规库存,而不删除不需要的项目
删除循环中的行可能很慢,因为openpyxl必须更新被删除行下面的所有单元格。因此,您应该尽可能少地这样做。一种方法是收集行号列表,检查连续组,然后使用此列表从底部删除
更好的方法可能是通过
ws.values
循环并写入一个新的工作表,过滤掉相关的行。复制任何其他相关数据,如格式等。然后可以删除原始工作表并重命名新工作表对于更复杂的过滤,您可能希望将值加载到数据帧中,进行更改,然后写入新的工作表
您可以以只读模式打开,并将所有内容导入列表,然后在列表中修改总是比在excel中工作快得多。修改列表后,制作新的工作表并将列表上载回excel。我用我的10万个项目excel这样做
相关问题 更多 >
编程相关推荐