属性错误:'NoneType'对象在python win32com.client中没有属性'Worksheets'


def messageToCal(path, calculatorName,argList, eventName, fucName,PCBName):
# location of LED calculator 
loc = path+calculatorName
#print loc
# open excel, run macro called "external_Run" with argList
xls=win32com.client.Dispatch("Excel.Application")
wb = xls.Workbooks.Open(Filename=loc)
try:
xls.Application.Run("external_Run",argList)
except Exception as e:
print "--------------- ERROR ------------------"
print(e)
print "=> No data was found, please check your input file"
raise        
#xls.Visible = True
# disable asking dialog when close excel
xls.DisplayAlerts = False
# export first sheet (macro output) to csv 
w=wb.Worksheets(1)
w.SaveAs(path +'#'+eventName+'_'+fucName+'_'+PCBName.replace(".", "")+'_' +str(argList[3])+ '.csv',6)
xls.Application.Quit()
del xls 

当运行此代码时,它将错误作为抛出

**w=wb.Worksheets(1)
AttributeError: 'NoneType' object has no attribute 'Worksheets'**

以前运行良好。突然它抛出了错误。

某些原因导致代码无法正确打开工作簿。这导致wb被设置为None。这就是为什么在尝试访问wb.Worksheets(1)时会得到AttributeError。

如果代码中没有任何更改,则很可能是电子表格中的某些内容导致了错误。除了查看电子表格最近的任何更改以确定问题的实际原因外,您还需要验证电子表格是否位于正确的位置。

Excel工作表没有问题,只是您的代码在运行代码时打开Excel,但从不关闭它,即在您的情况下使用wb.close()

如果打开"任务管理器"并单击更多详细信息,即使在程序结束后,您也会看到Excel在后台运行。

是的,您可以在每次运行程序后通过任务管理器关闭它,以便再次使用该Excel文件。

此外,如果你以这种方式关闭它,并通过Excel打开文件,你会看到Excel提供了该文件的历史记录(将是完全相同的数据(,因为该程序之前突然关闭。

如上所述,您可以使用wb.close()并通过代码关闭工作簿。虽然它会给你一个错误,但不会以任何明显的方式影响你的程序的结果。我应用了这个补丁,一切都很好(忽略了不舒服的错误(。

最新更新