首页 > 编程语言 >python接口自动化系列 - openpyxl库封装04

python接口自动化系列 - openpyxl库封装04

时间:2023-01-05 14:24:09浏览次数:46  
标签:sheet openpyxl 04 get python self print row name

前言

为了更好的让openpyxl在工作中使用,将openpyxl的常用操作封装起来,这样不仅复用性高,而且阅读性好

from openpyxl import load_workbook
from openpyxl.styles import PatternFill
class ParseExcel:
    # 初始化表格
    def __init__(self,excel_file_path):
        self.excel_file_path = excel_file_path
        self.wb = load_workbook(excel_file_path)
        self.ws = self.wb.active
    # 通过sheet名获取sheet表
    def get_sheet_by_name(self,sheet_name):
        self.ws = self.wb.get_sheet_by_name(sheet_name)
        # self.ws = self.wb[sheet_name]  # 方式二也可以
        return self.ws


    # 通过索引获取sheet表
    def get_sheet_by_index(self,index=1):
        sheet_name = self.wb.sheetnames[index-1]
        self.ws = self.wb[sheet_name]
        return self.ws

    # 获取所有的sheet名,列表格式
    def get_all_sheet_names(self):
        return self.wb.sheetnames

    # 获取单元格数据
    def get_cell_value(self,row_no,col_no,sheet_name=None):
        if sheet_name == None:
            return self.ws.cell(row=row_no, column=col_no).value
        return self.wb[sheet_name].cell(row=row_no, column=col_no).value
    # 获取单元格对象
    def get_cell_obj(self,row_no,col_no,sheet_name=None):
        if sheet_name == None:
            return self.ws.cell(row=row_no, column=col_no)
        return self.wb[sheet_name].cell(row=row_no, column=col_no)
    # 获取最大行号
    def get_max_row_num(self,sheet_name=None):
        if sheet_name == None:
            return self.ws.max_row
        return self.get_sheet_by_name(sheet_name).max_row
    # 获取最大列号
    def get_max_col_num(self,sheet_name=None):
        if sheet_name == None:
            return self.ws.max_column
        return self.get_sheet_by_name(sheet_name).max_column
    # 获取最小行号,默认为1
    def get_min_row_num(self,sheet_name=None):
        if sheet_name == None:
            return self.ws.min_row
        return self.get_sheet_by_name(sheet_name).min_row
    # 获取最小列号,默认为1
    def get_min_col_num(self,sheet_name=None):
        if sheet_name == None:
            return self.ws.min_column
        return self.get_sheet_by_name(sheet_name).min_column
    # 获取某行的值,rows中的行以0开始
    def get_some_row_value(self,row_no,sheet_name=None):
        row_value = []
        if sheet_name is not None:
            self.get_sheet_by_name(sheet_name)
        for i in list(self.ws.rows)[row_no-1]:
            row_value.append(i.value)
        return row_value
    # 获取某列的值,columns中的行以0开始
    def get_some_col_value(self,col_no,sheet_name=None):
        col_value = []
        if sheet_name is not None:
            self.get_sheet_by_name(sheet_name)
        for i in list(self.ws.columns)[col_no-1]:
            col_value.append(i.value)
        return col_value


    #保存单元格
    def save_excel(self):
        self.wb.save(self.excel_file_path)
    #单元格写入内容,并标记颜色
    def write_cell_value(self,row_no,col_no,value,start_color=None,sheet_name=None):
        if sheet_name is not None:
            self.get_sheet_by_name(sheet_name)
        a1=self.ws.cell(row=row_no, column=col_no)
        #填充背景颜色
        a1.fill = PatternFill(start_color=start_color, fill_type="solid")
        a1.value = value
        self.save_excel()
        return True

    def read_excel(self):
        data = []  # 定义一个列表接收每一组数据
        title = {}  # 定义一个字典
        for i in range(1, self.ws.max_column + 1):
            title[i] = self.ws.cell(1, i).value  # 遍历最大列依次获取每个单元格的value
            # print("打印第1行,所有列的数据:",title[i])

        for i in range(2, self.ws.max_row + 1):  # 从第2行开始遍历最大行
            values = {}
            for j in range(1, self.ws.max_column + 1):  # 从第2行第1列开始遍历单元格
                # 获取每个单元格的数据后,通过title去匹配标题对应的value数据
                # print("打印",title[j])
                values[title[j]] = self.ws.cell(i, j).value
                # print("值:",values[title[j]])
            data.append(values)  # 把每一组数据添加至data列表内
        # [{key1: vlaue1, key2: value2},{...},...]
        return data



