【python3】【OpenPyXL】【向excel插入图片】【精确指定图片位置】

Background

今天在使用python向excel中插入图片中,插入到哪个单元格,图片的边框就会覆盖单元格的边框,于是想着能不能稍微偏移一点,经过一番查找,最终在Stack Overflow上找到了,上面有偏移位置的计算方法,但我没看太懂,也嫌麻烦,偏移量以万为单位进行微调也比较简单使用,再者我这也不需要那么精确哈。

1、先看下效果哈

在这里插入图片描述

2、安装OpenPyXL

有兴趣的可以研究下OpenPyXL官方文档

pip install openpyxl

3、源码

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.drawing.spreadsheet_drawing import AnchorMarker, OneCellAnchor
from openpyxl.drawing.xdr import XDRPositiveSize2D
from openpyxl.utils.units import pixels_to_EMU


def offset_img(img):
    """精确设置图片位置,偏移量以万为单位进行微调吧,具体计算公式太麻烦了
    row column 的索引都是从0开始的,我这里要把图片插入到单元格B10
    """
    p2e = pixels_to_EMU
    h, w = img.height, img.width
    size = XDRPositiveSize2D(p2e(w), p2e(h))
    marker = AnchorMarker(col=1, colOff=60000, row=9, rowOff=0)
    img.anchor = OneCellAnchor(_from=marker, ext=size)


def save_to_excel(file, fig):
    """把图片插入到excel文件中的指定位置
    插入到指定单元格然后向右偏移一点距离,目的是不让图片的边框和单元格的边框重合
    :param file: excel文件
    :param fig: 图片
    :return:
    """
    # 获取模板 excel 的操作对象
    wb = load_workbook(filename=file)
    # 根据 Sheet1 这个名字来获取 Sheet1
    sheet1 = wb['应力应变']
    # sheet1 = wb[subject]
    img = Image(fig)
    # 设置图片的宽和高
    cnt = 81
    img.width, img.height = (12.7 * cnt, 4.7 * cnt)
    offset_img(img)
    # 将图片添加到excel中
    sheet1.add_image(img)
    wb.save(file)


if __name__ == '__main__':
    src_file = 'D:/test/project-reportDate日报表.xlsx'
    src_img = 'D:/test/img.png'
    save_to_excel(src_file, src_img)

感叹

之前做图表的时候没发现OpenPyXL也可以做各种图表呢,看样子也挺简单的,上面的图我是用matplotlib模块画的,要复杂一点,以后有机会研究下这个。

在这里插入图片描述

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值