xlwings基本操作
平时总是要对Excel进行操作,整理了一下平时经常会用到的操作,每次有新的操作需求就继承这些需要用到的基本方法,提高一下效率。
import xlwings as xw
import pandas as pd
class ExcelApp():
def __init__(self):
self.__app = xw.App(visible=False, add_book=False) # 启动
self.__app.display_alerts = False # 不显示Excel消息框
self.__app.screen_updating = False # 关闭屏幕更新,可加快宏的执行速度
@property
def app(self):
return self.__app
def quit(self):
self.__app.quit()
class ExcelWorkBook(ExcelApp):
def __init__(self,excelFile):
super().__init__()
self.__workBook = self.app.books.open(excelFile,password="9988",write_res_password="8899")
def getExcelAllSheet(self):
'''
:return: Excel所有的sheet对象 list
'''
return self.__workBook.sheets
def getWorkSheet(self,indexOrName):
'''
:param indexOrName: sheet下标 或者 sheet的名字
:return: sheet对象
'''
return self.__workBook.sheets[indexOrName]
def getExcelName(self):
'''
:return: 当前处理的excel文件名
'''
return self.__workBook.name
def getSheetMaxRow(self,workSheet):
'''
:param workSheet: 查询的sheet对象
:return: 最大行数
'''
return workSheet.used_range.last_cell.row
def getSheetMaxColumn(self,workSheet):
'''
:param workSheet: 查询的sheet对象
:return: 最大列数
'''
return workSheet.used_range.last_cell.column
def getSheetIndexRow(self,workSheet,index):
'''
:param workSheet: 查询的sheet对象
:param index: 行数 int
:return: 指定的行数据 list
'''
return workSheet.range("A1").expand().rows[0 if index <= 0 else index-1].value
def getSheetIndexColumn(self, workSheet, index):
'''
:param workSheet: 查询的sheet对象
:param index: 列数 int
:return: 指定的列数据 list
'''
return workSheet.range("A1").expand().columns[0 if index <= 0 else index-1].value
def getSheetRowsOrColumns(self,workSheet,transpose=False):
'''
:param workSheet: 查询的sheet对象
:param transpose: True-按照列遍历 False-按照行遍历
:return: 当前sheet所有数据,返回 [[],[],[],....]
'''
return workSheet.range("A1").expand().options(transpose=transpose).value
def getSheetRowsOrColumns_DataFrame(self, workSheet, header=False, transpose=False):
'''
:param workSheet: 查询的sheet对象
:param header: 是否要用第一列/行作为表头 True-要 False-不要
:param transpose: True-按照列遍历 False-按照行遍历
:return: sheet的DataFrame对象
'''
return workSheet.range("A1").expand().options(pd.DataFrame, header=header, transpose=transpose).value
#以下是写的操作
def saveNewExcelFile(self,data,savePath,saveName,sheetName="Sheet1",transpose=False):
'''
:param data: 数据格式[[],[]]
:param savePath: 文件保存地址
:param saveName: 文件保存名字
:param sheetName: sheet名称
:param transpose: True-按照列写入 False-按照行写入
:return:None
'''
newworkbook = self.app.books.add()
newworksheet = newworkbook.sheets.add(sheetName)
newworksheet.range("A1").options(transpose=transpose).value = data
newworksheet.range("A1").expand().autofit() # 自动适应
newworkbook.save(savePath + saveName)
def saveNewExcelFile_DataFrame(self,data,savePath,saveName,sheetName="Sheet1",transpose=False):
'''
:param data: 数据格式pd.DataFrame()
:param savePath: 文件保存地址
:param saveName: 文件保存名字
:param sheetName: sheet名称
:param transpose: True-按照列写入 False-按照行写入
:return:None
'''
newworkbook = self.app.books.add()
newworksheet = newworkbook.sheets.add(sheetName)
newworksheet.range("A1").expand().options(pd.DataFrame, index=False, transpose=transpose).value = data
newworksheet.range("A1").expand().autofit() # 自动适应
newworkbook.save(savePath + saveName)
def quit(self):
# 退出
self.__workBook.close()
self.app.quit()