【问题标题】:Using xlsxwriter, Excel file cannot be opened. File extension is not valid使用 xlsxwriter,无法打开 Excel 文件。文件扩展名无效
【发布时间】:2020-12-12 15:56:44
【问题描述】:

我在使用 xlsxwriter 库创建 Excel 文件时尝试插入宏。我按照文档中的教程示例进行操作:Working with VBA Macros

文件已创建,但在尝试使用 Microsoft Excel 打开时,提示以下消息:

Excel 无法打开文件,因为文件格式或文件扩展名无效。验证文件没有损坏,并且文件扩展名与文件格式匹配。

注意:

  1. 我在 Windows 10 上使用 Microsoft Office Excel 2007 (12.0.6425.1000) SP2 MSO 版本。
  2. 使用 LibreOffice 打开没问题,但单击按钮没有任何响应(因为它无法读取 VBA)。
def action_macro_test(self):
        workbook = xlsxwriter.Workbook("/home/user1/Desktop/macro_test.xlsm")
        worksheet = workbook.add_worksheet("Sheet1")

        worksheet.set_column('A:A', 30)

        # Add the VBA project binary.
        workbook.add_vba_project('./vbaProject.bin')

        # Show text for the end user.
        worksheet.write('A3', 'Press the button to say hello.')

        # Add a button tied to a macro in the VBA project.
        worksheet.insert_button('B3', {'macro':   'say_hello',
                                    'caption': 'Say Hello!',
                                    'width':   80,
                                    'height':  30})

        workbook.close()

【问题讨论】:

  • 发布您的实际代码总是有帮助的,而不是指向教程或其他页面的链接。
  • @TimWilliams 是的,感谢您的建议,我已经用实际代码更新了我的问题

标签: python excel vba xlsxwriter


【解决方案1】:

您创建了一个包含宏的工作簿,但将其保存为 .xlsx。 Excel 不允许在 .xlsx 文件中使用宏。他们必须是.xlsm

【讨论】:

  • 感谢您的回复,但问题是我已按照文档建议将其保存为 .xlsm,有什么遗漏的吗?将使用代码 sn-p 更新我的帖子
  • 我已经用实际代码更新了我的问题,我使用了 '.xlsm' 格式,但使用 Microsoft Excel 打开时仍然显示该错误消息。
【解决方案2】:

我运行了您的代码,只修改了路径,它创建了一个按预期打开的文件:

import xlsxwriter

def action_macro_test(self):
        workbook = xlsxwriter.Workbook("macro_test.xlsm")
        worksheet = workbook.add_worksheet("Sheet1")

        worksheet.set_column('A:A', 30)

        # Add the VBA project binary.
        workbook.add_vba_project('./vbaProject.bin')

        # Show text for the end user.
        worksheet.write('A3', 'Press the button to say hello.')

        # Add a button tied to a macro in the VBA project.
        worksheet.insert_button('B3', {'macro':   'say_hello',
                                    'caption': 'Say Hello!',
                                    'width':   80,
                                    'height':  30})

        workbook.close()

action_macro_test(None)

输出

我使用了 XlsxWriter 发行版的示例目录中的 vbaProject.bin 文件,并使用几个不同版本的 Excel 对其进行了测试。

可以,您可以尝试发行版示例目录中的macros.py 示例,看看它是否适合您。之后确保您的示例中有一个有效的 vbaProject.bin 文件。

【讨论】:

  • 感谢您的回答,我会再次测试并尽快更新结果。我可以知道,@jmcnamara 你是用 LibreOffice 还是 Microsoft Excel 打开文件?单击“Say Hello”按钮时是否有任何弹出消息?
  • 我只使用Excel,确实会弹出消息。
【解决方案3】:

原来vbaProject.bin文件路径设置不正确。现在工作正常。很抱歉误报。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2023-01-19
    • 1970-01-01
    • 2020-07-11
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多