背景:
项目上自动根据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这些库,强多了多。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/101573.html