1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【openpyxl】python处理excel——删除指定行

【openpyxl】python处理excel——删除指定行

时间:2022-01-31 19:01:28

相关推荐

【openpyxl】python处理excel——删除指定行

本文给出了用openpyxl删除excel满足指定条件的行或列的正确示范,同时给出了一些网络资料的常见错误供读者参考

1.正确示范✔

因为需要删除的行数不固定,正确示范应该采用while循环来遍历excel表,方便删除操作,网络上很多教程采用for循环,存在循环过程中行号改变的错误

以下例子的功能为删除第五列为 True 的行,使用时需自行按照需求自行更改行列值和判断条件

from openpyxl import Workbook, load_workbookexcel_path = 'xxxx.xsl'wb = load_workbook(excel_path)ws=wb.activemax_row_num = ws.max_row #最大行数i = 0#以下例子的功能为删除第五列为 xxx 的行,使用时需自行按照需求自行更改行列值和判断条件row_n = 1 #起始行col_n = 5 #目标列while i < max_row_num:if ws.cell(row=row_n,column=col_n).value == 'xxx':ws.delete_rows(row_n)else:# print(ws.cell(row=row_n,column=5).value,row_n,sep='\t')row_n+=1i+=1wb.save(filename='xxxx.xlsx')wb.close

思路二:

先遍历一遍把要删除的行号记录下来然后采用逆序删除,先删除行号大的,从下往上删

from openpyxl import load_workbook# 基于ws删除一些行和一些列,注意没有备份,def del_ws_rows_cols(ws, rowd, cold): # 删除一些行和一些列,此程序不含保存操作。"""基于ws删除一些行和一些列要删的行序数放在rowd表格中,要删的列序数放在cold表格中本程序的关键是删除的行或列序数都必须是从大的开始删除,这样才不会乱序"""# wb = load_workbook(flname)# ws = wb[sheetname] rowd = sorted(rowd, reverse=True) # 确保大的行数首先删除cold = sorted(cold, reverse=True) # 确保大的列数首先删除for r in rowd: # rowd格式如:[1,3,5],表示要删除第1、3、5共三行。ws.delete_rows(r)for c in cold: # cold格式如:[2,6,10],表示要删除第2、6、10共三列ws.delete_cols(c)wb.save(flname) # 记得要保存。# 基于文件名和表格名删除一些行和一些列,注意没有备份。# flsh是指文件名flname和表格名sheetnamedef del_flsh_rows_cols(flname, sheetname, rowd, cold): # 基于文件名和表格名删除一些行和一些列"""基于文件名和表格名删除一些行和一些列要删的行序数放在rowd表格中,要删的列序数放在cold表格中本程序的关键是删除的行或列序数都必须是从大的开始删除,这样才不会乱序"""wb = load_workbook(flname)ws = wb[sheetname]rowd = sorted(rowd, reverse=True)cold = sorted(cold, reverse=True)for r in rowd:ws.delete_rows(r)for c in cold:ws.delete_cols(c)wb.save(flname) # 记得要保存。

2.错误示范❌

错误示范一:

#coding:utf-8import openpyxlwb=openpyxl.load_workbook(filename='xxxxxx.xlsx')ws=wb.activefor i in range(1,ws.max_row,1): #从第一行开始到最后一行逐行进行if ws.cell(row=i,column=1).value=='序号': #如果该行第一列值为‘序号’ws.delete_rows(i) #则删除该行print('删除第-',i,'-行成功!')wb.save(filename='yyyyyyy.xlsx')

错误示范二:

#coding:utf-8import openpyxlwb=openpyxl.load_workbook(filename='xxxxxx.xlsx')ws=wb.activerow_number=0for row in ws.iter_rows():#迭代遍历每行if row[1].value=='序号':#给定的条件,读者可根据自身需求自定义row_number=row[1].row#关键步骤!获得当前行的行号!ws.delete_rows(row_number)wb.save(filename='yyyyyyy.xlsx')wb.close

这两种错误示范都是用了for循环,在遍历的过程中因为删除导致行号改变了,而遍历的行号仍然按照原始数据的行号,导致有部分数据被跳过

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。