在python3.7下使用win32com库操作excel文件(需要本地安装有office阅读办公软件),将指定区域复制为图片,并批量保存下来。如果只是需要纯粹导出excel里面的图片建议使用本站另一篇文章介绍的方法:python导出excel中所有图片(写入excel数据) 另外,本片也是在该文的基础上改进而来。

在调试过程中也遇到很多的报错,建议在使用时关闭不必要的程序,如果报excel程序错误可能是excel文件被占用,建议在任务管理器里面关闭所有excel进程!如果出现图片为空建议加上sleep延时,防止剪切板操作过快取不到数据,期间遇到的报错信息已附于代码正文及文章末尾。下面上python源码(源码中夹杂了python使用pypiwin32库操作的代码,已经注释了,有需要的也可以看看):

import win32com.client as win32 # 打开excel文件

#pip install pypiwin32

##########import openpyxl #另一种操作excel的包

import time

import pythoncom,os

from PIL import ImageGrab #用于获取复制的图片

file='312(带图片).xlsx'

file_name = os.path.abspath(file) # 把相对路径转成绝对路径

#pythoncom.CoInitialize() # 开启多线程

excel = win32.Dispatch('Excel.Application') #获取Excel

#excel = DispatchEx("Excel.Application") #启动excel

excel.Visible = True #可视化

#excel.DisplayAlerts = False #是否显示警告 (保存时不会弹出窗口)

#excel.ScreenUpdating = 1 # 关闭屏幕刷新

wb2 = excel.Workbooks.Open(file_name)

ws2 = wb2.Worksheets('Sheet1') # 获取Sheet1

info = ws2.UsedRange#获取有效数据区域

nrows = info.Rows.Count #总行数

#ncols = info.Columns.Count #总列数

max_excel_row = nrows+1

#pic_shape_name = range(1000)#初始化1000个数组,后面用于copy图片Shapename用

pic_shape_name = []

for n in range(1000):

pic_shape_name.append('mypic_'+str(n))

##########wb = openpyxl.load_workbook(file_name)

##########ws = wb.active

#get_highest_row()和get_highest_column()在最新版的openpyxl模块中已经被删除了

#取而代之的是max_row和max_column两个方法

#max_excel_row = int(format(ws.max_row))+1

i =1

j = 0

for i in range(1,max_excel_row):#excel行循环

#name = str(ws.cell(i,3).value)#openpyxl模块读取excel的方式,第三列

name = ws2.Range('C'+str(i)).Value

#注意openpyxl与win32com读取excel,如果遇到空值可以用 if is not None 来判断

#或者将读取到的值强制转换为str字符,会变成字符串'None'

#price_p = str(ws.cell(i,4).value)#第四列

price_p = ws2.Range('D'+str(i)).Value

#sku_class = str(ws.cell(i,1).value)#第一列 7寸

sku_class = ws2.Range('A'+str(i)).Value

if name is not None and name != 'None' and price_p !='' and price_p !='单价' and price_p !='None':

j = j+1

#ws.Range('B2:B2').CopyPicture() # 复制D1:I17图片区域

#time.sleep(5)

#ws2.Range('B33:B33').CopyPicture()

ws2.Range('B'+str(i)+':B'+str(i)).CopyPicture()

ws2.Paste() #直接粘贴可以

#ws2.Paste(ws2.Range('K'+str(i))) # 将图片移动到K列,如果移动图片后面会导致所有复制出的图片都一模一样!

pic_name0 = str(j) + '.png'

print('正在写入第('+str(i)+'/'+str(max_excel_row-1)+')个商品:'+ name +' 的图片文件:'+ pic_name0)

#TypeError: can only concatenate str (not "NoneType") to str

excel.Selection.ShapeRange.Name = pic_shape_name[j] # 选择区域重命名

#time.sleep(2)

ws2.Shapes(pic_shape_name[j]).Copy() # 复制移动的图片Picture 1

img = ImageGrab.grabclipboard() # 获取图片数据

print('正在保存图片单元格为: '+ 'B'+str(i)+':B'+str(i))

try:

#img.save(image, "JPEG")

