【问题标题】:win32com Excel.Application can't open documents anymorewin32com Excel.Application 无法再打开文档
【发布时间】:2017-05-20 10:04:39
【问题描述】:

这是上周的工作,但由于某种原因它今天停止工作,也许是因为新年?

def remove_strikethroughs(xlsx):
    excel = win32com.client.Dispatch('Excel.Application')

    xl = pd.ExcelFile(xlsx)
    sheet_names = xl.sheet_names
    for sheet in sheet_names:
        if any(tab in sheet for tab in tabs_used):
            #print (sheet)

            wb = excel.Workbooks.Open(xlsx)
            ws = wb.WorkSheets(sheet)
            for cell in ws.Range('A5:B150'):
                if cell.Font.Strikethrough == True:
                    cell.value = '[MDU]' + str(cell)
            wb.Save()
            wb.Close()
    excel.Visible = True
    excel.DisplayAlerts = True
    excel.Application.Quit()

我收到以下错误消息:

"AttributeError: '<win32com.gen_py.Microsoft Excel 15.0 Object Library.Workbooks instance at 0x20920640>' object has no attribute 'open'"

有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 那里的任何地方都没有调用小写“open”,你确定你发布了你正在使用的代码吗?

标签: python excel win32com


【解决方案1】:

没有open 方法,它是Open。 Python 区分大小写:)

【讨论】:

  • 您好,上周使用“open”工作,在我将其更改为“Open”后,它出现以下错误消息:AttributeError: ''对象没有属性'WorkSheets'
  • @AndyDo:这可能是因为属性名为Worksheets,而不是WorkSheets。见msdn.microsoft.com/en-us/library/office/ff835542.aspx
  • @AndyDo 这是完全相同的错误。请记住,python 区分大小写,所以WorkSheets != Worksheets.
【解决方案2】:

奇怪的是,我遇到了与@AndyDo 相同的问题。我最初用于访问 Excel 应用程序的代码停止工作。

原始(非工作):

** 注意 - 很明显,我没有匹配我使用的示例中的大小写。但是,我不确定为什么之前的代码可以正常工作。

来源:How to open a password protected excel file using python?

import win32com.client as w3c

xlapp = w3c.Dispatch('Excel.Application')
xlwb = xlapp.Workbooks.open(file.xlsx, False, True, None, file_password)
xlsheet = xlwb.WorkSheets('my_sheet_name')

然后,我更新了案例,如下面的代码所示,以纠正属性错误。

修订(工作):

来源 - Python Excel Mini Cookbook

import win32com.client as w3c

xlapp = w3c.gencache.EnsureDispatch('Excel.Application')
xlwb = xlapp.Workbooks.Open(file.xlsx, False, True, None, file_password)
xlsheet = xlwb.Worksheets('my_sheet_name')

我想知道激活公式栏的另一个打开的工作簿是否影响了该问题。我必须做更多的调查。

【讨论】:

  • 您修改后的工作代码在循环访问受密码保护的 .xlsb 文件时对我有用。我这样做是盲目的,因为我真的找不到任何文档 - 1)谢谢你的回答,2)xlapp.workbooks.open 中的论点在做什么/参考什么? File, False, False, None, Password 不起作用 - 但 file, False, True, None, password 成功了。
【解决方案3】:

当代码第一次运行良好但再次运行时抛出异常“AttributeError:Excel.Application.Workbooks”时,我来寻找这个错误。

这不是技术解决方案,这只是一个愚蠢的(很常见的)过滤器。

我在后台打开了一个 Excel 文件,代码关闭了 Excel 应用程序(当然,我们应该只关闭工作簿)。关闭 Excel 后,后台会弹出我打开的文件的保存对话框。当我再次运行相同的代码时,Excel 应用程序就成了一个问题,因为它还没有从 Python 中发布。

也许,只是也许,你也在做类似的事情。击掌!!你不是唯一一个!

【讨论】:

    【解决方案4】:
    1. 我遇到了类似的问题 - 运行以下代码时:
      from win32com.client import Dispatch    
      import os
    
      list_of_files=os.listdir(path)
      xl = Dispatch('Excel.Application')
      xlWb = xl.Workbooks.Open(file)
    

    它曾经可以工作,但今天在尝试运行此代码时失败了。

    1. 解决方案是:
      • 地址:import win32com.client as w3c
      • 更改:xl = Dispatch('Excel.Application')xl = w3c.Dispatch('Excel.Application')

    【讨论】:

      【解决方案5】:

      我面临这个问题“AttributeError:Excel.Application.Workbooks” 要修复它,只需关闭在后台打开的任何 Excel 工作表,它就会被修复。

      【讨论】:

      • Rupak's answer中的解决方案相同。
      • @ericAya 我没注意到
      猜你喜欢
      • 2017-07-15
      • 2016-03-17
      • 1970-01-01
      • 2013-09-28
      • 2013-06-13
      • 2013-02-18
      • 1970-01-01
      • 2020-09-01
      • 2016-01-02
      相关资源
      最近更新 更多