zoukankan      html  css  js  c++  java
  • 搭建数据驱动框架第一步-实现一个构造函数,将对Excel文件的基本操作API都封装进去

    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)
  • 相关阅读:
    [HAOI2015]按位或
    【bzoj 4675】 点对游戏
    [WC2013]糖果公园
    [国家集训队]数颜色 / 维护队列
    【bzoj 3252】攻略
    [ZJOI2016]小星星
    hdu-1712 ACboy needs your help---分组背包
    hdu-2844&&POJ-1742 Coins---多重背包
    UVA-147 Dollars---完全背包+打表
    hdu-2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活---多重背包
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/9256365.html
Copyright © 2011-2022 走看看