首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
28 篇文章
1
一篇文章让你入门API测试
2
[接口测试 - 基础篇] 01 你应该了解的协议基础
3
[接口测试 - 基础篇] 02 你应该掌握的Python3接口测试内功
4
[接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
5
[接口测试 - 基础篇] 04 无法绕过的json解析
6
[接口测试 - 基础篇] 05 好讨厌的xml解析
7
[接口测试 - 基础篇] 06 好吧也来解析下html
8
[接口测试 - 基础篇] 07 来来来,一起读写excel玩玩之一
9
[接口测试 - 基础篇] 08 封装个基本的excel解析类
10
[接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
11
[接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
12
[接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
13
[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
14
[接口测试 - 基础篇] 13 写在接口测试基础篇完结时
15
[接口测试 - http.client篇] 14 源码初探及其工作机制分析
16
[接口测试 - http.client篇] 15 常用API说明及基本的示例
17
[接口测试 - http.client篇] 16 基于http.client之POM实战一下
18
[接口测试 - http.client篇] 17 http.client之入门级接口测试框架
19
接口测试 | urllib篇 18 urllib介绍
20
接口测试 | urllib篇 19 urllib基本示例
21
[接口测试 -基础篇] 20 用flask写一个简单server用于接口测试
22
接口测试 | 21 基于flask弄个restful API服务出来
23
接口测试 | 22 requests基础入门
24
接口测试 23 requests基础入门二
25
接口测试 | 24 requests + unittest集成你的接口测试
26
接口测试 | 25 requests + pytest测试实例
27
接口测试 | 26 基础及简要验证清单
28
接口测试 | 27 HTTP接口详细验证清单

[接口测试 - 基础篇] 08 封装个基本的excel解析类

概述

本文基于openpyxl封装一个excel解析类,请注意,不采用Python的任何高级特性,就简简单单的一个类,实现excel的一些基本操作,并演示如何使用该类。

封装类及使用

直接上代码。

代码语言:javascript
复制
#-*- coding:utf-8 -*-

__author__ = "苦叶子"

import os
from openpyxl import Workbook, load_workbook


# excel自定义封装类
class LYMOpenXL:
    def __init__(self, path, read_only=False):
        self.wb = None
        if os.path.exists(path):
            self.path = path
            self.wb = load_workbook(self.path, 
                read_only=read_only)        
        else:
            print("%s 文件不存在" % path)
            exit(0)    
    
    # 获取excel的行数
    # 如果指定的工作簿存在,则返回其数据行数,否则返回None
    def get_cell_row(self, sheet):
        if self.wb:            
            # 先通过sheet获取工作簿
            sh = self.wb.get_sheet_by_name(sheet)            
            if sh: 
                return sh.max_row        
        
         return None
                
    # 获取excel的列数
    # 如果指定的工作簿存在,则返回其数据列数,否则返回None
    def get_cell_col(self, sheet):
        if self.wb:            
            # 先通过sheet获取工作簿
            sh = self.wb.get_sheet_by_name(sheet)            
            if sh:            
                return sh.max_column  
                      
        return None

    # 获取工作簿名称列表
    def get_sheets_name(self):
        if self.wb:                      
            return self.wb.get_sheet_names()        
                      
        return None

    # 通过索引获取工作簿名
    # 索引从0开始
    def get_sheet_name_by_index(self, index):
        if self.wb:
            sheets = self.wb.get_sheet_names()
            sheet_len = len(sheets)       
                      
            if index >= 0 and index < sheet_len:            
                      
                return sheets[index]        
                      
        return None
    
    # 创建工作簿
    def create_sheet(self, name, index=0):
        res = False
        if self.wb:
            self.wb.create_sheet(title=name, index=index)     
            res = True
               
        return res    
                      
        
    # 修改工作簿名
    def set_sheet_name(self, sheet_name, name):
        res = False
        if self.wb:
            self.wb[sheet_name].title = name
            res = True

        return res    
    
    # 获取单元格值
    def get_cell_value(self, sheet, row, col):
        value = None
        if self.wb:
            value = self.wb[sheet].cell(row=row, 
                column=col).value        return value    
    
    # 设置单元格值
    def set_cell_value(self, sheet, row, col, value):
        res = False
        if self.wb:
            self.wb[sheet].cell(row=row, 
                column=col).value = value
            res = True

        return res    
    
    # 保存
    def save(self, path=""):
        if path != "":
            self.path = path        
        
        if self.wb:
            self.wb.save(self.path)
       
if __name__ == "__main__":
    print("python openpyxl基本实例")
    print("---" * 20, end='\n')

    xl = LYMOpenXL("openpyxl_demo.xlsx")    
       
    # 获取所有工作簿名
    sheets = xl.get_sheets_name()
    print(">>>获取工作簿列表", end='\n')
    print(sheets)    
       
    # 通过索引获取工作簿名
    print("---" * 20, end='\n')
    print(">>>通过所有获取工作簿名")    
    for index in range(0, len(sheets)):
        print(xl.get_sheet_name_by_index(index), 
            end='  ')
       
    print(end='\n')    
    
    # 获取各工作簿数据行列数
    print("---" * 20)    
    for sheet in sheets:
        nrows = xl.get_cell_row(sheet)
        ncols = xl.get_cell_col(sheet)
        print("工作簿[%s]的数据行列数为(%d, %d)" 
               % (sheet, nrows, ncols))    
       
    # 获取各工作簿中的数据
    print("---" * 20)
    print(">>>获取工作簿中数据")    
    for sheet in sheets:
        nrows = xl.get_cell_row(sheet)
        ncols = xl.get_cell_col(sheet)
        print("---" * 20, end='\n')
        print("工作簿[%s]数据如下: " % sheet)        
        for row in range(1, nrows+1):            
            for col in range(1, ncols+1):
                value = xl.get_cell_value(sheet, row, col)
                print("[%d, %d]->%s" % 
                    (row, col, value), end='\t')    
            
    # 修改各工作簿第一行的数据为:DeepTest
    print("---" * 20)
    print(">>>设置工作簿中数据")    
    for sheet in sheets:
        ncols = xl.get_cell_col(sheet)        
        for col in range(1, ncols+1):
                xl.set_cell_value(sheet, row=1, col=col, 
                    value="DeepTest")    
    
    # 保存
    xl.save()

小结

请自行查阅openpyxl官方文档去实现以下功能

  • 一次性读取多个单元格的值
  • 设置指定单元格的字体
  • 设置指定单元格的样式(例如背景色等)
下一篇
举报
领券