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()
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值