openpyxl使用总结

设置表头单元格的颜色

fill = PatternFill("solid", fgColor='FF000000')
font = Font(color='00FFFFFF')
for index, v in enumerate(header):
  d = self.ws.cell(row=1, column=index + 1)
  d.value = v
  d.fill = fill
  d.font = font

设置表头单元格的长度

self.ws.column_dimensions[row[0]].width = row[1]

单元格保存图片

获取图片
img = Image(image_path)
设置图片宽高
img.width, img.height = 100, 100
保存图片
self.ws.add_image(img, f'F{index_row + 2}')
设置图片单元格高度;宽度由header设置
self.ws.row_dimensions[index_row + 2].height = 100

封装的脚本代码

from openpyxl.styles import PatternFill, Font
from openpyxl.drawing.image import Image
from openpyxl import Workbook
from typing import List
import os

from core.config import settings

class Excel:
    def __init__(self, excel_name):
        self.excel_name: str = excel_name
        self.excel_path: str = f'{settings.TEMP_FILE}/{self.excel_name}'
        self.wb = Workbook()
        self.ws = self.wb.active

    def write_header(self, header: List[str], column_width: List[list]):
"""
        headers: 表头内容
        column_dimensions:表头的间隔
"""
        # 设置表头样式:黑色填充,白色字体
        fill = PatternFill("solid", fgColor='FF000000')
        font = Font(color='00FFFFFF')
        for index, v in enumerate(header):
            d = self.ws.cell(row=1, column=index + 1)
            d.value = v
            d.fill = fill
            d.font = font

        # 设置列间隔
        for row in column_width:
            self.ws.column_dimensions[row[0]].width = row[1]

    def write_body(self, rows: List[dict]):
"""
        rows: [[1,2,3],[1,2,3]]
"""
        for index_row, row in enumerate(rows):
            index = 1
            for v in row.values():
                self.ws.cell(row=index_row + 2, column=index).value = v
                index += 1

        return self.__save()

    def write_body_with_image(self, rows: List[dict]):
"""
        rows: [[1,2,3],[1,2,3]],
"""
        for index_row, row in enumerate(rows):
            index = 1
            for v in row.values():
                if index == 6:
                    # 单元格保存图片用add_image
                    image_path = f'{settings.BASE_PATH}/{v}'
                    img = Image(image_path)
                    # 设置宽高
                    img.width, img.height = 100, 100
                    self.ws.add_image(img, f'F{index_row + 2}')
                    # 设置图片单元格高度;宽度由header设置
                    self.ws.row_dimensions[index_row + 2].height = 100
                else:
                    self.ws.cell(row=index_row + 2, column=index).value = v
                index += 1

        return self.__save()

    def __save(self):
        try:
            self.wb.save(self.excel_path)
            return True
        except Exception as e:
            print(f'[保存Excel报错] {e}')
            return False

    # def __del__(self):
    #     os.remove(self.excel_name)

Hole yor life get everything if you never give up.

Original: https://www.cnblogs.com/1fengchen1/p/16079830.html
Author: SonnyZhang
Title: openpyxl使用总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590867/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL日期时间函数一网打尽

    获取时间 函数 功能 返回格式 CURDATE(), CURRENT_DATE() 返回当前日期,只包含年、月、日 2022-03-08 CURTIME(), CURRENT_TI…

    数据库 2023年6月9日
    071
  • 组管理和权限管理

    组管理和权限管理 在 linux 中的每个用户必须属于一个组,不能独立于组外。在 linux 中每个文件有所有者、所在组、其它组的概念。 文件所有者,谁创建了这个文件就是这个文件的…

    数据库 2023年6月16日
    0219
  • 2022-8-29 javaweb 第一天 servlet/tomcat

    软件架构 1、C/S架构:客户端 / 服务器——–QQ,Typora,腾讯会议。 2、B/S架构:浏览器 / 服务器——…

    数据库 2023年6月14日
    084
  • 浅谈GTID及简单测试

    今天简单介绍一下GTID,并有部分相关实验。 GTID相信大家都不陌生,GTID的英文全称为Global Transaction Identifier,在MySQL主从架构中应用广…

    数据库 2023年6月16日
    070
  • InnoDB 中不同SQL语句设置的锁

    锁定读、UPDATE 或 DELETE 通常会给在SQL语句处理过程扫描到的每个索引记录上设置记录锁。语句中是否存在排除该行的WHERE条件并不重要。InnoDB不记得确切的WHE…

    数据库 2023年5月24日
    079
  • 读取Excel示例

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/EasyData/archive/2011/01/26/…

    数据库 2023年6月11日
    054
  • DDD(Domain Driver Design)领域驱动模型

    Domain Primitive(DP) DP概念DP 是 DDD 中的一个基础概念,是 DDD 中可以执行的一个最小单元,最直接的体现是,将业务相关的参数定义在一个特定的领域中(…

    数据库 2023年6月6日
    0123
  • 计算机操作系统(慕课版)思维导图

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    098
  • jdbc-处理查询结果集

    package com.cqust; import java.sql.Connection;import java.sql.DriverManager;import java.sq…

    数据库 2023年5月24日
    073
  • Nginx进阶篇—web模块及proxy代理

    server { #在server{下面输入 sub_filter n…

    数据库 2023年6月14日
    0107
  • RadonDB MySQL on K8s 2.1.2 发布!

    RadonDB MySQL on Kubernetes 于 2 月 17 日发布了新版本 2.1.2 。该版本在节点的重建、增删等方面进行了全面升级。致谢: 首先感谢 @andyl…

    数据库 2023年5月24日
    077
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    094
  • pytest中pytest_cache文件夹作用

    跑自动化时经常会出现这样一个情况,一轮自动化跑完后零星出现了几个失败case,无法断定失败的原因,所以需要重新跑一下失败的case去debug,那我们要做的是就去修改脚本把那几个c…

    数据库 2023年6月11日
    058
  • 总结:弹性伸缩的五个条件与六个教训

    前言弹性伸缩是云计算时代给我们带来的一项核心技术红利,但是 IT 的世界中,没有一个系统功能可以不假思索的应用到所有的场景中。这篇文章,我们将应用企业级分布式应用服务-EDAS 的…

    数据库 2023年6月15日
    0125
  • python实现Mysql数据库批量新增数据

    一、批量插入数据的场景 二、插入数据的工具选择 三、选择Python进行批量插入 Python实现批量插入Mysql数据库数据 一、批量插入数据的场景 在进行数据压力时需要进行大数…

    数据库 2023年6月6日
    0104
  • ArrayLIst在指定位置插入的内部实现

    今天看到一个问题:ArrayList的add方法有两种使用,那么add到指定位置内部是怎么实现的? 发现自己对这块地方不熟悉,所以立马去看了ArrayList下的源码 // 第一个…

    数据库 2023年6月9日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球