img.save(pic_name0) # 图片另存为

except AttributeError:

print("Couldn't save image {}".format(pic_name0))

#img.save(root_path + pic_name0) # 图片另存为

#报错123 180个图片 AttributeError: 'NoneType' object has no attribute 'save'

# ws2.Shapes(pic_shape_name[j]).Copy() # 复制移动的图片Picture 1

# File "C:\Users\joolan\AppData\Local\Temp\gen_py\3.7\00020813-0000-0000-C000-000000000046x0x1x9\Shape.py", line 52, in Copy

#return self._oleobj_.InvokeTypes(551, LCID, 1, (24, 0), (),)

#pywintypes.com_error: (-2147352567, '发生意外。', (0, None, None, None, 0, -2147221040), None)

#

#pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Worksheet 的 Paste 方法无效', 'xlmain11.chm', 0, -2146827284), None)

#File "C:\Python37\lib\site-packages\win32com\client\__init__.py", line 467, in _ApplyTypes_

#self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),

#pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Range 的 CopyPicture 方法无效', 'xlmain11.chm', 0, -2146827284), None)

#pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Workbook 的 SaveAs 方法无效', 'xlmain11.chm', 0, -2146827284), None)

#time.sleep(1)

#if j > 5:

# exit()

print('写入有效商品图片个数:'+str(j))

wb2.SaveAs('copy.xlsx') # excel文件另存为copy.xlsx

wb2.Close() #关闭工作薄,不保存

excel.Quit() #退出excel

#pythoncom.CoUninitialize() # 关闭多线程

本例excel文件结构内容如下(python操作方法为将单元格区域复制为图片的方式,所以保存图片的质量取决于你excel中直观看到的图片大小,如果只想导出图片建议使用文章开篇推荐的方法!):

下面是使用python保存excel图片中遇到的一些错误提示,如果严格按照我上面的代码运行,一般是不会有问题的,已经连续测试3次,导出200+图片没问题。

TypeError: can only concatenate str (not "NoneType") to str 执行操作过程中取到了空单元格,但是没有对值进行is not None 或 != 'None'判断

AttributeError: 'NoneType' object has no attribute 'save'

如果你想将图片保存出来(且图片超过一张)建议直接使用ws.Paste() ,而不要使用类似ws.Paste(ws.Range('K'+str(i)))这种在excel内黏贴到指定单元格的操作!否则会导致后面的excel.Selection.ShapeRange.Name选择区重命名失效,结果就是使用python复制出的excel图片除了名字,内容完全是一模一样的图片

pywintypes.com_error: (-2147352567, '发生意外。', (0, None, None, None, 0, -2147221040), None)

pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Worksheet 的 Paste 方法无效', 'xlmain11.chm', 0, -2146827284), None)

pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Range 的 CopyPicture 方法无效', 'xlmain11.chm', 0, -2146827284), None) 在使用ws.Range('xx:xx').CopyPicture()时被复制的单元格内容为空,或目标单元格颜色是纯色。遇到这种情况最好每次复制时打印出excel行,然后打开excel文件定位看一下该单元格是否存在异常。

pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Workbook 的 SaveAs 方法无效', 'xlmain11.chm', 0, -2146827284), None) 目标excel文件已存在,无法保存文件

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

本文链接:https://ranjuan.cn/python-save-excelarea-pic/

赞赏

微信赞赏支付宝赞赏

