书没有调用 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: '