Python处理Excel常用操作就是读和写,我的需求是需要在原excel文件中进行读写操作。共用到了两个模块xlrd和openpyxl,这两个模块都是需要自己去安装的。openpyxl只能用来处理 Excel 2007 及以上版本的 excel 文件,也就是 .xlsx/.xlsm 格式的表格文件,它对文件大小没有限制;其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行。
1 写一个包,包的名字叫Util 2 建立一个模块Excel,Excel.py 3 pip install openpyxl==2.4.5 4 类名:ParseExcel #实现一个构造函数,参数使用excel的绝对路径,并保存到实例变量中 from openpyxl import * from openpyxl.styles import Border, Side, Font import time import datetime class ParseExcel(object): def __init__(self,excel_file_path): self.excel_file_path=excel_file_path #加载这个excel文件,并保存到实例变量self.workbook中 class ParseExcel(object): def __init__(self,excel_file_path): self.excel_path=excel_file_path self.workbook=load_workbook(excel_file_path) #实现self.sheet为excel文件的第一个sheet class ParseExcel(object): def __init__(self,excel_file_path): self.excel_path=excel_file_path self.workbook=load_workbook(excel_file_path) self.sheet=self.workbook.active # 通过sheet名称获取sheet对象 def get_sheet_by_name(self, sheet_name): self.sheet=self.workbook.get_sheet_by_name(sheet_name) return self.sheet # 通过sheet索引获取sheet对象 def get_sheet_by_index(self, sheet_index): self.sheet=self.workbook.get_sheet_by_index(sheet_index) return self.sheet # 设置当前要操作的sheet对象,使用index来获取相应的sheet def set_sheet_by_index(self, sheet_index): self.sheet=self.workbook.get_sheet_by_index(sheet_index) # 设置当前要操作的sheet对象,使用sheet名称来获取相应的sheet def set_sheet_by_name(self, sheet_name): self.sheet=self.workbook.get_sheet_by_name(sheet_name) # 获取默认sheet中最大行数 def get_max_row_no(self): return self.sheet.max_row # 获取默认 sheet 的最大列数 def get_max_col_no(self): return self.sheet.max_column # 获取默认sheet的最小(起始)行号 def get_min_row_no(self): return self.sheet.min_row # 获取默认sheet的最小(起始)列号 def get_min_col_no(self): return self.sheet.min_column # 获取默认 sheet 的所有行对象, def get_all_rows(self): #rows=[] #for row in self.sheet.iter_rows(): #rows.append(row) #return rows self.sheet=self.sheet.rows() return list(self.sheet) # 获取默认sheet中的所有列对象 def get_all_cols(self): #cols=[] #for cloumn in self.sheet.iter_cols(): #cols.append(column) #return cols self.sheet=self.sheet.columns() return list(self.sheet) # 从默认sheet中获取某一行,第一行从0开始 def get_single_row(self, row_no): return self.sheet.get_all_rows()[row_no] # 从默认sheet中获取某一列,第一列从0开始 def get_single_col(self, col_no): return self.sheet.get_all_cols()[col_no] # 从默认sheet中,通过行号和列号获取指定的单元格,注意行号和列号从1开始 def get_cell(self, row_no, col_no): return self.sheet.cell(row=row_no,column=col_no) # 从默认sheet中,通过行号和列号获取指定的单元格中的内容,注意行号和列号从1开始 def get_cell_content(self, row_no, col_no): return self.sheet.cell(row=row_no,column=col_no).value # 从默认sheet中,通过行号和列号向指定单元格中写入指定内容,注意行号和列号从1开始 # 调用此方法的时候,excel不要处于打开状态 def write_cell_content(self, row_no, col_no, content, font=None): self.sheet.cell(row=row_no,column=col_no,value=content,font=None) self.workbook.save(self.excel_file_path) # 从默认sheet中,通过行号和列号向指定单元格中写入当前日期,注意行号和列号从1开始 # 调用此方法的时候,excel不要处于打开状态 def write_cell_current_time(self, row_no, col_no): self.sheet.cell(row=row_no,column=col_no,value=time.strftime("%Y:%m:%d",time.localtime()),font=None) self.workbook.save(self.excel_file_path) def save_excel_file(self): self.wrokbook.save(self.excel_file_path) if __name__=="__main__": pe=ParseExcel("c:\excel.xlsx") pe.set_sheet_by_index(0) #print pe.get_default_name() pe.set_sheet_by_name("Sheet2") #print pe.get_default_name() print pe.get_sheet_by_name("Sheet2") print pe.get_sheet_by_index(0) print 'max row:', pe.get_max_row_no() print pe.get_all_rows() # 获取所有行对象 print pe.get_all_rows()[0] # 获取第一行,获取某个行对象 print pe.get_all_rows()[0][1] # 获取第一行,第二列的单元格对象 print pe.get_all_rows()[0][1].value # 获取第一行,第二列单元格对象的值 print pe.get_all_cols() # 获取所有行对象 print pe.get_all_cols()[0] # 获取第一列,获取某个列对象 print pe.get_all_cols()[0][1] # 获取第一列的第二个单元格某个单元格对象 print pe.get_all_cols()[0][1].value # 获取第一列的第二个单元格的值 print pe.get_max_col_no() print pe.get_min_row_no() print pe.get_min_col_no() print pe.get_all_rows()[0] print len(pe.get_all_rows()) for cell in pe.get_all_rows()[0]: print cell.value print pe.get_all_cols() for col in pe.get_all_cols()[0]: print col.value for cell in pe.get_single_row(0): print cell.value for col in pe.get_single_col(0): print col.value print pe.get_cell(1, 1) print pe.get_cell_content(1, 1) pe.write_cell_content(4, 2, "wangjing") print pe.get_cell_content(4, 2) pe.write_cell_current_time(1, 1) print pe.get_cell_content(1, 1)