if __name__ == "__main__":
    pe = ParseExcel("./case/imooc.xlsx")
    print("------------")
    ws = pe.get_sheet_by_name('Sheet1')
    print("获取sheet表名:",ws)
    print("------------")
    print("获取sheet表名:",pe.get_sheet_by_index())
    print("------------")
    print("获取所有sheet表名:",pe.get_all_sheet_names())
    print("------------")
    print("获取指定单元格数据:",pe.get_cell_value(1,1))
    print("------------")
    print("获取指定单元格对象:",pe.get_cell_obj(1,1,'Sheet1'))
    print("------------")
    print("获取指定单元格对象:",pe.get_cell_obj(1,1))
    print("------------")
    print("获取最大行号:",pe.get_max_row_num('Sheet1'))
    print("------------")
    print("获取最大列号:",pe.get_max_col_num('Sheet1'))
    print("------------")
    print("获取最小行号:", pe.get_min_row_num('Sheet1'))
    print("------------")
    print("获取最小列号:", pe.get_min_col_num('Sheet1'))
    print("------------")
    print("获取某行的值:", pe.get_some_row_value(1,'Sheet1'))
    print("------------")
    print("获取某列的值:", pe.get_some_col_value(2, 'Sheet1'))
    print("------------")
    print(pe.write_cell_value(9, 2, "nihao", start_color="FF0000", sheet_name="Sheet1"))   # 红色对应16进制值#FF0000
    print("------------")
    print(pe.write_cell_value(9, 3, "钉钉", start_color="009900", sheet_name="Sheet1"))     #绿色对应16进制值009900
    print("------------")
    print(pe.read_excel())

 返回结果:

 

 

 

 

标签:sheet,openpyxl,04,get,python,self,print,row,name
From: https://www.cnblogs.com/xfbk/p/17026855.html

相关文章

  • Python设计图书馆管理系统技术文档(五)
    (Python设计图书馆管理系统技术文档(五))5.3管理功能实现这个程序管理员的功能就3个,添加书籍、淘汰书籍、用户管理。5.3.1管理员界面(AdminHome.py)importsysimportq......
  • Python设计图书馆管理系统技术文档(六)
    (Python设计图书馆管理系统技术文档(六))6.图形界面程序打包与资源下载6.1打包(1)PyInstaller命令格式:pyinstaller[options]script-D:将所有文件打包到一个目录下-F:将......
  • python 字符串前加‘f‘ ‘r‘ ‘b‘ ‘u‘作用
    python字符串前的修饰字符串前加f以f开头表示在字符串内支持大括号内的python表达式print(f'{name}donein{time.time()-t0:.2f}s')输出:processingdonein......
  • Python实践中问题
    Python入门必看!零基础也能学-哔哩哔哩​​Python基础教程|菜鸟教程​​​​Python3教程|菜鸟教程​​​​Python图形界面框架PySide6使用及避坑指南_java编程艺......
  • 路由别名和404路由页面配置
    路由别名配置-alias配置路由重定向,当用户访问/a的时候,URL会被替换/b之后匹配实际路由/b配置路由别名,/a的别名是/b,当用户访问/b的时候,URL会保持为/b,但路由匹配为/a,和用......
  • Openpyxl教程-基础操作
    1.openpyxl简介openpyxl是用于读取/写入Excel2010xlsx/xlsm文件的Python库,也就是说openpyxl这个Python库不支持xls文件的读取和操作,如果在工作中遇到xls文件我们就不能......
  • python字典推导式生成法用法
    prices={"aaa":166,"bbb":56,"cdfsa":133,"fs":22,"Sy":233.34}#生成式(推导式)的用法#用股票价格大于100元的股票构造一个新的字典prices......
  • uni-app 打包H5时,访问index.html页面白屏报错net::ERR_ABORTED 404
    uni-app打包H5后,访问index.html页面,页面却是白屏,Console控制台报错404,报错图如下:    原因:  解决方法:  配置文件manifest.json文件中H5配置里面,一开始......
  • 【Azure 应用服务】Azure Function Python函数中,如何获取Event Hub Trigger的消息Even
    问题描述在通过AzureFunction消费EventHub中的消息时,我们从Function的 TriggerDetails日志中,可以获得当前Funciton中处理的消息是哪一个分区(PartitionID),偏移量O......
  • python
    垃圾回收机制1.引用计数:内存中的数据如果没有任何的变量名与其有绑定关系,那么会被自动回收2.标记清除:当内存快要被某个应用程序占满时会自动触发,停止程序的运行,检......