1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python批量导出excel区域图片

python批量导出excel区域图片

时间:2020-04-02 23:41:38

相关推荐

python批量导出excel区域图片

import win32com.client as win32 # 打开excel文件#pip install pypiwin32##########import openpyxl #另一种操作excel的包import timeimport pythoncom,osfrom PIL import ImageGrab #用于获取复制的图片file='312(带图片).xlsx'file_name = os.path.abspath(file) # 把相对路径转成绝对路径#pythoncom.CoInitialize() # 开启多线程excel = win32.Dispatch('Excel.Application') #获取Excel#excel = DispatchEx("Excel.Application") #启动excelexcel.Visible = True #可视化#excel.DisplayAlerts = False #是否显示警告 (保存时不会弹出窗口)#excel.ScreenUpdating = 1 # 关闭屏幕刷新wb2 = excel.Workbooks.Open(file_name)ws2 = wb2.Worksheets('Sheet1') # 获取Sheet1info = 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))+1i =1j = 0for 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)).Valueif 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 strexcel.Selection.ShapeRange.Name = pic_shape_name[j] # 选择区域重命名#time.sleep(2)ws2.Shapes(pic_shape_name[j]).Copy() # 复制移动的图片Picture 1img = 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), (),)#_error: (-2147352567, '发生意外。', (0, None, None, None, 0, -2147221040), None)##_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),#_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '类 Range 的 CopyPicture 方法无效', 'xlmain11.chm', 0, -2146827284), None)#_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.xlsxwb2.Close() #关闭工作薄,不保存excel.Quit() #退出excel

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

原文:

/python-save-excelarea-pic/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。