openpyxl版本: 2.5.0, pandas版本: 0.22
# -*- coding:utf-8 -*-
from pandas import DataFrame
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from Tools.tools import decoLOG
from Tools.Log import Log
'''
功能: Excel类
作者:
作成时间:
更新内容:
更新时间:
'''
class Excel(object):
def __init__(self, filename=""):
# excel file
self.fileName = filename
self.workbook = None
# open excel
def openFile(self, filename=""):
if filename == "" and self.fileName == "":
Log().logger.error("Open Excel Error![Filename is nothing]")
return None
else:
try:
self.fileName = (filename if filename!="" else self.fileName)
self.workbook = load_workbook(filename=self.fileName, read_only=False,
data_only=True, keep_vba=True)
except Exception as e:
Log().logger.error("Open Excel Error![MSG=%s,Filename=%s]"%(str(e),self.fileName))
return None
return self.workbook
# excel is opened or not
def isOpen(self):
if self.workbook is None:
return False
else:
return True
# close excel
def close(self):
if self.isOpen():
self.workbook.close()
# read sheet to array
@decoLOG
def readSheetToArray(self, sheetname):
if self.fileName == "":
Log().logger.error("Filename is nothing! Read Sheet Error!")
return None
if not self.isOpen():
if self.openFile() is None:
return None
try:
data = self.workbook[sheetname].values
except Exception as e:
Log().logger.error("Read Sheet Error![MSG=%s, Filename=%s, Sheetname=%s]"%(str(e),self.fileName,sheetname))
return None
return DataFrame(data)
# write array to sheet
def writeSheetbyArray(self, sheetname, df):
if self.fileName == "":
Log().logger.error("Filename is nothing! Read Sheet Error!")
return None
if not self.isOpen():
if self.openFile() is None:
return None
if sheetname in self.workbook.sheetnames:
self.workbook.remove(self.workbook[sheetname])
ws = self.workbook.create_sheet(sheetname, len(self.workbook.sheetnames))
for r in dataframe_to_rows(df, index=False, header=False):
ws.append(r)
# save excel
def save(self):
if not self.workbook.read_only:
self.workbook.save(self.fileName)