书没有调用 xlrd.open_workbook() 的 extract_formulas 属性

Posted

技术标签:

【中文标题】书没有调用 xlrd.open_workbook() 的 extract_formulas 属性【英文标题】:Book has no extract_formulas attribute calling xlrd.open_workbook() 【发布时间】:2021-10-09 19:36:07 【问题描述】:

我有这个代码:

import xlrd

path = "C:\\Users\\m.macapanas\\Desktop\\OFCCP_Default_Values.xlsm"
excel_workbook = xlrd.open_workbook(path)
excel_worksheet = excel_workbook.sheet_by_index(0)


#Read from Excel Worksheet
print("Your Worksheet has " + str(excel_worksheet.ncols) + " columns")
print("Your Worksheet has " + str(excel_worksheet.nrows) + " rows")

for row in range (excel_worksheet.nrows):
    for col in range(excel_worksheet.ncols):
        print(excel_worksheet.cell_value(row, col), end='')
        print('\t', end='')
    print()

那么结果就是错误

Traceback(最近一次调用最后一次): 文件“C:/Users/m.macapanas/IdeaProjects/OFCCP Tool/Read Excel File with Python/Pandas.py”,第 4 行,在 excel_workbook = xlrd.open_workbook(路径) 文件“C:\Users\m.macapanas\AppData\Roaming\Python\Python36\site-packages\xlrd_init_.py”,第 141 行,在 open_workbook 衣衫褴褛的行=衣衫褴褛的行, 文件“C:\Users\m.macapanas\AppData\Roaming\Python\Python36\site-packages\xlrd\xlsx.py”,第 808 行,在 open_workbook_2007_xml x12book.process_stream(zflo, '工作簿') 文件“C:\Users\m.macapanas\AppData\Roaming\Python\Python36\site-packages\xlrd\xlsx.py”,第 265 行,在 process_stream 甲基(自我,元素) 文件“C:\Users\m.macapanas\AppData\Roaming\Python\Python36\site-packages\xlrd\xlsx.py”,第 392 行,在 do_sheet sheet = Sheet(bk,位置=无,名称=名称,编号=sheetx) init 中的文件“C:\Users\m.macapanas\AppData\Roaming\Python\Python36\site-packages\xlrd\sheet.py”,第 326 行 self.extract_formulas = book.extract_formulas AttributeError: 'Book' 对象没有属性 'extract_formulas'

【问题讨论】:

AttributeError: 'Book' object has no attribute 'extract_formulas' 那是你的问题。不知道如何解决,但快速谷歌似乎表明它可能取决于您使用的版本? 我已经安装了 Python 3.6.0 @AthenaBrielleMabuyo 我认为这可能是xlrd 的版本问题。 我有这个 xlrd 版本。 c:\users\m.macapanas\appdata\roaming\python\python36\site-packages 中的 xlrd (2.0.1) 我应该安装什么版本?我需要卸载我的 python 3.6.0 版本并安装最新版本吗?这样 xlrd 包也升级了吗? 评论建议检查您的 xlrd 版本。你做到了,请edit你的问题更新此信息,而不是评论。 【参考方案1】:

根据警告中的xlrd documentation 状态

此库将不再读取 .xls 文件以外的任何内容。

当您尝试打开文件"C:\\Users\\m.macapanas\\Desktop\\OFCCP_Default_Values.xlsm"(扩展名为.xlsm)的工作簿时会弹出错误消息。

xlrd library 明确不支持读取更新的文件格式,例如.xlsm。因此,您要么必须切换库,要么找到将输入文件降级为支持的.xls 格式的方法。

【讨论】:

【参考方案2】:

问题

分析错误

第 4 行,在 excel_workbook = xlrd.open_workbook(path)

您的脚本无法打开工作簿。

AttributeError: 'Book' 对象没有属性 'extract_formulas'

属性错误状态,它没有找到extract_formulas 作为xlrd's Book object 的属性。

由不支持的文件格式.xlsx引起

正如Nathaniel Ford's answer 解释的那样:

xlrd(截至当前版本 2.0.1)仅支持较旧的 Excel 文件格式 .xls

另见

Pandas cannot open an Excel (.xlsx) file Why is python xlrd errors when opening a .xlsm instead of .xls

替代解决方案

对 *** 的研究给出了: How can I open an Excel file in Python?

Working with Excel Files in Python 是一个很棒的资源集合,其中列出了流行的库。

移植到 OpenPyXL

在上面:openpyxl

推荐的读写Excel 2010文件包(即:.xlsx)

安装后使用:

pip install openpyxl

您的代码可能会被移植到这个库,例如:

from openpyxl import load_workbook

path = "C:\\Users\\m.macapanas\\Desktop\\OFCCP_Default_Values.xlsm"

excel_workbook = load_workbook(filename = path)
excel_worksheet = excel_workbook. worksheets[0] # first worksheet


# Read from Excel Worksheet
print("Your Worksheet has " + str(excel_worksheet.ncols) + " columns")
print("Your Worksheet has " + str(excel_worksheet.nrows) + " rows")

for row in excel_worksheet.rows:
    for col in excel_worksheet.cols:
        print(excel_worksheet.cell(row, col), end='')
        print('\t', end='')
    print()

【讨论】:

.xlsm 是一个Microsoft Excel 2007 启用宏的工作簿

以上是关于书没有调用 xlrd.open_workbook() 的 extract_formulas 属性的主要内容,如果未能解决你的问题,请参考以下文章

解决open()函数xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题

Python xlrd.open_workbook 生成错误:ValueError: invalid literal for int() with base 10: '

Python 调用xlrd读取excel的时候报错?

【Python】xlrd模块使用

xlrd excel需要放到哪里

xlrd