为啥打开 .xlsm 而不是 .xls 时出现 python xlrd 错误

Posted

技术标签:

【中文标题】为啥打开 .xlsm 而不是 .xls 时出现 python xlrd 错误【英文标题】:Why is python xlrd errors when opening a .xlsm instead of .xls为什么打开 .xlsm 而不是 .xls 时出现 python xlrd 错误 【发布时间】:2019-08-02 05:49:14 【问题描述】:

Python 程序可以很好地打开 .xls,但不会打开 .xlsm 并立即失败。

xlrd.open_workbook("Some filename.xlsm")  

错误:发生异常:AttributeError 'bytes' 对象没有属性 'seek'

任何帮助将不胜感激...

【问题讨论】:

xlsm 文件与 xls 文件不同;你为什么认为它会起作用? 因为所有在线文档和到处的示例都说它通常是这样的,而且很多人都已经过去了...... xlsm 只是 excel 文档的另一个版本,所以通过 open_workbook 命令的 xlrd 什么也没说不同版本的特殊性,并表明它应该适用于大多数所有版本。 xlrd docs 状态:xlrd 是一个用于从 Excel 文件(无论是 .xls 还是 .xlsx 文件)读取数据和格式化信息的库。他们根本没有提到 .xlsm。 他们在文档中明确排除了宏。 让它工作...我需要先从加载到内存中的文件中读取,而不是默认从文件中读取的本机 open_workbook...(感谢 jfaccioni 和唐......很棒的东西真的...... 【参考方案1】:

对于遇到这种情况的人。解决方案是通过二进制文件将文件读取到变量中,以避免用于加载文件的 open_workbook 库......我认为它与编码为 utf-16-le 的文件有关......无论如何这里是一个 sn-p需要发生的事情。

with open(FilePath, 'rb') as tmp_file:
   tmp_excel=tmp_file.read()
tmp_file.close

objExcel=xlrd.open_workbook(file_contents=tmp_excel)

【讨论】:

这个代码仍然得到“格式不支持”。【参考方案2】:

在 xlrd 中有一个文件类型的测试。不知何故,.xlsm 文档的文件类型不是“.xls”。 对于 xlrd 的 1.2.0 版本,这不是问题。

【讨论】:

这不是这里的问题。请不要再使用 xlrd 1.2.0,它存在可能包括安全问题的错误。 xlrd 2.0.1 不想读取 .xlsm。 pandas 1.1.5 使用 xlrd,所以卡在这里。 请看这个答案:***.com/a/65266497/216229

以上是关于为啥打开 .xlsm 而不是 .xls 时出现 python xlrd 错误的主要内容,如果未能解决你的问题,请参考以下文章

xlsm的文件怎么打开?

尝试读取 .xlsm 文件时出现 java.lang.NoSuchMethodError

为啥将字符串作为文件名而不是 char* 传递时出现错误?

尝试使用 Xlwings/Python 保存 .xlsm 时出现 Com_Error

尝试在映射服务器上将 XLSM 保存为 CSV 时出现“对象 _workbook 的方法保存失败”错误

使用 xlrd 打开 Excel 文件时出现编码错误