python批量导出excel区域图片_python excel 导出图片-程序员宅基地

技术标签: python  pythonxls  开发语言  

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() # 关闭多线程
原文:
https://ranjuan.cn/python-save-excelarea-pic/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ydk001001/article/details/123493154

智能推荐

php-读取excel文件_php 读取excel-程序员宅基地

文章浏览阅读373次。php-读取excel文件_php 读取excel

(2022,FreGAN)利用频率分量在有限数据下训练 GAN-程序员宅基地

文章浏览阅读522次,点赞4次,收藏7次。GAN 在拟合数据分布时,往往倾向于拟合低频信息而忽略高频信息。本文提出了一种称为 FreGAN 的频率感知模型,以提高 G 和 D 的频率感知能力。通过鼓励 G 生成更合理高频信号,从而提高有限数据下的合成性能。_fregan

pyc文件逆向_攻防世界python-trade_逆向之旅010_逆向 pyc base64-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏8次。使用工具easy python Decompiler 将pyc文件反编译为py文件。我把这个工具放在百度云里了,按需自取,链接(永久): 链接:https://pan.baidu.com/s/14iQRcHyAEpmmycTQZLbwlQ 提取码:3naj_逆向 pyc base64

Mac Node.JS本地卸载删除解决方案_mac 卸载本地nodejs-程序员宅基地

文章浏览阅读1k次。前言 卸载Node.JS操作步骤,按住 command + 空格 键 搜索 终端 依次复制粘贴一下命令sudo npm uninstall npm -gsudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*sudo rm -rf /usr/local/include/node /Users/$USER/.npmsudo rm /usr/local/bi..._mac 卸载本地nodejs

Java虚拟机学习笔记整理_虚拟机的笔记-程序员宅基地

文章浏览阅读645次,点赞2次,收藏2次。一. JVM规范1.1 位运算1.1.1 整型int原码:第一位符号位,0为正,1为负 反码:符号位不动,原码取反 补码 正数补码:和源码相同 负数补码:符号位不动,反码加1 example-6原码: 10000110反码: 11111001补码: 11111010为何使用补码 可以无歧义地表示0 不使用补码,将0看为正数:0000 0000 ..._虚拟机的笔记

蓝凌EIS智慧协同平台saveImg接口存在任意文件上传漏洞_蓝凌eis智慧协同平台文件上传漏洞-程序员宅基地

文章浏览阅读979次。蓝凌智慧协同平台eis集合了非常丰富的模块,满足组织企业在知识、协同、项目管理系统建设等需求。_蓝凌eis智慧协同平台文件上传漏洞

随便推点

去除数字滤波器后的相位延迟(内有实操代码和效果图)_减小相位延迟的方法-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏14次。参考链接https://ww2.mathworks.cn/help/signal/digital-filter-analysis.htmlhttps://ww2.mathworks.cn/help/signal/ug/compensate-for-delay-and-distortion-introduced-by-filters.html?s_tid=srchtitleFIR 线性相位延迟  FIR滤波器是有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中基本的元件.._减小相位延迟的方法

enumerate()用法_enumerate(a)-程序员宅基地

文章浏览阅读221次。for index , item in enumerate (a , x):for index , item in enumerate (a):这里有n,v俩参数,n先不管,v为a中的元素,比较简单。a=[[8,2],[2,3],[5,4]]print(a)for n , v in enumerate(a): v += v print(v) #print(n)输出[[8, 2], [2, 3], [5, 4]][8, 2, 8, 2][2, 3, 2, 3]_enumerate(a)

计算几何讲义——计算几何中的欧拉定理-程序员宅基地

文章浏览阅读188次。在处理计算几何的问题中,有时候我们会将其看成图论中的graph图,结合我们在图论中学习过的欧拉定理,我们可以通过图形的节点数(v)和边数(e)得到不是那么好求的面数f。 平面图中的欧拉定理: 定理:设G为任意的连通的平面图,则v-e+f=2,v是G的顶点数,e是G的边数,f是G的面数。证明:其实有点类似几何学中的欧拉公式的证明方法,这里采用归纳证明的方法。对m..._怎么证明平面图欧拉定理

c语言中各种括号的作用,C语言中各种类型指针的特性与用法介绍-程序员宅基地

文章浏览阅读750次。C语言中各种类型指针的特性与用法介绍本文主要介绍了C语言中各种类型指针的特性与用法,有需要的朋友可以参考一下!想了解更多相关信息请持续关注我们应届毕业生考试网!指针为什么要区分类型:在同一种编译器环境下,一个指针变量所占用的内存空间是固定的。比如,在16位编译器环境 下,任何一个指针变量都只占用8个字节,并不会随所指向变量的类型而改变。虽然所有的指针都只占8个字节,但不同类型的变量却占不同的字节数..._c语言带括号指针

缅甸文字库 缅甸语字库 缅甸字库算法_0x103c-程序员宅基地

文章浏览阅读9.5k次。字库交流 QQ:2229691219 缅甸语比较特殊、缅甸语有官方和民间之分,二者不同的是编码机制不同,因此这2种缅甸语的字串翻译、处理引擎、字库都是不同的。我们这里只讨论官方语言。 缅文、泰文等婆罗米系文字大多是元音附标文字,一般辅音字母自带默认元音可以发音,真正拼写词句时元音像标点符号一样附标在辅音上下左右的相应位置。由于每个元音位于辅音的具体位置是有自己的规则的,当只书写..._0x103c

Python+django+vue校园二手闲置物品拍卖系统pycharm毕业设计项目推荐_基于python+django+vue实现的校园二手交易平台-程序员宅基地

文章浏览阅读200次。在校园,随着学生数量的增多,存在许多生活和学习物品,许多学习用品经过一学期学习之后往往被闲置,一些出于一时喜欢而购买的物品使用机会少而被闲置,还有一些物品以低廉的价格卖给资源回收站,造成巨大的资源浪费。校园闲置物品拍卖系统使用python技术,MySQL数据库进行开发,系统后台使用django框架进行开发,具有低耦合、高内聚的特点,其中校园用户通过人脸识别的方法增加系统安全性,在闲置物品推荐中,使用协同过滤算法进行商品推荐。系统的开发,帮助高校有效的对闲置物品进行管理,提高了闲置物品销售的效率。_基于python+django+vue实现的校园二手交易平台

推荐文章

热门文章

相关标签