• python-封装方法用于读取excel


    利用openpyxl方法实现读写excel表格

    from openpyxl.reader.excel import load_workbook
    import os
    class ExcelMethod():
        def __init__(self, filename, sheetName):
            self.filename = filename
            self.wb = load_workbook(filename)
            # 通过工作的表名获取一个工作表对象
            self.sheet = self.wb[sheetName]
            # 获取工作表中的最大行号
            self.maxRowNum = self.sheet.max_row
            # 获取工作表中的最大列号
            self.max_column = self.sheet.max_column
            # 获取总的行
            self.row = self.sheet.max_row
    
        def readExcel(self):
            dataList = []
            try:
                for row in self.sheet.rows:
                    tmpList = []
                    for cell in row:
                        tmpList.append(cell.value)
                    dataList.append(tmpList)
            except:
             print("%s加载失败" % self.filename)
    
            else:
             return dataList[1:]
    
    
        def saveExcel(self, row, text):
            try:
                self.sheet.cell(row, self.max_column, text)
                self.wb.save(self.filename)
    
            except:
                print("%s 保存失败" % self.filename)
    
    if __name__=="__main__":
        dri_url = os.path.join(os.getcwd() + r"User1.xlsx")
        excel = ExcelMethod(dri_url,"Sheet1")
        dataJson = excel.readExcel()
        print(dataJson)
        excel.saveExcel(4,'pass')

    1.实现获取excel某张表的行数、单元格数据

    #coding=utf-8
    import xlrd
    #获取excel文件
    data = xlrd.open_workbook('file_path/xxx.xls')#存放excle表格的路径
    #获取第一张表数据
    tables = data.sheets()[0]
    #打印表行数
    print(tables.nrows)
    #打印第4行,第3列单元格数据
    print(tables.cell_value(3,2))

    2.封装获取表格方法

    此方法需要实现的作用是:其他方法再调用此方法时,如果传入file_name和sheet_id,就调用对应路径的excel文件和对应的表。如果不传这两个字段,就调用默认表格。

    def __init__(self,file_name=None,sheet_id=None):
            if file_name:
                self.file_name = file_name
                self.sheet_id = sheet_id
            else:
                self.file_name = 'file_path/xxx.xls'
                self.sheet_id = 0
            self.data = self.get_data()

    3.封装获取表格数据方法

    封装获取tables的方法,用以之后获取单元格行数、单元格数据,或其他表信息使用。

    def get_data(self):
            data = xlrd.open_workbook(self.file_name)
            tables = data.sheets()[self.sheet_id]
            return tables

    4.封装获取单元格行数方法

    def get_lines(self):
            tables = self.data
            return tables.nrows

    5.封装获取单元格数据的方法

     def get_value(self,row,col):
            return self.data.cell_value(row,col)

    6.封装获取总行数和总列数

     def get_nrown_ncols(self):
             #获取总行数
             rowNum = self.data.nrows
            #获取总列数
             colNum = self.data.ncols
             return rowNum ,colNum 

    7.写入数据到excel

    def write_excel(self,row,column,value_back):
            '''
            :param row: 某一列
            :param value: 需要写入的值
            :return:
            '''
            wb=load_workbook(self.file_name)
            sheel = wb[self.sheel_name]
            #把值写到row,column组成的单元格
            sheel.cell(row,column).value = value_back
            #保存excel
            wb.save(self.file_name)

    8.根据行号查找对应内容

       #根据行号,找到该行的内容
       def get_row_values(self,row):
            tales = self.data
            row_data = tales.row_values(row)
            return row_data

    整体代码如下:

    #coding: utf-8
    import xlrd
    
    class OpeExcel:
        def __init__(self,file_name=None,sheet_id=None):
            if file_name:
                self.file_name = file_name
                self.sheet_id = sheet_id
            else:
                self.file_name = 'file_path/xxx.xls'
                self.sheet_id = 0
            self.data = self.get_data()
    
        #获取sheets的内容
        def get_data(self):
            data = xlrd.open_workbook(self.file_name)
            tables = data.sheets()[self.sheet_id]
            return tables
    
        #获取单元格行数
        def get_lines(self):
            tables = self.data
            return tables.nrows
    
        #获取单元格数据
        def get_value(self,row,col):
            return self.data.cell_value(row,col)
    
    if __name__ == '__main__':
         opers = OpeExcel()
         print(opers.get_lines())
         print(opers.get_value(3,2))

     9.给一个excel文件追加内容:

    from xlrd import open_workbook
    from xlutils.copy import copy
    import os
    dri_url = os.path.join(os.getcwd()+r"user.xls")
    rexcel = open_workbook(dri_url)# 用wlrd提供的方法读取一个excel文件
    rows = rexcel.sheets()[0].nrows  # 用wlrd提供的方法获得现在已有的行数
    excel = copy(rexcel)  # 用xlutils提供的copy方法将xlrd的对象转化为xlwt的对象
    table = excel.get_sheet(0)  # 用xlwt对象的方法获得要操作的sheet
    table.write(1, 3, 'pass')  # xlwt对象的写方法,参数分别是行、列、值
    excel.save(dri_url)  # xlwt对象的保存方法,这时便覆盖掉了原来的excel

    python编辑已存在的excel坑: BadZipFile: File is not a zip file

    为了能反复编辑已存在的excel文件并保存,需要xlwt、xlrd、xlutils组合起来使用,代码如下:

    import xlwt, os, xlrd
    from xlutils.copy import copy
    
    
    class Do_Excel:
          def __init__(self,filename,sheetname="Sheet1"):
              self.filename = filename
              self.sheetname = sheetname
    
          #读取excel
          def excel_read(self,x,y):
              data = xlrd.open_workbook(self.filename)
              tabel = data.sheet_by_name(self.sheetname)
              return tabel.cell_value(x,y)
    
          #判断exce文件是否存在,不存在则创建,存在则直接打开编辑
          def excel_create(self):
               if not os.path.exists(self.filename):
                   data = xlwt.Workbook()
                   table = data.add_sheet(self.sheetname)
                   table.write(0,0,"id")
                   data.save(self.filename)
    
           #综合xlw/xlrd/xlutis.copy 读写excle
          def write(self,row,col,value):
              self.excel_create()
              rb = xlrd.open_workbook(self.filename)
              wb = copy(rb)
              ws = wb.get_sheet(0)#1代表是写到第几个工作表里,从0开始算是第一个。
              ws.write(row,col,value)
              wb.save(self.filename)
    
    
    if __name__=="__main__":
        dir = os.path.split(os.path.split(os.path.realpath(__file__))[0])[0]
        dir_excel  = os.path.join(dir+r"datauser1.xlsx")
        Do_Excel(dir_excel).write(2,5,'pass')
    View Code

    解决办法二:直接使用openpyxl的Workbook和load_workbook,简单直接

    rom openpyxl import Workbook,load_workbook
    import os
    
    class Do_Excel:
        def __init__(self,filename,sheetname='Sheet1'):
            self.filename=filename
            self.sheetname=sheetname
    
        def write(self,i,j,value):
            if not os.path.exists(self.filename):
                wb = Workbook()
                sh = wb.create_sheet(self.sheetname)
            else:
                wb = load_workbook(self.filename)
                sh = wb[self.sheetname]
            sh.cell(i,j).value=value
            wb.save(self.filename)
    
    Do_Excel('test222.xlsx').write(1,1,'sdcds')
    Do_Excel('test222.xlsx').write(1,2,'change')
    Do_Excel('test222.xlsx').write(3,2,'pass')
    View Code
    
    
  • 相关阅读:
    Android:Butter Knife 8.0.1配置
    webAPI获得链接客户端IP地址
    解决WebClient或HttpWebRequest首次连接缓慢问题
    Android Studio中有用的快捷键栏
    SQL十进制和十六进制相互转换
    SQL分组查询每组前几条数据
    POJ 1011 Sticks
    POJ 1144 Network(割点)
    求无向图中的割边(桥)
    POJ 2553 The Bottom of a Graph
  • 原文地址:https://www.cnblogs.com/lanyinhao/p/10721039.html
Copyright © 2020-2023  润新知