Python xlwings获取指定数据的基本操作

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()

你可能感兴趣的:(python,开发语言,自动化)