python导出excel中所有图片(写入excel数据)

利用python3.7导出excel图片的教程网上很多都是搞解压那套,而且基本是复制的一模一样的教程,本例给出的图片导出源码转载自csdn。

from PIL import ImageGrab
import win32com.client as win32

# 能把所有图片按原图象素导出来
excel = win32.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(r'C:\\Users\\admin\\Desktop\\picexcel.xlsx')

for sheet in workbook.Worksheets:
    for i, shape in enumerate(sheet.Shapes):
        if shape.Name.startswith('Picture'):
            shape.Copy()
            image = ImageGrab.grabclipboard()
            image.save('{}.jpg'.format(i+1), 'jpeg')
excel.Quit()

这是网上能找的最简单的使用python导出excel图片的教程了。下面介绍的另外一种方法,严格意义上来讲不是图片导出,而是将excel单元格直接复制为图片导出来,但是测试的时候只有在一张图的时候能成功,如果图片过多会导致从excel里面复制出的图片一模一样,尚未找到解决办法。

import win32com.client as win32 # 打开excel文件
#pip install pypiwin32
#
from PIL import ImageGrab   #用于获取复制的图片

root_path = "C:\\Users\\ranjuan\\Desktop\\"
excel = win32.Dispatch('Excel.Application') #获取Excel
#excel.Visible = True
wb = excel.Workbooks.Open(root_path+'商品示例.xlsx') # 打开excel文件
ws = wb.Worksheets('Sheet1')        # 获取Sheet1

score = [100,90,50,10,20,310,278,155,120,140,70,110,345,444]      # 需要写入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('B1:K16').CopyPicture()    #将excel单元格B1:K16范围复制为图片
ws.Paste(ws.Range('M1'))    # 将从excel选区复制的图片移动到M1
new_shape_name = 'ranjuan'

#***excel.Selection.ShapeRange.Name = new_shape_name***    # 选择区域重命名
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()

新建excel需要填入初始数据,然后生成excel图表,之后才能使用python进行操作(将数据写入excel,柱状图发生变化,然后将指定的excel单元格区域复制为图片,并将图片进行保存),且此python程序依赖于电脑已安装excel软件, excel表格内容如下:

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/python-excel-savepic/

赞赏

微信赞赏支付宝赞赏

发表评论