openpyxl.load_workbook(文件,data_only=True 不起作用?

openpyxl.load_workbook(file, data_only=True doens't work?

为什么 x = "None" 而不是“500”? 我已经尝试了我所知道的一切并搜索了 1 小时的答案...... 感谢您的帮助!

import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active
sheet["A1"] = 200
sheet["A2"] = 300
sheet["A3"] = "=SUM(A1+A2)"

wb.save("writeFormula.xlsx")

wbFormulas = openpyxl.load_workbook("writeFormula.xlsx")
sheet = wbFormulas.active
print(sheet["A3"].value)

wbDataOnly = openpyxl.load_workbook("writeFormula.xlsx", data_only=True)
sheet = wbDataOnly.active
x = (sheet["A3"].value)
print(x) # None? Should print 500?

来自documentation

openpyxl never evaluates formula

文档说:

data_only controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet.

因此,如果您没有使用 Excel 打开该 .xlsx 文件 (writeFormula.xlsx) 一次,那么 Excel 将没有任何数据可存储。因此,您的程序将 return 一个 NoneType 值。 如果你想要你的程序return'500',你应该手动打开'writeFormula.xlsx'。然后,注释程序的文件创建部分。你会得到'500'。

我已经试过了。它有效。如果你有不同的意见,请告诉我。谢谢

我也有同样的问题。解决办法是手动打开xlsx文件然后关闭,然后点击保存。这样操作之后,可以试试wbDataonly编程部分,得到数据500

有一种简单的方法可以启动 excel 并更新公式值。

示例代码片段

import win32com.client as win32

excel = win32.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(inputFile)
workbook.Save()
workbook.Close()
excel.Quit()        

And for reading the data back we can use data_only mode as True.
oxl = openpyxl.load_workbook(inputFile,data_only=True)

检查 Excel 中单元格的格式。

我也 运行 关注这个问题。 The documentation 表示您必须通过 excel 应用程序打开工作簿并重新保存,然后该值将 return 为最后计算的值。如

我做到了,但我仍然得到 'None' 作为我的 return。

与许多 excel/vba 问题一样,结果证明这是格式问题。我将单元格格式设置为 'Accounting' 而不是 'Number.' 将其更改为数字后,它起作用了。