python 数据图片保存至现存excel的指定sheet内不覆盖原有数据,原来图片不丢失

背景:

项目上自动根据csv文件数据,生成plot图上,并自动插入到已经有Excel文件里, 里面的数据源不能有丢失。格式也尽量不能丢失。

目前,找到最好用 xlswing 这个库

​​​​​​​环境:

python3.7,

 xlsing==0.28.0, 

pandas==1.3.5,

matplotlib==3.5.3
 

原test.xlsx:

 

源码:

# -*- coding:utf-8 -*-
# @Time    : 2022/10/12 16:22
# @Author  : Lani
# @File    : plot2wing.py

import matplotlib.pyplot as plt
import xlwings as xw

"""
在已有的xlsx,插入新的图片,原xlsx的所有数据(包括图片都不会丢失)
"""
plt.rcParams["font.family"] = ['SimHei']  # 解决中文乱码 simhei为本机字体
labels = ['普攻', '技能']
labels2 = ['普攻', '技能']
X = ["player1.总输出 - 技能总伤害", "技能总伤害"]
X = [4, 9]
X2 = ["player1.总输出 - 技能总伤害1", "技能总伤害1"]
X2 = [7, 10]

fig = plt.figure()
plt1 = plt.subplot(2, 2, 1)
plt1.pie(X, labels=labels, autopct='%1.2f%%')  # 画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt1.set_title("输出占比")
plt2 = plt.subplot(2, 2, 2)
plt2.pie(X2, labels=labels2, autopct='%1.2f%%')  # 画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt2.set_title("技能输出对比")
xList = [1, 4, 8, 90]
yList = [1, 4, 8, 90]
plt3 = plt.subplot(2, 1, 2)
plt3.plot(xList, yList)
plt3.set_title("输出波动")

# plt.show()

app = xw.App(visible=False)  # 打开excel程序
wbs = app.books.open("test.xlsx")  # 打开表格
sheet_skill = wbs.sheets("Sheet1")  # 选择表格
sheet_skill.pictures.add(fig, left=sheet_skill.range("A7").left, top=sheet_skill.range("A7").top)  # 在A27单元格插入
wbs.save()  # 保存文件  ps:执行这一步需要保证此文件无其他程序在打开使用,否则保存无效
wbs.close()  # 关闭文件
app.quit()  # 退出程序

运行代码,效果:

重新插入新的图片,原excel的所有数据与图片都没有丢失。

代码量少,快,Good!!!

比花了好几天的时间找:

xlwt ,xlsxwriter,openpyxl.drawing.image ,

还有什么原xlsx转成zip再复制图片出来,再添加回去,没用

或者plot转成ByteIO再插入Excel这些库,强多了多。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值