<p>大家好,在使用Python进行<strong>办公自动化</strong>操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析。</p>
<p>那么你知道如何<strong>使用Python读取Excel中的图片</strong>?又如何<strong>使用Python直接往Excel中写入图片</strong>?甚至使用Python制作一个Excel可视化大屏?</p>
<p>因为图片的存储格式与数字数据格式不一样,所以实现起来稍显复杂,本文就将对以下两个部分进行深入讲解:</p>
<ul><li><strong>Python读取Excel图片</strong></li><li><strong>Python写入Excel图片</strong></li></ul>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-786f56149a70f4a2e58e211918c575f8.png"></p>
<p>涉及的Python模块有以下几个</p>
<ul><li>PIL</li><li>win32</li><li>os</li><li>zipfile</li><li>numpy</li><li>xlsxwriter</li></ul>
<p><strong> 一、准备</strong></p>
<p>由于此次包比较多,我们需要在命令行中使用pip进行安装</p>
<pre class="blockcode"><code class="language-python">pip install pillow #这是对模块PTL的安装
pip install pypiwin32 #这是对win32的安装
pip install os
pip install zipfile
pip install numpy
pip install xlsxwriter</code></pre>
<p>在下载的过程中,有些包是比较大的,会出现超时time out的报错现象。这里介绍几个国内的<strong>镜像</strong>,大家可以尝试其中一个,速度会比单纯的pip快10倍不止。地址如下:</p>
<pre class="blockcode"><code class="language-python">http://pypi.douban.com/simple/ 豆瓣
http://mirrors.aliyun.com/pypi/simple/ 阿里
http://pypi.hustunique.com/simple/ 华中理工大学
http://pypi.sdutlinux.org/simple/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
https://pypi.tuna.tsinghua.edu.cn/simple 清华</code></pre>
<p>代码如下:</p>
<pre class="blockcode"><code class="language-python">pip install 模块名 -i 网址</code></pre>
<p>以<strong>清华镜像</strong>举例</p>
<pre class="blockcode"><code class="language-python">pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple</code></pre>
<p>注意:如果是原生态的cmd窗口安装的,会提示加个--user命令,读者按照指示即可。</p>
<p><strong> 二、Python读取Excel图片</strong></p>
<p>上面说过,Python读取Excel图片有<strong>两种方法</strong>。</p>
<blockquote>
<p>“</p>
<p><strong>第一种</strong>:将xlsx后缀名改为zip形式,即进行压缩。而后读取里面存储图片的文件,将里面的图片取出来。</p>
<p><strong>第二种</strong>:用提取到粘贴板中的方法将图片保存到JPG、PNG等格式中</p>
<p>”</p>
</blockquote>
<p>两种方法各有缺点和优点,<strong>第一种方法缺点是代码量比较长,优点是万能</strong>,Excel的所有格式都可以运用。</p>
<p><strong>第二种的优点是代码量少,缺点是对于一些xlsx的文件运用不了</strong>。</p>
<p>首先我们先讲解第一种方法,之后在讲解第二种方法时,大家可以进行对比!</p>
<p>讲解之前我们用的是以下的example.xlsx文件,里面有四个工作表,每个工作表都有一张数据可视化图。例如工作表3中的气泡图如下:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-43d48845efc6db742d79e3de3afffc7c.png"></p>
<p><strong>2.1 方法一</strong></p>
<p>和之前的文章一样,我们<strong>先给出全部代码与效果图</strong>之后再进行讲解</p>
<pre class="blockcode"><code class="language-python">import os
import zipfile
import os
from PIL import Image
import numpy as np
path = r'D:'
count = 1
for file in os.listdir(path):
new_file = file.replace(".xlsx",".zip")
os.rename(os.path.join(path,file),os.path.join(path,new_file))
count+=1
print('总共有'+str(count)+'个文件夹')
number = 0
craterDir = "D:/" # 存放zip文件的文件夹路径
saveDir = "D:/" # 存放图片的路径
list_dir = os.listdir(craterDir)
for i in range(len(list_dir)):
if 'zip' not in list_dir[i]:
list_dir[i] = ''
while '' in list_dir:
list_dir.remove('')
for zip_name in list_dir:
print(zip_name)
azip = zipfile.ZipFile(craterDir + zip_name)
namelist = (azip.namelist())
for idx in range(0,len(namelist)):
if namelist[idx][:9] == 'xl/media/':#图片是在这个路径下
img_name = saveDir + str(number)+'.jpg'
f = azip.open(namelist[idx])
img = Image.open(f)
img = img.convert("RGB")
img.save(img_name,"JPEG")
number += 1
azip.close() #关闭文件,必须有,释放内存
</code></pre>
<p>效果展现如下:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/ |
|