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

导读:本篇文章讲解 python 数据图片保存至现存excel的指定sheet内不覆盖原有数据,原来图片不丢失,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

背景:

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

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

​​​​​​​环境:

python3.7,

 xlsing==0.28.0, 

pandas==1.3.5,

matplotlib==3.5.3
 

原test.xlsx:

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

源码:

# -*- 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的所有数据与图片都没有丢失。

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

代码量少,快,Good!!!

比花了好几天的时间找:

xlwt ,xlsxwriter,openpyxl.drawing.image ,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101573.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!