python复制excel图片_python批量导出excel区域图片相关推荐

  1. python批量处理excel数据_Python批量处理Excel,真香(超实用!)

    本文介绍了利用Python批量处理Excel文件的一种方法,超实用,超简单.轻松可实现,节省时间不只一点点.文章不长,功能超强. 上菜. 某一天,老板丢个我一个任务.需要将400多张表按照一定条件进行 ...

  2. tecplot批量导出图片_批量导出Excel图片,用这招,半分钟干的活别人一整天完不成...

    上个星期,我的一个同学向我求助.她是公司的HR,老板让她把员工信息表中的照片导出到文件夹中,然后打包发送给行政部的文员打印出来.她公司有5000多人,她复制粘贴了整整一个上午,才导出了200多张照片, ...

  3. python读取数据库导出文件_python如何导出excel表格数据库数据

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. VBA应用笔记 -- 批量导出excel工作表中的图片

    业务场景: 日常工作中,我们可能会遇到需要批量导出excel表中的图片的情况,按照网友的做法,批量导出excel中的图片主要有几种方法: 解压缩方法:可以通过将excel文件转成rar压缩文件,解压后 ...

  5. Excel表格怎么批量导出图片将文件中的图片导出到文件夹中

    这几天一直没写博文,但是为了让大山的孩子,能够像京城的富二代一样,可以开开心心公公平平地享受学习excel的权利,因此决定今天继续写,今天主要来谈谈excel图片批量导出,关于excel表格怎么批量导 ...

  6. Excel按照原图片名称批量导出工作簿中所有图片

    今天小编要和大家分享的是,Excel按照原图片名称批量导出工作簿中所有图片的操作,看下图,在不同的工作表中有不同的形状图片,如何一键导出呢 (方方格子插件) 1.先看到动图演示 2.我们可以选择方方格 ...

  7. POI批量导出Excel ZIP打包下载

    POI批量导出Excel ZIP打包下载 1.公共抽象导出Excel类 需要自己实现两个抽象方法: getColumValueForColunmName : 扩展方法:根据名称判断来做值得转换 比如: ...

  8. 使用POI批量导出Excel文件(SSM)

    文章目录 前言 如何使用POI批量导出Excel文件(SSM) 一.什么是POI? 模块 二.使用步骤 1.引入依赖 2.mapper层代码 包括Mapper接口.Mapper SQL代码 Mappe ...

  9. thinkphp thinkadmin使用phpspreadsheet批量导出excel数据

    由于PHPExcel早就停止更新维护,建议使用phpspreadsheet,本文就教你如何用PhpSpreadsheet导出excel 注:原生导出excel可以看我另一篇文章https://blog ...

  10. Java 批量导出PPT为图片,并合并生成PDF

    Java 批量导出PPT为图片,并合并生成PDF 最近有小伙伴需要把PPT打印,但苦于PPT太多,浪费纸张,所以特别写了这个合并多张PPT到一张A4纸上并生成PDF方便打印的程序: 前期准备 把PPT ...

最新文章

  1. myeclipse 10创建maven项目
  2. dba mysql命令_Mysql常用DBA命令
  3. No module named 'torch._C'
  4. NOIP2018比赛总结
  5. 浅析μC/OS-II OSTimeDly()函数和OSTimeTick()函数工作原理
  6. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果
  7. asp.net mvc项目实例_降龙-第13章:MVC开发准备
  8. webpack打包ES6降级ES5
  9. 涉密专用服务器审计系统,国产专用服务器主机审计
  10. zabbix监控之zabbix源码部署 (安装篇)
  11. 泰坦尼克数据集kaggle Titanic下载
  12. Java程序编译及打包
  13. 内网渗透之 windows 基础
  14. 手把手教你电机FOC控制【二】
  15. 网游无间道:你所忽略的托儿
  16. 【C】 求3个正整数的最小公倍数
  17. 想在Windows上使用getopt,我教你原地起飞
  18. 爬壁机器人外文文献_自动化专业外文翻译--Alicia3爬壁机器人的粘着控制
  19. Java个人知识点笔记总结
  20. html测试方案,网站测试方案.doc

热门文章

  1. 力扣算法题用c语言实现,刷题-力扣-25
  2. Team Foundation Server BuilderService LOG
  3. Xuxiang Qi--Deep Learning based Semantic Labelling of 3D Point Cloud in Visual SLAM
  4. C盘爆满,使用DiskGenius调整C盘大小,实操记录
  5. jsonp跨域请求用法
  6. 计算机里的文件弄不到桌面怎么办,电脑文件夹在桌面不显示怎么办
  7. 集线器和交换机的区别
  8. LOVE2D中实现一个简单的摇杆
  9. IOS最新新浪微博开放平台Oauth2.0授权获取Access_Token
  10. 大数据培训课资源调度器详解