首页 > 其他分享 >接口自动化之excel读写封装

接口自动化之excel读写封装

时间:2023-12-20 15:25:20浏览次数:27  
标签:封装 title 读写 excel value cell ._ sheet self

本次封装基于openpyxl进行的二次封装

安装openpyxl

pip install openpyxl

封装ExcelReader

采用yield的方式返回数据,减少内存的占用

class ExcelReader:

    def __init__(self, filename):
        self._excel: Workbook = load_workbook(filename, read_only=True)

    def read(self, sheet=None):
        if not sheet:
            sheet = self._excel.active
        else:
            sheet = self._excel[sheet]
        rows = sheet.rows
        title = [str(cell.value) for cell in next(rows)]
        for row in rows:
            yield dict(zip(title, (cell.value for cell in row)))

封装ExcelWriter

class ExcelWriter:
    def __init__(self, filename):
        self._file = filename
        self._excel = Workbook(write_only=True)
        self._title_writer_flag = False
        self._value_order = []
        self._title_width = []
        self._title_font = Font(name='等线', size=12, bold=True)
        self._title_fill = PatternFill('solid', fgColor='95b3d7')
        self._font = Font(name='等线', size=12)

    def _get_title_cell(self, sheet, value):
        cell = WriteOnlyCell(sheet, value=value)
        cell.font = self._title_font
        cell.fill = self._title_fill
        return cell

    def _write_title(self, sheet, title):
        self._value_order = title  # 定义列顺序
        sheet.append((self._get_title_cell(sheet, t) for t in self._value_order))
        self._title_writer_flag = True

    def _get_cell(self, sheet, value):
        cell = WriteOnlyCell(sheet, value=value)
        cell.font = self._font
        return cell

    def _write_row(self, sheet, row):
        sheet.append((self._get_cell(sheet, val) for val in row))

    @staticmethod
    def _set_column_width(sheet, title):
        for i, t in enumerate(title, start=1):
            column_title = get_column_letter(i)
            width = 10  # 定义每一列的宽度,此处可以按照数据来设置列宽
            sheet.column_dimensions[column_title].width = width

    def write(self, sheet_name: str, data, title: Iterable[str] | None = None):
        sheet = self._excel.create_sheet(sheet_name)
        if title:
            self._write_title(sheet, title)
            self._set_column_width(sheet, title)
        for row in data:
            if isinstance(row, dict):
                if not self._title_writer_flag:
                    self._write_title(sheet, row.keys())
                row_value = (row.get(key) for key in self._value_order)
            else:
                row_value = row
            sheet.append((self._get_cell(sheet, val) for val in row_value))
        return sheet

    def save(self):
        self._excel.save(self._file)

标签:封装,title,读写,excel,value,cell,._,sheet,self
From: https://www.cnblogs.com/liulangjuanzhou/p/17916573.html

相关文章

  • go的封装、继承与多态的使用
    目录一、封装1.1公有封装1.2私有封装1.2.1工厂函数解析1.2.2&与*指针使用描述1.3深度封装二、继承与多态2.1继承与多态案例2.1.1继承代码分析2.1.2结构体实例化2.1.3多态代码分析一、封装​ 在Go语言中,封装是一种将数据和操作数据的方法组织在一起的概念。封装的目的......
  • 接口自动化之响应数据封装
    在使用requests实现接口自动化时,接口响应的数据没有代码提示,要获取某个接口字段就需要通过[xxx]的方式来获取,实际开发过程中希望能通过.的方式来获取到某个接口响应属性。方式一、使用dataclassdataclass是python3.7新推出的特性之一fromdataclassesimportdataclass@......
  • Java学习之apache poi操作Excel文件
    创建Java项目,然后加入Maven依赖如下:读取指定的Excel文件写入既存的Excel文件 创建新的Excel,添加文件内容......
  • 如何解决excel导入大文件报错
    开发过程中我们经常会遇到Excel导入大文件报错的问题,经过不断的摸索,我发现我们可以利用缓存区来实现大文件的上传,下面是我本人封装的一个实现工具,有兴趣的小伙伴可以看看,希望能对大家有所帮助!publicclassExcelImportBigDataUtil{/***每次放入缓冲区最大行数......
  • Redis 主从集群搭建并使用 RedisTemplate 实现读写分离
    单机版的Redis能够承载并发访问的能力有限,对于绝大多数的系统而言,都是读多写少,系统之所以宕机,一般都是因为并发读操作太高导致的宕机,因此搭建Redis主从集群,实现读写分离,是一种有效的提高并发访问能力的方案。本篇博客介绍在一台虚拟机上,使用docker-compose模拟搭建一个【一......
  • 网页在线编辑Excel表格,调用本机Office,非模拟,插入图片,导出PDF全屏编辑
    Excel作为微软Office的重要组成部分,在各行业中应用非常广泛,随着互联网及云计算的普及,网页在线编辑Excel表格也越来越成文更多人的广泛需求,而在网页中却无法直接在线编辑微软Office,下面介绍一种Web网页在线编辑Excel表格方案,可以调用本机原生Offce软件,直接在网页上编辑Excel表格。......
  • 前端json转excel 到zip下载
    问题描述:后端返回数据原先返回是多个json文件的压缩包二进制文件流,前端直接下载二进制文件流。但是客户要求下载excel类型文件。解决方案:前端拿到表格的json数据转换成对应table的html字符串,使用插件js-xlsx。给个链接,import*asXLSXfrom'xlsx'//JSONData为导出的json数......
  • ABAP存取Excel的技术思考
    ABAP存取Excel有OLE,DOI,XML好几种技术啊,试了好多次,发现前两者总是出很多bug,决心以后只用基于OpenXML技术的API和函数了。类CL_FDT_XL_SPREADSHEET基于XML技术实现,示例代码如下;当然,SAP官方是不推荐单独使用这个类的,只限制用于BRF+相关功能,但是目前俺没遇到大问题;比较推荐的ABAP......
  • 已删除但未消失的图片(Excel与WPS切换时产生的问题)
    问题:一个完全空的工作簿为何会非常大?问题分析:将工作簿后缀名改成rar,打开..xl/media,可以看到有很多图片,这些图片造成了文件大。进一步的问题:这些图片哪里来的,藏在何处。过程:这是Excel与WPS操作同一工作簿产生的问题。第一步:使用WPS打开工作簿,在其中插入嵌入到单元格的图片第二步:保存......
  • C# 读写 Excel 四种方案(OpenXml、NPOI、EPPlus、Spire.Office)
    C#读写Excel四种方案(OpenXml、NPOI、EPPlus、Spire.Office)翔星有10年+工作经验,高级软件工程师,可以解决各种问题​关注 你经常看TA的内容前言在项目中需要使用C#读写Excel,每天定时将数据输出到Excel表格中。在参考了很多的方案后,找到了4......