Python之Excel图片处理(将excel chart另存为图片)
Python之Excel chart另存为图片
大家好,好久没有更新博客了,这一段时间有点忙,公司接触到了大量的excel文件处理,现将自己在工作中积累的经验分享大家,供大家参考学习。
业务说明:这段时间我主要做的工作有:
- 解析excel,将目标字段写入数据库(涉及加密、html转excel文件);
- 数据库获取数据,写入excel,绘制图片,将图片另存为;
- 将生成的图片和计算出的其他数据字段填补到word模板,形成报告文档;
需求一:解析excel,将目标字段写入数据库(涉及加密、html转excel文件)大家可以参考我以前的博客,里面有详细的说明介绍
接下来我将主要为大家介绍业务需求二,如何将数据写入excel,然后复制图片,将图片另存为;因为实际业务需求,找了好多资料博客,最终才算找到了一个好的解决办法,相信学习中的你也可能会遇到我这样的问题,当你遇到问题时,希望我的小分享对你有所帮助。
逻辑实现过程:
第一步:(新建一个data.xlsx文件,插入图片,作为我们的模板文件,数据字段如图)
第二步:将B2到B8单元格数据更改为【20,30,20,30,40,50,35】,可根据自己需求随意更改。
第三步:将D1:I12区域复制为图片,将图片移动到K1,效果如下:
第四步:图片直接另存为
第五步:将文件另存为copy.xlsx,文件夹数据
完整代码:(第一版)
import win32com.client as win32 # 打开excel文件
from PIL import ImageGrab #用于获取复制的图片root_path = "XXX"excel = win32.Dispatch('Excel.Application') #获取Excel
wb = excel.Workbooks.Open(root_path+'data.xlsx') # 打开excel文件
ws = wb.Worksheets('Sheet1') # 获取Sheet1score = [20,30,20,30,40,50,35] # 需要写入excel的成绩数据
# 遍历excel将数据写入单元格
for i in range(2, len(score)+2):Range = 'B' + str(i) # B2到B8单元格ws.Range(Range).Value = score[i-2] # 写入值
ws.Range('D1:I12').CopyPicture() # 复制D1:I12图片区域
ws.Paste(ws.Range('K1')) # 将图片移动到K1
ws.Shapes('Picture 1').Copy() # 复制移动的图片Picture 1
img = ImageGrab.grabclipboard() # 获取图片数据
img.save(root_path+'Picture 1.png') # 图片另存为wb.SaveAs(root_path+'copy.xlsx') # excel文件另存为copy.xlsx
wb.Close()
特别说明:代码运行到ws.Shapes(‘Picture 1’).Copy()时可能会报未找到定义的图片错误,我一开始想着通过方法函数更改我们复制后的图片名称,然后再复制图片,但经过一番挣扎没有找到合适的方法,若有大神知道,留言告知,感激不尽。
但最终有一个解决窍门仅供参考,我们先注释掉如下几句代码
ws.Shapes('Picture 1').Copy() # 复制移动的图片Picture 1
img = ImageGrab.grabclipboard() # 获取图片数据
img.save(root_path+'Picture 1.png') # 图片另存为
接下来运行代码,运行成功后将会成功生成一个copy.xlsx文件,我们双击打开文件,鼠标点击我们复制成功的图片,左上角将会显示我们生成图片的名称即:Picture 1;名称不同的版本可能会不一样,所以在遇到错误时,可以根据此过程操作,更改图片名称即可。
完整代码:(终极版)
完善复制图片bug,只需将我们选中的区域重命名即可(感谢@vhills分享)
import win32com.client as win32 # 打开excel文件
from PIL import ImageGrab #用于获取复制的图片root_path = "D:\\Luzaofa_Class\\"excel = win32.Dispatch('Excel.Application') #获取Excel
wb = excel.Workbooks.Open(root_path+'data.xlsx') # 打开excel文件
ws = wb.Worksheets('Sheet1') # 获取Sheet1score = [20,30,20,30,40,50,35] # 需要写入excel的成绩数据
# 遍历excel将数据写入单元格
for i in range(2, len(score)+2):Range = 'B' + str(i) # B2到B8单元格ws.Range(Range).Value = score[i-2] # 写入值
ws.Range('D1:I12').CopyPicture() # 复制D1:I12图片区域
ws.Paste(ws.Range('K1')) # 将图片移动到K1new_shape_name = 'luzaofa'
***excel.Selection.ShapeRange.Name = new_shape_name*** # 选择区域重命名ws.Shapes(new_shape_name).Copy() # 复制移动的图片Picture 1
img = ImageGrab.grabclipboard() # 获取图片数据
img.save(root_path + new_shape_name + '.png') # 图片另存为wb.SaveAs(root_path + 'copy.xlsx') # excel文件另存为copy.xlsx
wb.Close()
感谢大家,后期我有时间再与大家分享Python操作Word模板文件形成报告文档,学习积累,与君共勉。
Python之Excel图片处理(将excel chart另存为图片)相关推荐
- python 读取图片颜色值生成excel像素画
像素画: 需要用到的包: 进度条:progressbar pip install progressbar -i http://mirrors.aliyun.com/pypi/simple/ --tru ...
- pythonmat文件转excel,利用python将图片转换成excel文档格式
前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...
- 使用python实现EXCEL内容批量生成图片和批量拼接图片并按照指定目录存放
一.背景介绍 1.1 任务概况 工作中遇到一个任务,要求如下: 1.批量制作900多个图片,每张图片内容不一样,不同的部分由EXCEL的内容决定: 2.图片制作完成后,需要按照EXCEL制定的名称命名 ...
- Python实现的解压缩软件及excel转图片工具源代码,基于pyqt5
Python实现的解压缩软件源码及excel转图片工具源代码,基于pyqt5 1.GUI.py和GUI.ui:绘制界面相关 2. UnRAR64.dll和compress.py:压缩解压相关 3. e ...
- pythonmat文件转excel_利用python将图片转换成excel文档格式详解
本文主要介绍了关于利用python将图片转换成excel文档的相关内容,编写了一小段Python代码,将图片转为了Excel,纯属娱乐,下面这篇文章主要给大家介绍了关于利用python将图片转换成ex ...
- python读取图片文字为表格_利用python将图片转换成excel文档格式
前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...
- python将excel转换成图片格式_利用python将图片转换成excel文档格式
前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...
- python日常实用技能:利用python将图片转换成excel文档格式
@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详 ...
- Python将图片插入到Excel中
效果图: 安装:命令:pip install XlsxWriter (或者 easy_install XlsxWriter) 在下载的过程中慢的话,可以尝试其中一个,速度会比单纯的pip快10倍不止. ...
最新文章
- javascript中new Date浏览器兼容性处理
- thinkphp概述
- git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区
- jmeter吞吐量_深入理解Jmeter常用定时器
- stream of java_Java 8 新特性-Stream更优雅的处理集合入门
- 真正的免费云时代来临,免费1T全能空间
- 服务器驱动硬盘故障修复,如何修复崩溃的硬盘驱动器
- echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题
- 字符串转utf8编码
- AutoCAD .NET 二次开发实例:批量文本查找替换
- Java网课基础笔记(7)19-07-19
- moment.js多语言列表
- axios请求拦截器 和 响应拦截器
- 前端--HTML入门
- java模拟而一个电话本操作
- 【Verifying transaction: failed】
- java中什么是声明抽象_java中什么是抽象类?抽象类的声明
- Mysql主从配置,亲手搭建,保证可用!
- mysql show 命令详解_MYSQL show 命令详解
- 第三天(Qos网络服务质量)
热门文章
- java ext.dirs_关于-Djava.ext.dirs使用问题
- 余世维 - 老板首先要诚实
- 移动设备管理软件优劣,南京烽火星空来判别
- VsCode中运行HTML页面时出现乱码
- Word如何取消打印前自动更新域
- Jsp的四种作用域范围
- 使用QT实现Mjpeg-streamer的客户端,采用单独的线程进行视频图片的获取
- 调试多线程 查死锁的bug gcore命令 gdb对多线程的调试 gcore pstack 调试常用命令...
- 从金融IT公司工作10年后转到银行的工作体会
- 均值不等式中考_数学不等式解题技巧