周报数据采集之生存图片(execl方法)
https://blog.csdn.net/Luzaofa/article/details/81675364
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') # 获取Sheet1
score = [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') # 获取Sheet1
score = [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
new_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()
作者:Luzaofa
来源:CSDN
原文:https://blog.csdn.net/Luzaofa/article/details/81675364
周报数据采集之生存图片(execl方法)的更多相关文章
- android图片处理方法
Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...
- 在Altium_Designer_PCB_中插入图片的方法
详细请看PDF: http://files.cnblogs.com/files/BinB-W/在Altium_Designer_PCB_中插入图片的方法.pdf 配套文件: http://files. ...
- 关于Unity3D中Resources动态加载NGUI图片的方法
在NGUI中有些图片我需要动态进行变更或者加载,怎么办? 首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~ NGUI加载图片的方法 ...
- 图片放大方法、、菜单栏的位置随滚轮移动固定方法、、<a></a>去外层虚线方法:a:focus { outline:none; -moz-outline:none;};
图片放大方法一: <style type="text/css">.xt{ width:230px; height:230px;}.tp{ width:230px; he ...
- Android图片压缩方法总结
本文总结Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 第一:质量压缩方法: ? 1 2 3 ...
- android图片压缩方法
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- android图片处理方法(不断收集中)
//压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArr ...
- Android 图片处理方法
//压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArr ...
- android图片处理方法(转)
//压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArr ...
随机推荐
- java中的编译时常量与运行时常量
常量是程序运行期间恒定不变的量,许多程序设计语言都有某种方式,向编译器告知一块数据是恒定不变的,例如C++中的const和Java中的final. 根据编译器的不同行为,常量又分为编译时常量和运行时常 ...
- python学习Day13 函数的嵌套定义、global、nonlocal关键字、闭包及闭包的运用场景、装饰器
复习 1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => fn的返回值 ...
- keil的自动补全功能
设置完之后,在.c文件上试一下,发现还是不能自动补全. 后来去各种贴吧里找到了答案,是我的.c文件还没有保存到工程文件中去,所以不能实现这个功能.
- 窗体背景和png
窗体背景不要使用png格式图片,当窗体组件透明时,png会带来无穷的麻烦. 能不用png就不要用,截取图像也不要用Format32bppPArgb,特殊情况除外 Bitmap bkbmp = (Ima ...
- 源码安装支持ffmpeg的opencv2
1.首先安装ffmpeg apt-get install ffmpeg 2.安装opencv对ffmeg的依赖 # for Compiling OpenCV with ffmpeg support ...
- java数据结构分析
java数据结构分析 此文章内容参考于:http://www.cnblogs.com/ysocean/ 一.数据结构总览图 1.数组 2.链表 3.栈 4.队列 5.二叉树 6.堆 7.散列 8.红黑 ...
- Ubuntu ROS
设置你的sources.list 将电脑设置为接受来自packages.ros.org的软件 sudo sh -c 'echo "deb http://packages.ros.org/ro ...
- 2018-2019-2 20165315《网络攻防技术》Exp6 信息搜集与漏洞扫描
2018-2019-2 20165315<网络攻防技术>Exp6 信息搜集与漏洞扫描 目录 一.实验内容 二.实验步骤 1.各种搜索技巧的应用 2.DNS IP注册信息的查询 3.基本的扫 ...
- Java多线程02(线程安全、线程同步、等待唤醒机制)
Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...
- why?
优点 充分利用多核CPU的计算能力: 方便进行业务拆分,提升应用性能 缺点 上下文切换 注意线程安全,避免死锁