前言:在上一次的博客中,我学习到了对Excel文件的读、写、改操作。那么如何实现对Excel文件操作删除指定行的内容呢?
假设:我们可以先将Excel文件中的内容读取到定义好的组合数据变量中,然后将组合数据变量中的指定数据删除,然后写到原文件中。
首先,我们将Excel文件中的内容读到以文件第一列key,文件的每行为value的字典dic中。
def read_excel(self,bookname, sheetname):
#打开Excel文件
wb = xlrd.open_workbook(bookname)
sheet = wb.sheet_by_name(sheetname)
dic={}
for i in range(sheet.nrows-1):
lis=[]
for j in range(sheet.ncols):
lis.append(sheet.cell(i+1,j).value)
dic[sheet.cell(i+1,0).value]=lis
return dic
删除指定行内容。
def remove_order(self,num, dic4, dic2, bookname, sheetname):
flag = False
sum = 0
for i in dic4.keys():
if num == i and dic2[num][9]=='已退款': #判定指定属性,确定删除行
sum += 1
dic2.pop(num)
self.updateExcle(dic2,'D:\pythoncode\order.xls','Sheet1',sum)
flag = True
break
return flag
删除后写入到原表中,因为我们删除了一条记录,所以再写入到原表中时,不能够再把最后一行数据进行覆盖。因此我们需要写入一行全空的数据到组合数据中,然后再写入到原表中,这样就可以完成了!
def updateExcle(self,dic,bookname,sheetname,sum=0):
wb=xlrd.open_workbook(bookname)
sheet=wb.sheet_by_name(sheetname)
new_wb=copy(wb) #将原有的Excel,拷贝一个新的副本
new_sheet=new_wb.get_sheet(0)
m=0
for i in dic.keys():
m+=1
n=0
for j in dic[i]:
new_sheet.write(m,n,j)
n+=1
for h in range(m+1,m+1+sum):
m+=1
n = 0
for k in dic[i]:
new_sheet.write(m,n,'')
n+=1
new_wb.save(bookname)