版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
excel可以用来作为测试数据存储文件。在用了写方法之后,python没有相应的Close()方法关闭excel并释放内存资源,遗留了一些坑,有时候会发现excel存储的数据和预期对不上。实际上,是有用于数据保存后释放内存的API的,release_resources(),不过太低调了,以至于忽略了它。
简单操作excel,xlrd可以实现excel的读取操作,xlwt则是写入excel操作,xlutils3主要是为了修改excel,简单理解可以拷贝已有excel进行修改,生成新的excel表格。删数据用win32com.client。下面介绍用excel读写删改数据的六种常用方法:
import xlrd #读取excel数据
from xlutils.copy import copy #修改excel数据
import win32com.client as win32 #删除excel数据
1、获取第一列的数据
def get_excelFirstCol(self,excelName):
try:
#打开Excel
workbook = xlrd.open_workbook('F:\\phomeNetFront\\test_data\\excel\\'+excelName)
# 进入sheet
excel_sheet = workbook.sheet_by_index(0)
# 获取行数和列
max_row = excel_sheet.nrows
data=[]
row_num = 0
while row_num < max_row:
# 将表中第一列的所有数据写入data数组中
data.append(excel_sheet.cell(rowx=row_num,colx=0).value)
row_num = row_num + 1
print("data is: %r"%data)
return data
except BaseException as msg:
print(msg)
2、获取列表中第一列的行数
def get_ExcelRow(self,excelName):
try:
# 打开Excel
workbook = xlrd.open_workbook('F:\\phomeNetFront\\test_data\\excel\\' + excelName)
# 进入sheet
excel_sheet = workbook.sheet_by_index(0)
# 获取行数
max_row = excel_sheet.nrows
print("getExcelRow's max_row is:%d"%max_row)
return max_row
except BaseException as msg:
print(msg)
3、随机取得excel的行数和对应的文本值
def get_ranExcelText(self,excelName):
try:
# 打开Excel
workbook = xlrd.open_workbook('F:\\phomeNetFront\\test_data\\excel\\' + excelName)
# 进入sheet
excel_sheet = workbook.sheet_by_index(0)
# 获取行数
max_row = excel_sheet.nrows
print("get_ranExcelText maxrow is:%d"%max_row)
ranRow=random.randint(1,max_row)-1
print("ranRow is:%d"%ranRow)
text=excel_sheet.cell(rowx=ranRow, colx=0).value
print("get_ranExcelText is:%r"%text)
return (ranRow,text)#返回的是一个元组tuple
except BaseException as msg:
print(msg)
4、将数据追加到excel表中
def append_excel(self,excelName,var):
try:
#打开Excel
workbook = xlrd.open_workbook('F:\\phomeNetFront\\test_data\\excel\\'+excelName)
# 进入sheet
excel_sheet = workbook.sheet_by_index(0)
max_row = excel_sheet.nrows
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格
new_worksheet.write(max_row, 0, var) # 追加写入数据
new_workbook.save('F:\\phomeNetFront\\test_data\\excel\\'+excelName) #保存工作簿
print("xls格式表格追加数据成功!")
workbook.release_resources()#释放内存,关闭模板文件,win32不能使用该函数
except BaseException as msg:
print(msg)
5、修改excel最后一行的数据
def mod_excel(self,excelName,var):
try:
# 打开Excel
workbook = xlrd.open_workbook('F:\\phomeNetFront\\test_data\\excel\\' + excelName)
# 进入sheet
excel_sheet = workbook.sheet_by_index(0)
max_row = excel_sheet.nrows
new_workbook = copy(workbook) # 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0) # 获取转化后工作簿中的第一个表格
new_worksheet.write(max_row-1, 0, var) # 修改数据
new_workbook.save('F:\\phomeNetFront\\test_data\\excel\\' + excelName) # 保存工作簿
workbook.release_resources()
print("xls格式表格修改数据成功!")
except BaseException as msg:
print(msg)
6、删除列表中匹配的数据
def del_excel(self,excelName,row):
try:
# 打开Excel
workApp = win32.Dispatch('Excel.Application')
workbook=workApp.Workbooks.Open('F:\\phomeNetFront\\test_data\\excel\\' + excelName)
sht = workbook.Worksheets("Sheet1")
sht.Rows(row).Delete()
workbook.save('F:\\phomeNetFront\\test_data\\excel\\' + excelName)
except BaseException as msg:
print(msg)