[英]win32com python unusual behaviour
win32com 的新手。 下面是我將 xlsx 文件轉換為網頁並將單元格范圍捕獲為 .png 的代碼。 我面臨的問題是有時代碼運行良好,但有時會引發錯誤。
import os
import sys
import win32com.client
from win32com.client.gencache import EnsureDispatch
from win32com.client import constants
from win32com.client import DispatchEx
import PIL
from PIL import ImageGrab
# #---------------------------standalone--------------------------------
path = r'path'
Temp='folder'
#
## ---------------------------------------------------------------------
filename1='Images.html'
images='Images_files'
def A(source):
xl = EnsureDispatch('Excel.Application')
wb = xl.Workbooks.Open(yourExcelFile)
wb.SaveAs(newFileName, constants.xlHtml)
xl.Workbooks.Close()
xl.Quit()
del xl
Allsheets=[]
def B():
xlApp = win32com.client.DispatchEx('Excel.Application')
xlApp.Visible = True
wb = xlApp.Workbooks.Open(os.path.join(path,Temp,source))
for sh in wb.Sheets:
Allsheets.append(sh.Name)
num=1
array=["AC7:AF10", "AC28:AF31","AC49:AF52"]
for sheet_4 in Allsheets[:4]:
xlApp.Worksheets(sheet_4).Activate()
win32c = win32com.client.constants
ws = xlApp.ActiveSheet
for i in range(len(array)):
ws.Range(array[i]).CopyPicture(Format=win32c.xlBitmap)
img = ImageGrab.grabclipboard()
img.save(os.path.join(path,Temp,images,'TextBox0'+ f"{num:02}"+'.png'))
num=num+1
n=13
arry=["K5:M5","X5:Z5","K26:M26","X26:Z26","K47:M47","X47:Z47"]
for sheet_name in Allsheets[5:]:
xlApp.Worksheets(sheet_name).Activate()
win32c = win32com.client.constants
ws = xlApp.ActiveSheet
for i in range(len(arry)):
ws.Range(arry[i]).CopyPicture(Format=win32c.xlBitmap)
img = ImageGrab.grabclipboard()
img.save(os.path.join(path,Temp,images,'Avg0'+ f"{n:02}"+'.png'))
n=n+1
wb.Close(True)
xlApp.Quit()
for f in os.listdir(os.path.join(path,Temp)):
if f.endswith('.xlsx'):
source=f
yourExcelFile = os.path.join(path,Temp,source)
newFileName = os.path.join(path,Temp,filename1)
A(source)
B()
上面的代碼在大多數情況下都可以正常工作,但是對於之前工作的相同輸入數據會引發以下錯誤。 我嘗試刪除 gen_py 並重新運行代碼。 已經提到了幾乎所有的解決方案,但目前沒有任何明確和有效的解決方案。 請有人提出解決方案。
img.save(os.path.join(path,Temp,images,'TextBox0'+ f"{num:02}"+'.png'))
AttributeError: 'NoneType' object has no attribute 'save'
HAHAHA.....,我以前在使用PIL
模塊時也遇到過同樣的問題。
AttributeError: 'NoneType' object has no attribute 'save'
我猜如果你調試這段代碼,它可以正常運行這段代碼,對吧?
有兩種處理方法:
import time
time.sleep(1) # sleep for a while
img.save(os.path.join(path,Temp,images,'TextBox0'+ f"{num:02}"+'.png'))
或者(我推薦這個):
while True:
try:
img.save(os.path.join(path,Temp,images,'TextBox0'+ f"{num:02}"+'.png'))
break
except AttributeError:
pass
except Exception as e:
print(e.args)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.