20191011-构建我们公司自己的自动化接口测试框架-Util的读取excel常用方法模块

包括获取excel的sheet名字,设定excel的sheet,读excel,写excel等常规操作。

from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import colors, Font
import locale, time


class Excel(object):
    def __init__(self, excel_file_path):
        self.excel_file_path = excel_file_path  # 目的在于在类的不同方法中共享此变量
        self.wb = load_workbook(excel_file_path)  # 表格对象
        self.ws = self.wb[self.wb.sheetnames[0]]  # 表格的第一个sheet对象
        # 获取第一个sheet不能用self.wb.ative,因为这个选择的是默认被打开的那个,如果表格在关闭前是打开的第三个sheet,那么下一次打开的时候就是默认在第三个sheet的
        # print(self.ws.title)

    def get_all_sheet_names(self):
        return self.wb.sheetnames
    def get_current_sheet_names(self):
        return self.ws.title

    def get_sheet_name_by_index(self, index):
        return self.wb.sheetnames[index - 1]

    def get_excel_file_path(self):  # 获取excel表格的路径
        return self.excel_file_path

    def create_sheet1(self, sheet_name, position=None):
        try:
            if position:
                self.wb.create_sheet(sheet_name, position)
            else:
                self.wb.create_sheet(sheet_name)
            self.save()  # 向表格里写入东西后一定要保存
            return True
        except Exception as e:
            print(e)
            return False

    def set_sheet_by_name(self, sheet_name):
        if sheet_name not in self.wb.sheetnames:
            print('%s sheet不存在,请重新设置!' % sheet_name)
            return False
        self.ws = self.wb[sheet_name]
        return True

    # 根据index设置activate sheet
    def set_sheet_by_index(self, index):
        if index >= len(self.wb.sheetnames):
            return False
        self.ws = self.wb[self.get_sheet_name_by_index(index)]
        return True

    # 读值
    def get_cell_value(self, row_no, col_no, sheet_name=None):
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        return self.ws.cell(row_no, col_no).value

    # 读某一行的值
    def get_row_values(self, row_no):
        cell_values = []  # 因为会返回多个值
        for cell in list(self.ws.rows)[row_no - 1]:
            cell_values.append(cell.value)
        return cell_values

    #读取某个sheet的所有行中的单元格内容,使用2维的列表进行存储
    def get_rows_values(self,sheet_name=None):
        all_cell_values = []  # 所有的单元格的值均存入列表
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        for row in list(self.ws.rows):
            row_values = []
            for cell in row:
                row_values.append(cell.value)
            all_cell_values.append(row_values)
        return all_cell_values

    # 读某一列的值
    def get_col_values(self, col_no, sheet_name=None):
        cell_values = []  # 因为会返回多个值
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        for cell in list(self.ws.columns)[col_no - 1]:
            cell_values.append(cell.value)
        return cell_values

    # 读某个范围的值
    def get_some_values(self, min_row_no, min_col_no, max_row_no, max_col_no, sheet_name=None):
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        values = []
        for i in range(min_row_no, max_row_no + 1):
            row_values = []  # 用来存一行的值
            for j in range(min_col_no, max_col_no + 1):
                row_values.append(self.ws.cell(row=i, column=j).value)
            values.append(row_values)  # 将读到的这一行值加入结果中
        return values

    # 保存
    def save(self):
        self.wb.save(self.excel_file_path)

    #
    def write_cell_value(self, row_no, col_no, value, style=None, sheet_name=None):
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        if style is None:
            style = colors.BLACK
        elif style == 'red':
            style = colors.RED
        elif style == 'green':
            style = colors.GREEN
        self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
        self.ws.cell(row=row_no, column=col_no, value=value)
        self.save()
        return True

    # 写时间
    def write_current_time(self, row_no, col_no, style=None, sheet_name=None):
        if sheet_name is not None:  # 参数设置了新的sheet
            result = self.set_sheet_by_name(sheet_name)
            if result == False:
                return None
        if style is None:
            style = colors.BLACK
        elif style == 'red':
            style = colors.RED
        elif style == 'green':
            style = colors.GREEN
        locale.setlocale(locale.LC_ALL, 'en')
        locale.setlocale(locale.LC_CTYPE, 'chinese')
        self.ws.cell(row=row_no, column=col_no).font = Font(color=style)
        self.ws.cell(row=row_no, column=col_no, value=time.strftime('%Y年%m月%d日 %H时%M分%S秒'))
        self.save()
        return True


if __name__ == '__main__':
    from ProVar.ProjConfigVar import *
    excel = Excel(ExceldirPath)
    print(excel.get_current_sheet_names())

 

posted @ 2019-10-11 15:54  何发奋  阅读(245)  评论(0编辑  收藏  举报