如何用Python读取Excel中的图片?然后写入图片?

论坛 期权论坛     
选择匿名的用户   2021-5-24 04:09   268   0
<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 &#61; r&#39;D:&#39;
count &#61; 1
for file in os.listdir(path):
    new_file &#61; file.replace(&#34;.xlsx&#34;,&#34;.zip&#34;)
    os.rename(os.path.join(path,file),os.path.join(path,new_file))
    count&#43;&#61;1
print(&#39;总共有&#39;&#43;str(count)&#43;&#39;个文件夹&#39;)
number &#61; 0
craterDir &#61; &#34;D:/&#34;  # 存放zip文件的文件夹路径
saveDir &#61; &#34;D:/&#34;  # 存放图片的路径
list_dir &#61; os.listdir(craterDir)
for i in range(len(list_dir)):
    if &#39;zip&#39; not in list_dir[i]:
        list_dir[i] &#61; &#39;&#39;
while &#39;&#39; in list_dir:
    list_dir.remove(&#39;&#39;)   
for zip_name in list_dir:
    print(zip_name)
    azip &#61; zipfile.ZipFile(craterDir &#43; zip_name)
    namelist &#61; (azip.namelist())

    for idx in range(0,len(namelist)):
        if namelist[idx][:9] &#61;&#61; &#39;xl/media/&#39;:#图片是在这个路径下
            img_name &#61; saveDir &#43; str(number)&#43;&#39;.jpg&#39;
            f &#61; azip.open(namelist[idx])
            img &#61; Image.open(f)
            img &#61; img.convert(&#34;RGB&#34;)
            img.save(img_name,&#34;JPEG&#34;)
            number &#43;&#61; 1
azip.close()  #关闭文件,必须有,释放内存
</code></pre>
<p>效果展现如下:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP