python-封装方法用于读取excel
利用openpyxl方法實(shí)現(xiàn)讀寫(xiě)excel表格
from openpyxl.reader.excel import load_workbook import os class ExcelMethod():def __init__(self, filename, sheetName):self.filename = filenameself.wb = load_workbook(filename)# 通過(guò)工作的表名獲取一個(gè)工作表對(duì)象self.sheet = self.wb[sheetName]# 獲取工作表中的最大行號(hào)self.maxRowNum = self.sheet.max_row# 獲取工作表中的最大列號(hào)self.max_column = self.sheet.max_column# 獲取總的行self.row = self.sheet.max_rowdef 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.實(shí)現(xiàn)獲取excel某張表的行數(shù)、單元格數(shù)據(jù)
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' #coding=utf-8 import xlrd #獲取excel文件 data = xlrd.open_workbook('file_path/xxx.xls')#存放excle表格的路徑 #獲取第一張表數(shù)據(jù) tables = data.sheets()[0] #打印表行數(shù) print(tables.nrows) #打印第4行,第3列單元格數(shù)據(jù) print(tables.cell_value(3,2))2.封裝獲取表格方法
此方法需要實(shí)現(xiàn)的作用是:其他方法再調(diào)用此方法時(shí),如果傳入file_name和sheet_id,就調(diào)用對(duì)應(yīng)路徑的excel文件和對(duì)應(yīng)的表。如果不傳這兩個(gè)字段,就調(diào)用默認(rèn)表格。
def __init__(self,file_name=None,sheet_id=None):if file_name:self.file_name = file_nameself.sheet_id = sheet_idelse:self.file_name = 'file_path/xxx.xls'self.sheet_id = 0self.data = self.get_data()3.封裝獲取表格數(shù)據(jù)方法
封裝獲取tables的方法,用以之后獲取單元格行數(shù)、單元格數(shù)據(jù),或其他表信息使用。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def get_data(self):data = xlrd.open_workbook(self.file_name)tables = data.sheets()[self.sheet_id]return tables4.封裝獲取單元格行數(shù)方法
def get_lines(self):tables = self.datareturn tables.nrows5.封裝獲取單元格數(shù)據(jù)的方法
def get_value(self,row,col):return self.data.cell_value(row,col)6.封裝獲取總行數(shù)和總列數(shù)
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''def get_nrown_ncols(self):#獲取總行數(shù)rowNum = self.data.nrows#獲取總列數(shù)colNum = self.data.ncolsreturn rowNum ,colNum7.寫(xiě)入數(shù)據(jù)到excel
def write_excel(self,row,column,value_back):''':param row: 某一列:param value: 需要寫(xiě)入的值:return:'''wb=load_workbook(self.file_name)sheel = wb[self.sheel_name]#把值寫(xiě)到row,column組成的單元格sheel.cell(row,column).value = value_back#保存excelwb.save(self.file_name)8.根據(jù)行號(hào)查找對(duì)應(yīng)內(nèi)容
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! '''#根據(jù)行號(hào),找到該行的內(nèi)容def get_row_values(self,row):tales = self.datarow_data = tales.row_values(row)return row_data整體代碼如下:
#coding: utf-8 import xlrdclass OpeExcel:def __init__(self,file_name=None,sheet_id=None):if file_name:self.file_name = file_nameself.sheet_id = sheet_idelse:self.file_name = 'file_path/xxx.xls'self.sheet_id = 0self.data = self.get_data()#獲取sheets的內(nèi)容def get_data(self):data = xlrd.open_workbook(self.file_name)tables = data.sheets()[self.sheet_id]return tables#獲取單元格行數(shù)def get_lines(self):tables = self.datareturn tables.nrows#獲取單元格數(shù)據(jù)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.給一個(gè)excel文件追加內(nèi)容:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' 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提供的方法讀取一個(gè)excel文件 rows = rexcel.sheets()[0].nrows # 用wlrd提供的方法獲得現(xiàn)在已有的行數(shù) excel = copy(rexcel) # 用xlutils提供的copy方法將xlrd的對(duì)象轉(zhuǎn)化為xlwt的對(duì)象 table = excel.get_sheet(0) # 用xlwt對(duì)象的方法獲得要操作的sheet table.write(1, 3, 'pass') # xlwt對(duì)象的寫(xiě)方法,參數(shù)分別是行、列、值 excel.save(dri_url) # xlwt對(duì)象的保存方法,這時(shí)便覆蓋掉了原來(lái)的excelpython編輯已存在的excel坑: BadZipFile: File is not a zip file
為了能反復(fù)編輯已存在的excel文件并保存,需要xlwt、xlrd、xlutils組合起來(lái)使用,代碼如下:
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' import xlwt, os, xlrd from xlutils.copy import copyclass Do_Excel:def __init__(self,filename,sheetname="Sheet1"):self.filename = filenameself.sheetname = sheetname#讀取exceldef 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文件是否存在,不存在則創(chuàng)建,存在則直接打開(kāi)編輯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)#綜合x(chóng)lw/xlrd/xlutis.copy 讀寫(xiě)excledef write(self,row,col,value):self.excel_create()rb = xlrd.open_workbook(self.filename)wb = copy(rb)ws = wb.get_sheet(0)#1代表是寫(xiě)到第幾個(gè)工作表里,從0開(kāi)始算是第一個(gè)。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"\data\user1.xlsx")Do_Excel(dir_excel).write(2,5,'pass')解決辦法二:直接使用openpyxl的Workbook和load_workbook,簡(jiǎn)單直接
rom openpyxl import Workbook,load_workbook import osclass Do_Excel:def __init__(self,filename,sheetname='Sheet1'):self.filename=filenameself.sheetname=sheetnamedef 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=valuewb.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') 與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python-封装方法用于读取excel的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python编程面试题
- 下一篇: python中创建对象的七种方式