【问题标题】:Why am I getting 'Open method of Workbooks class failed' error when trying to open Excel file using pywin32?为什么在尝试使用 pywin32 打开 Excel 文件时出现“工作簿类的打开方法失败”错误?
【发布时间】:2022-11-08 05:16:24
【问题描述】:

所以,我正在使用 openpyxl 和 pandas 打开一个 excel 文件,并写入数据。然后,我尝试使用 pywin32 打开同一个文件并运行一个宏来解析数据。但是,尝试使用 pywin32 打开文件时出现此错误:

pywintypes.com_error:(-2147352567,'发生异常',(0,'Microsoft Excel','工作簿类的打开方法失败','xlmain11.chm',0,-2146827284),无)

这是我在 pywin32 中使用的代码:

    if os.path.exists(self.excel_parser_location):
        # print "Opening Telematics_Messages_Parser.xlsm in Excel"
        xl = client.Dispatch("Excel.Application")
        xl.Application.visible = True
        wb = xl.Workbooks.Open(os.path.abspath(self.excel_parser_location), ReadOnly=1)

这是我在使用 pywin32 之前用来写入数据的代码:

    if os.path.exists(csv_path):
        data = pd.read_csv(csv_path, error_bad_lines=False)
        book = openpyxl.load_workbook(self.excel_parser_location, keep_vba=True)
        writer = pd.ExcelWriter(self.excel_parser_location)
        writer.book = book
        data.to_excel(writer, sheet_name='2 RawData', index=False)
        # print 'Writing new data'
        book.remove(book['2 RawData'])
        # print 'Removing blank sheet'
        book_sheet = book['2 RawData1']
        book_sheet.title = '2 RawData'
        # print 'Renaming sheet'
        writer.save()
        writer.close()

过去我遇到过类似的问题,我通过使用旧版本的 pywin32 解决了这个问题,但现在不行了。我正在使用 pywin32 版本 223。

【问题讨论】:

  • 也许试试ReadOnly = True。该参数是一个变体,也许 Excel 需要一种 VT_BOOL,而不是 VT_I4?
  • 还有xl.Visible=True(应用程序是多余的),但我怀疑这是导致问题的原因。
  • 我都试过了,但我仍然遇到问题。虽然,现在看起来响应中有一些额外的东西。
  • 文件“C:\BCP_Telematics_HIL_Test\Mini-Hex-Telematics\Test Scripts\Support_files\Functions\telematics2.py”,第 96 行,run_parsing_macro wb = xl.Workbooks.Open(os.path.abspath(self.excel_parser_location), ReadOnly =True)文件“C:\Users\martita3\AppData\Local\Temp\gen_py\3.7\00020813-0000-0000-C000-000000000046x0x1x9\Workbooks.py”,第 78 行,在 Open、Converter、AddToMru、Local、CorruptLoad )
  • 第一个“文件”错误是我遇到问题的地方。但是,第二个“文件”错误似乎是新的,我不知道它来自哪里。

标签: python excel pywin32


【解决方案1】:

当文件路径太长时,有时会发生此错误。因此,您应该使用路径较短的文件尝试此代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多