使用xlrd时,读取包含公式的单元格值将返回0.0

Amb*_*mbi 12 python xlrd

我尝试读取单元格值,例如excel表中的E5和E5包含公式' =(A29 - A2) '.我使用以下代码,它返回0.00而不是实际值1.440408 .有办法解决这个问题吗?我想打印正确的值.请帮我解决一下这个.谢谢.

book = xlrd.open_workbook('Test.xlsx')
first_sheet = book.sheet_by_index(0)
particular_cell_value = (first_sheet.cell_value(4,4))
print(particular_cell_value)
Run Code Online (Sandbox Code Playgroud)

Joh*_*n Y 13

Excel文件独立存储公式和值. 如果文件由Excel直接保存,则Excel将同时写入两者.但是,其他软件(如xlwt,OpenPyXL和XlsxWriter)生成的文件只会编写公式.这是因为无法保证第三方软件包能够以与Excel相同的方式评估Excel的内置函数.因此,推荐(实际上来自Microsoft本身)是为第三方软件包编写公式,将值设置为零,并设置全局"自动重新计算"标志(因此,如果文件在Excel中打开,Excel将继续并自动计算所有公式结果).

XlsxWriter在其文档中说明了该write_formula()方法:

XlsxWriter不计算公式的值,而是将值0存储为公式结果.然后,它在XLSX文件中设置一个全局标志,表示在打开文件时应重新计算所有公式和函数.这是Excel文档中推荐的方法,通常它适用于电子表格应用程序.但是,没有计算公式的工具的应用程序(如Excel Viewer)或某些移动应用程序将仅显示0结果.

然后,如果你真的想在那里放一个值,它会继续告诉你如何将值和公式一起写出来.值将是您选择的任何值,这不一定是Excel计算的值.在撰写本文时,xlwt和OpenPyXL都不支持此功能.

所以,说到这一切,当涉及到阅读 Excel文件时,自然xlrd将会获得0,除非结果也是同时写入的.您会注意到,当Excel上次保存文件时,xlrd始终会获取正确的结果.如果您使用XlsxWriter 编写结果,它也会获取结果(可能是也可能不正确).

  • 在Excel中打开文件,保存它,现在可以了!谢谢你! (2认同)