python在处理日志等数据后,需要将结果保存下来。通常会选择将结果存储到Excel文件中。
在这里我们将介绍python读写Excel的两种方式
xlwt 方式
需要安装三个库文件 xlrd(读Excel)xlwt(写Excel)xlutils(修改Excel)
使用 xlwt库操作Exccel表格,不能在已经存在的表格上修改数据,每次写数据都是创建一个新的Excel表格。由于他是先创建一个表格在写入数据,因此它支持Excel表格样式设计。
xlutils库通过copy功能,复制一个excel进行数据修改。
xlwings方式
xlwings操作一个库文件就可以对Excel进行读写操作,适合在事先创建好的表格上进行读写及修改该数据操作。同时它也支持新创建一个表格。
xlwings安装支持两种方式,在线安装和离线安装。
xlwings库官方地址:https://docs.xlwings.org/en/stable/
import xlwings as xw
class ExcelEdit:
def ExcelRead(self):
try:
# 设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
app = xw.App(visible=False, add_book=False)
# 打开Excel文件
table = app.books.open("D:/PythonWorkSpace/myexcel.xlsx")
# 根据Sheet索引切换到指定Sheet,索引从0开始.切换到第一个sheet
sheet1 = table.sheets[0]
# 获取sheet使用的总行数
nrows = sheet1.used_range.last_cell.row
# 获取sheet使用的总列数
ncols = sheet1.used_range.last_cell.column
print('总行数',nrows)
print("总列数",ncols)
# 修改单元格值
sheet1.range(1,1).value = 2
value = sheet1.range((1, 1), (1, 10)).value
print("读取表格数据",value)
#保存Excel
table.save("D:/PythonWorkSpace/myexcel.xlsx")
except Exception as e:
print("Excel文件读写异常信息:",e)
finally:
# 关闭Excel
table.close()
# 退出设置Excel属性
app.quit()
print("退出Excel程序")
ex = ExcelEdit()
ex.ExcelRead()
**一、操作Excel工作薄**
#设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
app = xw.App(visible=False, add_book=False)
#打开Excel文件
table = app.books.open(Excel文件名称)
#创建一个新的工作薄
wb = app.books.add()
wb.save(r'e:\test.xlsx')
#关闭Excel
table.close()
#退出设置Excel属性
app.quit()
**二、选择Excel工作薄的sheet**
#获取Excel文件中Sheet数量
table.sheets.count
#显示当前工作薄中所有的表单
table.sheets
#根据Sheet索引切换到指定Sheet,索引从0开始
table.sheets[索引号]
#根据Sheet名称切换到指定Sheet
table.sheets[Sheet名称]
#添加sheet
ws = table.sheets.add('Sheet_name')
#修改sheet名称
ws.name = 'Sheet_name'
#将所引用的表单设为活动表单
ws.activate()
#引用活动表单
ws = table.sheets.active
#删除表单
wb.sheets('Sheet_name').delete()
**三、遍历表单内容**
#获取表单使用信息
info = ws.used_range
行数:nrows = info.last_cell.row
列数:ncols = info.last_cell.column
**四、读取sheet数据**
#获取单元格值
value = sheet.range(单元格坐标).value
#获取第1行,第1列到第10列数据
value = sheet.range((1, 1), (1, 10)).value
value = sheet.range('A1:J1').value
#获取第2行,第2列数据
value = sheet.range(2,2).value
value = sheet.range('B2').value
#整行读取:
value = sheet.range('A1').expand('right').value
#整列读取:
value = sheet.range('A1').expand('down').value
#全部读取
data = sheet.range('A1').expand().value
**五、写入Excel**
#在第1行,第1列到第10列写入数据
#单元格data可以是元组、字符串表示的单坐标和区间坐标
data = ['北京', '上海', '广州', '深圳', '香港', '澳门', '台湾']
value = sheet.range((1, 1), (1, 10)).value = data
#在第1行,第1列写入数据
value = sheet.range((1, 1)).value = "AA"
#向一行或者一列写入数据
data = ['北京', '上海', '广州', '深圳', '香港', '澳门', '台湾']
行:ws.range('A1').value = data
列:ws.range('A1').options(transpose=True).value = data
**六、删除数据**
#删除指定单元格内容
sheet.range('A1').clear()
#全部清除
sheet.clear()
在上面基础模板上进行优化,将Excel根据不同的操作进行封装,分别实现打开表格、读写数据、关闭表格业务的封装。实现打开一次table,多次写入数据,最后关闭一次table。
import xlwings as xw
from src.WcsLog import WcsLog
class ExcelEdit:
def __init__(self,excelFile,excelSheet):
# Excel文件路径
self.excelFile = excelFile
self.excelSheet = excelSheet
self.app=False
self.table=False
def excelOpen(self):
try:
# 设置Excel打开属性,visible设置是否可视化,add_book表示是否新增Excel
self.app = xw.App(visible=False, add_book=False)
# 打开Excel文件
self.table = self.app.books.open(self.excelFile)
# 根据Sheet索引切换到指定Sheet,索引从0开始.切换到第一个sheet
self.sheet1 = self.table.sheets[self.excelSheet]
print("Excel文件打开:",self.excelFile)
return True
except Exception as e:
print("Excel文件打开失败:",e)
return False
def excelWrite(self,dataValue,position):
#写入sheet的数据
dataValue = dataValue
#写入sheet单元格坐标位置
position = position
try:
# 单元格写入
self.sheet1.range(position).value = dataValue
print("写入"+str(position)+":"+str(dataValue))
except Exception as e:
print("Excel读写失败:", e)
def excelClose(self):
try:
if(self.table):
# 保存Excel
self.table.save(self.excelFile)
except Exception as e:
print("Excel文件保存失败:", e)
finally:
if(self.table):
# 关闭Excel
self.table.close()
print("关闭Excel")
# 退出设置Excel属性
if(self.app):
self.app.quit()
print("退出Excel程序")
@staticmethod
def excelDispatch(datafile,excelfile,sheet=0):
# datafile 写入Excel的数据源
# excelfile 操作的Excel目标文件
# sheeet Excel文件的sheet表格
# position 写入sheet单元格坐标位置
ex = ExcelEdit(excelfile,sheet)
if (ex.excelOpen()):
for i in datafile:
dateValue = datafile[i]['date']
positionValue = datafile[i]['row'], date[i]['col']
ex.excelWrite(dateValue, positionValue)
ex.excelClose()
# tt = WcsLog()
# listfile = tt.allLogs('D:/PythonWorkSpace/newlog/')
#
# date = tt.logAnalusis(listfile)
datafile = date={'c': {'date': '[2019-09-28:23:11:35+0800]', 'row': 5, 'col': 1}, 'a': {'date': '[2019-09-28:23:09:40+0800]', 'row': 4, 'col': 1}, 'd': {'date': '[2019-09-28:23:09:56+0800]', 'row': 6, 'col': 1}}
excelfile = "D:/PythonWorkSpace/my3.xlsx"
ExcelEdit.excelDispatch(datafile,excelfile)